<errno.h>
是 C 标准库中用于错误处理的头文件,它定义了一个全局变量 errno
以及一些宏,允许程序检测和处理错误条件。
主要内容
errno 变量:
errno
是一个全局变量,用于指示最后一次函数调用的错误代码。它的类型通常是int
。- 该变量只有在某些标准函数执行失败时才会被设置,成功的话,其值通常不变化。
错误代码宏:
<errno.h>
中定义了一系列错误代码的宏,它们代表不同类型的错误。常见的包括:ENOMEM
:内存不足EINVAL
:无效的参数EIO
:输入/输出错误ENOMEM
:内存不足EACCES
:权限被拒绝ENOENT
:没有这样的文件或目录EBADF
:坏的文件描述符EEXIST
:文件已存在ENOSPC
:设备没有足够的空间
使用方式:
- 在调用可能会设置
errno
的函数后,通常应该先将errno
初始化为 0,然后检查返回值。如果返回值指示错误(通常是负数或特定值),可以查看errno
的值来确定错误原因。
- 在调用可能会设置
示例代码
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
int main() {
FILE *file = fopen("non_existent_file.txt", "r");
if (file == NULL) {
// 输出错误信息
printf("Error opening file: %s\n", strerror(errno));
return EXIT_FAILURE;
}
// 其他代码
fclose(file);
return EXIT_SUCCESS;
}
注意事项
多线程环境:在多线程程序中,
errno
变量是线程可见的,但其值不是线程安全的。在多线程中,每个线程的errno
各自独立。调用顺序:
errno
在每次函数调用之后可能会被修改,所以在检查它的值之前应该要有一个明确的错误发生的调用。清零:使用
errno
时建议在调用函数之前将其清零,以便能正确判断出错误发生前的状态。别名列表:不同的实现可能会定义不同的错误号,但通常遵循 POSIX 标准。要了解特定系统的实现,参考该系统的文档。
通过合理使用 <errno.h>
,可以高效地处理 C 程序中的错误。