|
错误检查
函数执行失败时,一般都会返回一个特定的值,如 -1、空指针。这些值只能说明有错误发生,但错误的原因没有说明。
头文件 errno.h 定义了变量 errno ( 含义是 error number ),它存储了错误发生时的错误码,通过错误码可以得到错误的描述信息,在 errno.h 文件开头处有定义:
#ifndef errno
extern int errno;
#endif 程序开始执行时,变量 errno 被初始化为 0 。很多库函数在执行过程中遇到错误时,就会将 errno 设置为相应的错误码。函数被成功调用时,它们不修改 errno 的值。因此,当一个函数被成功调用,errno 的值可能不为零,它的非零值由前面的函数设置。所以不能根据 errno 的值来判断一个函数执行是否成功。当函数调用失败时 ( 函数返回 -1 或 NULL ),errno 值才有意义。如下例:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main()
{
FILE *stream;
char *filename = "test-e";
errno = 0;
stream = fopen(filename, "r");
if ( stream == NULL ) {
printf("open file %s failed, errno is %d\n", filename,errno);
} else {
printf("open file %s successfully\n", filename);
}
} 运行及输出:beyes@linux-beyes:~/C> ./checkerrno.exe
open file test-e failed, errno is 2 说明:由于 test-e 文件不存在,所以打开失败,errno=2 ,可以查得错误码为 ENOENT ( 文件或目录不存在 )。如果文件存在,但不具有读写权限,那么返回 errno=13,对应错误码为 EPERM 。 |
|