【Linux】Linux系统错误码errno详解
warning:
这篇文章距离上次修改已过435天,其中的内容可能已经有所变动。
errno 是一个整数值,它被系统函数设置为提供关于错误的额外信息。每个错误代码通常与特定类型的错误相关联。
在 Linux 系统中,errno 的定义在 <errno.h> 头文件中,你可以通过查看这个文件来获取所有可能的错误代码及其含义。
以下是一些常见的 errno 错误代码及其含义:
EPERM:操作不允许,缺乏必要的权限。ENOENT:文件或目录不存在。ESRCH:没有这个进程。EINTR:系统调用被信号中断。EIO:输入/输出错误。ENXIO:设备不存在。E2BIG:参数列表过长。ENOEXEC:无法执行格式错误。EBADF:文件描述符不正确。ECHILD:没有子进程。EAGAIN:尝试非阻塞操作,但无法完成。ENOMEM:没有足够的内存。EACCES:权限被拒绝。EFAULT:内存访问错误。ENOTBLK:块设备号不存在。EBUSY:设备或资源忙。EEXIST:文件已经存在。EXDEV:跨设备链接不允许。ENODEV:没有这个设备。ENOTDIR:路径不是一个目录。EISDIR:操作是目录。EINVAL:参数无效。ENFILE:打开的文件太多。EMFILE:进程打开的文件太多。EFBIG:文件过大。ENOSPC:设备上没有空间。ESPIPE:不合适的寻道操作。EROFS:只读文件系统。EMLINK:链接过多。EPIPE:管道断裂。EDOM:数学参数超出范围。ERANGE:结果超出表示范围。
要在程序中检查和处理 errno,你可以包含 <errno.h> 并在系统调用后检查它的值。如果 errno 不为零,则表示有错误发生。你可以使用 strerror(errno) 函数将错误代码转换为错误描述字符串。
示例代码:
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main() {
FILE *fp = fopen("/nonexistent/file", "r");
if (fp == NULL) {
printf("Error opening file: %s\n", strerror(errno));
// 处理错误,例如:
// if (errno == ENOENT) {
// // 特定的错误处理
// }
}
return 0;
}在上面的例子中,尝试打开一个不存在的文件,因此 fopen 会失败,并且 errno 会被设置为 ENOENT。程序会输出错误描述字符串。
评论已关闭