Unix C函数的的出错处理:
Unix函数调用后出错,通常会返回一个负数值,也有可能返回NULL等,这需要根据具体函数而定。
Unix函数出错后,都会把出错的原因保存在一个叫errno的变量里面,头文件<errno.h>中声明了errno变量,以及各种以E开头的出错常量值定义。
errno也有可能扩展成一个可以修改的整数类型左值。
例如:
extern int errno;
或者:
extern int * __errno_location(void);
#define errno (*__errno_location())
对于errno的使用,必须知道两条规则:
(1) 如果函数没有出错,errno的值不会被清除。只有当函数返回值指明函数出错了,才去检查errno的值。
(2) 任何一个函数都不会把errno的值置为0。
C标准中定义了两个函数,用来帮助打印出错信息。
#include <string.h>
char * strerror(int errnum);
此函数将errnum(通常为errno)映射为一个出错信息字符串。
#include <stdio>
void perror(const char * msg);
此函数先输出msg字符串,然后输出个冒号,接着输出errno对应的出错信息。
实例:
#include <apue.h>
#include <errno.h>
int main(int argc, char ** argv)
{
fprintf(stderr, "EACCES: %s\n", strerror(EACCES));
errno = ENOENT;
perror(argv[0]);
return 0;
}