<errno.h>
是 C 语言标准库中的一个头文件,定义了与错误处理相关的宏和变量。它提供了 errno
变量和一些常用的错误代码,用于在程序执行过程中检测和报告错误。
📖 目录
1️⃣ <errno.h>
简介
- 作用:提供用于获取程序错误状态的信息。
errno
变量:用于保存上一个系统调用或库函数错误的代码。当函数执行失败时,errno
会被设置为相应的错误代码。- 错误处理:通过检查
errno
的值,程序可以了解错误类型并进行相应处理。
⚠️ 重要说明:
errno
不是由函数直接返回,而是一个全局变量,许多系统调用和标准库函数可能会在错误时修改它。每当调用这些函数时,errno
可能会发生变化,因此需要在调用出错函数之前检查其值。
2️⃣ errno
变量
errno
是一个全局变量,用于保存最后一个错误的错误代码。- 访问方法:通过
errno
获取错误码,通常在错误发生后立即检查它。 - 线程安全性:在多线程程序中,
errno
是线程局部存储(TLS)变量,意味着每个线程有自己的errno
副本。
3️⃣ 常见错误码
<errno.h>
定义了一系列常用的错误码,它们是宏常量,代表了不同的错误类型。以下是一些常见的错误码:
错误码 | 描述 |
---|---|
EAGAIN | 资源暂时不可用,通常用于非阻塞I/O操作 |
ENOMEM | 内存不足 |
EINVAL | 无效的参数 |
EIO | 输入/输出错误 |
ENFILE | 系统文件表已满 |
EFAULT | 错误的地址 |
EPERM | 操作不被允许 |
EBADF | 错误的文件描述符 |
ENOSPC | 磁盘空间不足 |
EEXIST | 文件已经存在 |
ENOENT | 文件或目录不存在 |
EPIPE | 管道破裂(例如,写入关闭的管道) |
4️⃣ perror()
和 strerror()
函数
📌 perror()
函数
perror()
用于打印错误信息。它会打印一个带有用户自定义消息的字符串,后面跟着 errno
对应的错误信息。
语法:
void perror(const char *s);
- 参数:
s
:自定义的错误前缀消息。
- 功能:打印自定义消息和错误代码对应的错误信息。
示例:
#include <stdio.h>
#include <errno.h>
int main() {
FILE *file = fopen("nonexistent_file.txt", "r");
if (file == NULL) {
perror("Error opening file");
}
return 0;
}
输出:
Error opening file: No such file or directory
📌 strerror()
函数
strerror()
用于返回与 errno
相对应的错误描述字符串。
语法:
char *strerror(int errnum);
- 参数:
errnum
:错误代码。
- 返回值:返回一个指向描述错误的字符串的指针。
示例:
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main() {
int err = ENOENT; // 假设文件不存在
printf("Error: %s\n", strerror(err));
return 0;
}
输出:
Error: No such file or directory
5️⃣ 示例代码
📌 示例:errno
与 perror()
使用
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main() {
FILE *file = fopen("nonexistent_file.txt", "r");
if (file == NULL) {
perror("File open error"); // 输出错误信息
printf("Error code: %d\n", errno); // 打印错误码
}
return 0;
}
输出:
File open error: No such file or directory
Error code: 2
🔹 解释:
perror()
输出错误消息,errno
被设置为ENOENT
,即文件或目录不存在。- 通过
perror()
,可以快速获得错误描述。
📌 示例:strerror()
使用
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main() {
int error_code = EACCES; // 假设权限不足
printf("Error: %s\n", strerror(error_code));
return 0;
}
输出:
Error: Permission denied
🔹 解释:
strerror()
返回描述错误代码的字符串,EACCES
对应 “Permission denied”(权限被拒绝)。
6️⃣ 参考资料
📖 C 标准库官方文档 – errno.h
📖 GNU C Library – errno.h
📖 ISO C 标准(PDF)
📌 总结
<errno.h>
提供了错误处理机制,通过全局变量 errno
和错误码,帮助开发者获取系统调用或库函数的错误信息。常用的错误处理函数包括:
perror()
:输出自定义错误消息和errno
对应的错误描述;strerror()
:返回错误码对应的错误描述字符串。
🚀 这些功能在系统编程和文件操作中尤为重要,能够帮助开发者快速定位问题并进行相应的错误处理。
发表回复