Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19882532
  • 博文数量: 679
  • 博客积分: 10495
  • 博客等级: 上将
  • 技术积分: 9308
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-18 10:51
文章分类

全部博文(679)

文章存档

2012年(5)

2011年(38)

2010年(86)

2009年(145)

2008年(170)

2007年(165)

2006年(89)

分类: LINUX

2008-11-20 10:46:24

§3.9  错误处理

       正如我们已经看到的,本章介绍的许多系统调用和函数都会因为各种各样的原因而失败。失败时,它们会设置外部变量errno的值来指明失败的原因。许多不同的函数库都把这个变量用做报告错误的标准方法。我们也反复告诫大家,程序必须在函数报告出错之后立刻检查errno变量,因为它可能被下一个函数调用所覆盖,即使下一个函数自身并没有出错,也可能会覆盖这个变量。

错误代码的取值和含义都列在头文件errno.h里,其中包括:

􀂉 EPERM:操作不允许。

􀂉 ENOENT:文件或目录不存在。

􀂉 EINTR:系统调用被中断。

􀂉 EIOI/O错误。

􀂉 EBUSY:设备或资源忙。

􀂉 EEX IST:文件存在。

􀂉 EINVA L:无效参数。

􀂉 EMFILE:打开的文件过多。

􀂉 ENODEV:设备不存在。

􀂉 EISDIR:是一个目录。

􀂉 ENOTDIR:不是一个目录。

有两个非常有用的函数可以用来报告出现的错误,它们是strerrorperror

     3.9.1 strerror 函数

strerror函数把错误编码映射为一个字符串,该字符串对发生的错误类型进行说明。这在记录错误条件时十分有用。

函数原型如下:

#include

char *strerror(int errnum);

 

     3.9.2 perror 函数

perror函数也把error变量中报告的当前错误映射到一个字符串,并把它输出到标准错误输出流。该字符串的前面先加上参数s(如果s不为空)给出的信息,再加上一个冒号和一个空格。

函数原型如下:

#include

void perror(const char *s);

请看下面的例子:

perror(program);

它会在标准错误输出中给出如下的输出结果:

program: Too many open files

 

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