Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4078020
  • 博文数量: 251
  • 博客积分: 11197
  • 博客等级: 上将
  • 技术积分: 6862
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-05 14:41
个人简介

@HUST张友东 work@taobao zyd_com@126.com

文章分类

全部博文(251)

文章存档

2014年(10)

2013年(20)

2012年(22)

2011年(74)

2010年(98)

2009年(27)

分类: C/C++

2010-06-09 20:07:44

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

 

/*  调用库函数  */

if(errno)

/* 处理错误 */

 

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

 

errno = 0;

/*  调用库函数  */

if(errno)

/* 处理错误 */

 

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

 

/*  调用库函数  */

if( 返回的错误值)

         检查errno

阅读(2846) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~