Chinaunix首页 | 论坛 | 博客
  • 博客访问: 227274
  • 博文数量: 68
  • 博客积分: 40
  • 博客等级: 民兵
  • 技术积分: 355
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-25 11:49
文章分类
文章存档

2014年(2)

2012年(66)

分类:

2012-09-05 11:35:54

原文地址:使用errno检测错误 作者:zyd_cu

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

 

/*  调用库函数  */

if(errno)

/* 处理错误 */

 

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

 

errno = 0;

/*  调用库函数  */

if(errno)

/* 处理错误 */

 

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

 

/*  调用库函数  */

if( 返回的错误值)

         检查errno

阅读(1372) | 评论(0) | 转发(0) |
0

上一篇:C语言未定义行为

下一篇:函数参数传递

给主人留下些什么吧!~~