使用 errno 的 C 编程语言的 131 个 Linux 错误代码
程序员应该处理各种错误以保护程序免于失败。
在 C 编程语言中,没有对错误处理的直接支持。我们必须检测故障并处理错误。在 C 编程语言中,返回值代表成功或失败。在 C 程序中,当函数失败时,我们应该相应地处理错误,或者至少将错误记录在日志文件中。
当我们在 Linux 环境中运行某些程序时,我们可能会注意到它给出了一些错误号。例如,“Error no is : 17”,这并不能说明什么。你真的需要知道错误号
17
是什么意思。
本文显示了所有可用的错误编号及其说明。当您遇到错误号并想知道它的含义时,本文可能是您方便的参考。
- 在 C 编程语言中,有一个名为“errno”的外部变量。
- 从这个 errno 变量中,您可以使用一些错误处理函数来找出错误描述并适当地处理它。
- 我们必须包含 errno.h 头文件才能使用外部变量 errno。
- perror 函数在标准错误中打印错误描述。
- strerror 函数返回一个字符串,描述在参数 errnum 中传递的错误代码。
以下 C 代码片段尝试通过 open
系统调用打开文件。open
调用中有两个标志。 O_CREAT 标志是如果文件不存在则创建一个文件。 O_EXCL 标志与 O_CREAT 一起使用,如果文件已经存在,则打开调用将失败并显示正确的错误号。
fileopen.c
#include <stdio.h> #include <fcntl.h> #include <errno.h> #include <string.h> main() { // Declaration of a file descriptor int fd; // Opening a file fd = open("/root/sasikala/testing",O_CREAT|O_EXCL); // If Open is failed if ( fd < 0 ) { printf("Opening file : Failed\n"); printf ("Error no is : %d\n", errno); printf("Error description is : %s\n",strerror(errno)); } // If Open is success else printf("Opening file : Success\n"); }
第一次执行时,open
成功执行,由于文件不可用,它创建了文件。 在下一次执行中,它会抛出一个错误号 17,即“File exists”。
下表显示了 Linux 操作系统中的错误编号列表及其描述
错误编号 | 错误代码 | 错误描述 |
---|---|---|
1 | EPERM | 操作不允许 |
2 | ENOENT | 没有这样的文件或目录 |
3 | ESRCH | 没有这个过程 |
4 | EINTR | 中断的系统调用 |
5 | EIO | I/O 错误 |
6 | ENXIO | 没有这样的设备或地址 |
7 | E2BIG | 参数列表太长 |
8 | ENOEXEC | 执行格式错误 |
9 | EBADF | 错误文件号 |
10 | ECHILD | 无子进程 |
11 | EAGAIN | 再试一次 |
12 | ENOMEM | 内存不足 |
13 | EACCES | 权限被拒绝 |
14 | EFAULT | 地址错误 |
15 | ENOTBLK | 需要块设备 |
16 | EBUSY | 设备或资源忙 |
17 | EEXIST | 文件存在 |
18 | EXDEV | 跨设备链接 |
19 | ENODEV | 没有这样的设备 |
20 | ENOTDIR | 不是目录 |
21 | EISDIR | 是一个目录 |
22 | EINVAL | 参数无效 |
23 | ENFILE | 文件表溢出 |
24 | EMFILE | 打开的文件太多 |
25 | ENOTTY | 不是打字机 |
26 | ETXTBSY | 文本文件忙 |
27 | EFBIG | 文件太大 |
28 | ENOSPC | 设备上没有剩余空间 |
29 | ESPIPE | 非法搜索 |
30 | EROFS | 只读文件系统 |
31 | EMLINK | 链接太多 |
32 | EPIPE | 断管 |
33 | EDOM | 数学参数超出 func 域 |
34 | ERANGE | 数学结果不可表示 |
35 | EDEADLK | 会发生资源死锁 |
36 | ENAMETOOLONG | 文件名太长 |
37 | ENOLCK | 没有可用的记录锁 |
38 | ENOSYS | 功能未实现 |
39 | ENOTEMPTY | 目录不为空 |
40 | ELOOP | 遇到太多符号链接 |
42 | ENOMSG | 没有所需类型的消息 |
43 | EIDRM | 标识符已删除 |
44 | ECHRNG | 通道号超出范围 |
45 | EL2NSYNC | 2 级未同步 |
46 | EL3HLT | 3 级停止 |
47 | EL3RST | 3 级复位 |
48 | ELNRNG | 链接号超出范围 |
49 | EUNATCH | 协议驱动未连接 |
50 | ENOCSI | 没有可用的 CSI 结构 |
51 | EL2HLT | 2 级停止 |
52 | EBADE | 无效交换 |
53 | EBADR | 无效的请求描述符 |
54 | EXFULL | 换满 |
55 | ENOANO | 无阳极 |
56 | EBADRQC | 无效的请求代码 |
57 | EBADSLT | 无效插槽 |
59 | EBFONT | 字体文件格式错误 |
60 | ENOSTR | 设备不是流 |
61 | ENODATA | 无可用数据 |
62 | ETIME | 定时器已过期 |
63 | ENOSR | 流资源不足 |
64 | ENONET | 机器不在网络上 |
65 | ENOPKG | 软件包未安装 |
66 | EREMOTE | 对象是远程的 |
67 | ENOLINK | 链接已被切断 |
68 | EADV | 错误 |
69 | ESRMNT | Srmount 错误 |
70 | ECOMM | 发送时通信错误 |
71 | EPROTO | 协议错误 |
72 | EMULTIHOP | 多跳尝试 |
73 | EDOTDOT | RFS 特定错误 |
74 | EBADMSG | 不是数据电文 |
75 | EOVERFLOW | 值对于定义的数据类型来说太大 |
76 | ENOTUNIQ | 名称在网络上不是唯一的 |
77 | EBADFD | 文件描述符处于错误状态 |
78 | EREMCHG | 远程地址改变 |
79 | ELIBACC | 无法访问所需的共享库 |
80 | ELIBBAD | 访问损坏的共享库 |
81 | ELIBSCN | a.out 中的 .lib 部分已损坏 |
82 | ELIBMAX | 试图链接太多共享库 |
83 | ELIBEXEC | 不能直接执行共享库 |
84 | EILSEQ | 非法字节序列 |
85 | ERESTART | 中断的系统调用应该重新启动 |
86 | ESTRPIPE | 流管道错误 |
87 | EUSERS | 用户过多 |
88 | ENOTSOCK | 非套接字上的套接字操作 |
89 | EDESTADDRREQ | 需要目标地址 |
90 | EMSGSIZE | 消息太长 |
91 | EPROTOTYPE | 套接字协议类型错误 |
92 | ENOPROTOOPT | 协议不可用 |
93 | EPROTONOSUPPORT | 协议不支持 |
94 | ESOCKTNOSUPPORT | 不支持套接字类型 |
95 | EOPNOTSUPP | 传输端点不支持操作 |
96 | EPFNOSUPPORT | 不支持协议族 |
97 | EAFNOSUPPORT | 地址族不受协议支持 |
98 | EADDRINUSE | 地址已被使用 |
99 | EADDRNOTAVAIL | 无法分配请求的地址 |
100 | ENETDOWN | 网络已关闭 |
101 | ENETUNREACH | 网络不可达 |
102 | ENETRESET | 网络因重置而断开连接 |
103 | ECONNABORTED | 软件导致连接中止 |
104 | ECONNRESET | 连接被对端重置 |
105 | ENOBUFS | 没有可用的缓冲区空间 |
106 | EISCONN | 传输端点已连接 |
107 | ENOTCONN | 传输端点未连接 |
108 | ESHUTDOWN | 传输端点关闭后无法发送 |
109 | ETOOMANYREFS | 引用过多:无法拼接 |
110 | ETIMEDOUT | 连接超时 |
111 | ECONNREFUSED | 连接被拒绝 |
112 | EHOSTDOWN | 主机已关闭 |
113 | EHOSTUNREACH | 没有到主机的路由 |
114 | EALREADY | 操作已经在进行中 |
115 | EINPROGRESS | 操作正在进行中 |
116 | ESTALE | 陈旧的 NFS 文件句柄 |
117 | EUCLEAN | 结构需要清洁 |
118 | ENOTNAM | 不是 XENIX 命名类型文件 |
119 | ENAVAIL | 没有可用的 XENIX 信号量 |
120 | EISNAM | 是命名类型文件 |
121 | EREMOTEIO | 远程 I/O 错误 |
122 | EDQUOT | 超出配额 |
123 | ENOMEDIUM | 未找到介质 |
124 | EMEDIUMTYPE | 错误的介质类型 |
125 | ECANCELED | 操作已取消 |
126 | ENOKEY | 所需密钥不可用 |
127 | EKEYEXPIRED | 密钥已过期 |
128 | EKEYREVOKED | 密钥已被撤销 |
129 | EKEYREJECTED | 密钥被服务拒绝 |
130 | EOWNERDEAD | 所有者不存在 |
131 | ENOTRECOVERABLE | 状态不可恢复 |
当我们在 Linux 环境中看到 C 程序抛出的错误号时,我们可能会发现上表很容易识别这些错误号的含义。 请务必将此文章添加为书签以供将来参考。
相关文章
Do you understand JavaScript closures?
发布时间:2025/02/21 浏览次数:108 分类:JavaScript
-
The function of a closure can be inferred from its name, suggesting that it is related to the concept of scope. A closure itself is a core concept in JavaScript, and being a core concept, it is naturally also a difficult one.
Do you know about the hidden traps in variables in JavaScript?
发布时间:2025/02/21 浏览次数:178 分类:JavaScript
-
Whether you're just starting to learn JavaScript or have been using it for a long time, I believe you'll encounter some traps related to JavaScript variable scope. The goal is to identify these traps before you fall into them, in order to av
How much do you know about the Prototype Chain?
发布时间:2025/02/21 浏览次数:150 分类:JavaScript
-
The prototype chain can be considered one of the core features of JavaScript, and certainly one of its more challenging aspects. If you've learned other object-oriented programming languages, you may find it somewhat confusing when you start
Vue - An In-Depth Guide to Lifecycle Hooks
发布时间:2025/02/21 浏览次数:117 分类:Vue
-
Vue has many lifecycle hooks, and it can be confusing to understand the meaning or purpose of each one. In this article, we will explain the function of each lifecycle hook and how to use them.
Solution for Flickering During Vue Template Parsing
发布时间:2025/02/21 浏览次数:103 分类:Vue
-
Solution for Flickering During Vue Template Parsing, Recently, while working on a project, I noticed that when the internet speed is slow, the screen flickers and the expression message appears. This happens because when the internet speed i
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Pandas 中使用 stack() 和 unstack() 函数重塑 DataFrame
发布时间:2024/04/24 浏览次数:1289 分类:Python
-
本文讨论了 Pandas 中 stack() 和 unstack() 函数的使用。