【Linux】Linux系统错误码errno详解
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
。程序会输出错误描述字符串。
评论已关闭