迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

使用 errno 的 C 编程语言的 131 个 Linux 错误代码

作者:迹忆客 最近更新:2022/11/15 浏览次数:

程序员应该处理各种错误以保护程序免于失败。

在 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");

}

使用 errno 的 C 编程语言的 131 个 Linux 错误代码

第一次执行时,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 程序抛出的错误号时,我们可能会发现上表很容易识别这些错误号的含义。 请务必将此文章添加为书签以供将来参考。

本站文章均为原创或翻译,转载请发邮件至 1244347461@qq.com 进行申请,未经许可,禁止转载。经作者同意之后,转载请以链接形式注明出处

本文地址:

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

热门文章

教程更新

热门标签

C
扫码一下
查看教程更方便