现在的位置: 首页 > 综合 > 正文

使用errno检测错误

2012年12月14日 ⁄ 综合 ⁄ 共 532字 ⁄ 字号 评论关闭

很多库函数,特别是那些与操作系统有关的,当执行失败时会通过一个名称为errno的外部变量,通知程序该函数调用失败。如:

 

/*  调用库函数  */

if(errno)

/* 处理错误 */

 

上面看似清楚明了的代码,其实是错误的,出错原因在于,在库函数没有失败的情况下,并没有强制要求库函数一定要设置errno0,这样errno的值可能是前一个执行失败的库函数设置的值。做如下修改:

 

errno = 0;

/*  调用库函数  */

if(errno)

/* 处理错误 */

 

这下应该行了吧,但仍然是错误的。库函数在调用成功是,既没有强制要求对errno清零,同时也没有禁止设置errno。如调用fopen库函数时,当fopen被要求新建一个文件以供程序输出时,如果已经存在一个同名文件,fopen函数将先删除它,再新建一个文件,及fopen可能调用其他的库函数用于检查文件是否存在(假设该库函数在文件不存在时,设置errno的值),则fopen在每次新建一个不存在的文件时,errno被设置。因此在调用库函数是,应先检测作为错误指示的返回值,确定程序执行失败,再检查errno,以弄清楚出错原因,应按如下方式书写代码:

 

/*  调用库函数  */

if( 返回的错误值)

         检查errno

抱歉!评论已关闭.