使用 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 程序抛出的错误号时,我们可能会发现上表很容易识别这些错误号的含义。 请务必将此文章添加为书签以供将来参考。
相关文章
Oracle 的 decode 函数在 MySQL 中的等价物
发布时间:2023/05/09 浏览次数:115 分类:MySQL
-
本篇文章介绍了三种替代实现,我们可以将它们用作 MySQL 中 Oracle 的 decode() 函数的等价物。 为此,我们将使用 IF()、CASE 以及 FIELD() 和 ELT() 的组合。
更改 MySQL 服务器中的 max_allowed_packet Size
发布时间:2023/05/09 浏览次数:142 分类:MySQL
-
本篇文章介绍如何更改 MySQL 服务器中的 max_allowed_packet 大小。 为了了解这一点,我们将使用两个操作系统,Windows 10 和 Linux (Ubuntu)。
MySQL 修复 Data Is Truncated for a Column 错误
发布时间:2023/05/09 浏览次数:72 分类:MySQL
-
本文介绍 MySQL 错误 Data is truncated for a column 的可能原因和解决方法。修复数据因 MySQL 中的列错误而被截断
MySQL 错误 Error Server PID File Could Not Be Found 解决
发布时间:2023/05/09 浏览次数:98 分类:MySQL
-
在这篇文章中,我们将研究错误! Error Server PID File Could Not Be Found! 在 MySQL 及其解决方案中有充分的解释。
MySQL ForEach 循环
发布时间:2023/05/08 浏览次数:140 分类:MySQL
-
本篇文章介绍如何在一条语句中使用 INSERT、SELECT、WHERE 和 JOIN 模拟 MySQL 中的 foreach 循环。
使用 JDBC 连接到 MySQL 数据库
发布时间:2023/05/08 浏览次数:82 分类:MySQL
-
本文讨论 JDBC 以及使用 JDBC 连接数据库的要求。 我们还查看了一个示例,以了解如何实现 Java 代码来连接 MySQL 数据库。MySQL 为使用 Java 编程语言和 MySQL Connector/J 开发的应用程序提供连接。
遍历 MySQL 表的所有行
发布时间:2023/05/08 浏览次数:161 分类:MySQL
-
本篇文章介绍了如何使用 WHILE 和 CURSOR 遍历 MySQL 表的所有行。遍历 MySQL 表的所有行
在 C 语言中使用 typedef enum
发布时间:2023/05/07 浏览次数:181 分类:C语言
-
本文介绍了如何在 C 语言中使用 typedef enum。使用 enum 在 C 语言中定义命名整数常量 enum 关键字定义了一种叫做枚举的特殊类型。