很多库函数,特别是那些与操作系统有关的,当执行失败时会通过一个名称为errno的外部变量,通知程序该函数调用失败。
如果已经存在一个同名文件,fopen函数将先删除它,然后新建一个文件,这样fopen函数可能需要调用其他的库函数来检测同名
文件是否已经存在。假设用于检测文件的库函数在文件不存在时,会设置errno,那么,fopen函数每次新建一个事先并不存在的
文件时,及时没有任何程序错误发生,errno也仍然可能被设置。
因此,在调用库函数是,我们应该先检测作为错误指示的返回值,确定程序执行已经失败,然后再检查errno:
下面的代码利用这一特性进行错误处理:
errno = 0;
/
/*调用库函数*/
if(errno)
/*处理错误*/
上面的处理是错误的。
如果已经存在一个同名文件,fopen函数将先删除它,然后新建一个文件,这样fopen函数可能需要调用其他的库函数来检测同名
文件是否已经存在。假设用于检测文件的库函数在文件不存在时,会设置errno,那么,fopen函数每次新建一个事先并不存在的
文件时,及时没有任何程序错误发生,errno也仍然可能被设置。
因此,在调用库函数是,我们应该先检测作为错误指示的返回值,确定程序执行已经失败,然后再检查errno:
/*调用库函数*/
if(返回的错误值)
/*检查errno*/