C 标准库 - <errno.h>
概述
<errno.h>
是 C 语言标准库中的一个头文件,它定义了错误码(error number)变量 errno
。在 C 程序设计中,errno
用于在执行系统调用或某些库函数时提供错误信息。当这些函数遇到错误时,它们会将 errno
设置为一个特定的值,该值对应于发生的错误类型。通过检查 errno
的值,程序可以获取有关错误原因的详细信息。
错误码定义
<errno.h>
头文件定义了一系列的错误码,这些错误码通常以 E
开头,后跟一个描述性的名称。这些错误码是宏定义,可以直接在程序中使用。以下是一些常见的错误码:
EACCES
:权限不足,无法访问请求的资源。EAGAIN
:资源暂时不可用,稍后可能可用。EBADF
:非法的文件描述符。EFAULT
:无效的指针地址。EINVAL
:无效的参数。ENOMEM
:内存不足。EPIPE
:管道破裂,通常发生在写入已关闭的管道或套接字时。
使用 errno
在使用 errno
时,需要注意以下几点:
errno
是一个全局变量,可以在程序的任何地方访问。- 当系统调用或库函数成功执行时,
errno
的值不会被修改。 - 多个线程访问
errno
时,可能会存在线程安全问题。因此,在多线程程序中,应当使用线程局部存储(TLS)或其他机制来保证errno
的正确使用。 errno
的值只在函数失败时才有意义,因此在检查errno
之前,应该先检查函数的返回值。
示例
以下是一个使用 errno
的示例:
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
int main() {
int result = close(100); // 假设 100 不是一个有效的文件描述符
if (result == -1) {
perror("Error closing file");
// 或者直接使用 errno
fprintf(stderr, "Error: %d\n", errno);
}
return 0;
}
在这个示例中,close
函数尝试关闭一个无效的文件描述符,因此会失败并设置 errno
。perror
函数用于打印错误消息,它根据 errno
的值生成一条描述错误的消息。
结论
<errno.h>
头文件是 C 语言标准库中处理错误的重要部分。通过使用 errno
,程序可以获取关于错误原因的更多信息,从而进行相应的错误处理。正确使用 errno
需要注意其全局性质和线程安全问题。