【Linux应用编程】Linux编程中常见错误码含义及查询方式


1 前言

  linux应用程序开发过程中,经常会遇到一些错误信息的返回,存在的可能性有,参数有误、非法访问、系统资源限制、设备/文件不存在、访问权限限制等等。对于这类错误,可以通过perror函数输出具体描述,或者通过strerror函数,将错误码转换为具体描述字符。linux函数调用失败时,错误码存放于一个全局变量errno中。


  • 直接输出错误描述
#include <stdio.h>
void perror(const char *string);

/* 使用伪代码 */
ret = ioctl(fd, SIOCGIFCONF, (char*)&ifc);
if(ret)
{
	perror("ioctl failed");	/* perror输出字符已带换行符,无需再加换行符 */
}

  • 将错误码转换为具体错误描述
#include <errno.h>
#include <string.h>
char *strerror(int errno);

/* 使用伪代码 */
ret = ioctl(fd, SIOCGIFCONF, (char*)&ifc);
if(ret)
{
	printf("ioctl failed,%s\n", strerror(errno));
}

  然而一些情况下,为了节约存储空间;或者为了不让用户直接看到详细的错误信息描述,我们期望是输出一个错误码到日志文件中,运维或者开发人员根据具体错误码找到对应的错误信息描述。


2 错误码查询

  linux系统下可以安装“errno”工具,这样可以通过工具命令“errno -ls”很方便地查看错误码的具体描述信息。


  linux系统默认一般是不带“errno”工具的,Ubuntu下执行“errno -ls”,提示需安装该工具。

acuity@ubuntu:~$ errno -ls
The program 'errno' is currently not installed. You can install it by typing:
sudo apt install moreutils

  安装“errno”工具。

acuity@ubuntu:~$sudo apt install moreutils

  查看错误码具体描述信息。

acuity@ubuntu:~$ errno -ls
EPERM 1 Operation not permitted
ENOENT 2 No such file or directory
ESRCH 3 No such process
EINTR 4 Interrupted system call
EIO 5 Input/output error
ENXIO 6 No such device or address
E2BIG 7 Argument list too long
ENOEXEC 8 Exec format error
EBADF 9 Bad file descriptor
ECHILD 10 No child processes
EAGAIN 11 Resource temporarily unavailable
ENOMEM 12 Cannot allocate memory
EACCES 13 Permission denied
EFAULT 14 Bad address

3 错误码翻译表

  对于4.15 linux内核版本,错误码定义文件路径如下,不同版本内核可能不一样,特别是相对较旧版本的内核。

  • 基本错误码定义位于“include/uapi/asm-generic/errno-base.h”

  • 其他错误码定义位于“include/uapi/asm-generic/errno.h”


错误码翻译:

宏名称键值描述涵义
-0Success执行成功
EPERM1Operation not permitted无操作权限
ENOENT2No such file or directory文件或目录不存在
ESRCH3No such process进程不存在
EINTR4Interrupted system call系统调用被中断
EIO5I/O errorI/O错误
ENXIO6No such device or address设备或地址不存在
E2BIG7Arg list too long参数列表过长
ENOEXEC8Exec format error格式化执行错误
EBADF9Bad file number无效文件描述符
ECHILD10No child processes没有子进程
EAGAIN11Try again再次尝试
ENOMEM12Out of memory内存溢出
EACCES13Permission denied无访问权限
EFAULT14Bad address地址错误
ENOTBLK15Block device required块设备请求
EBUSY16Device or resource busy设备或资源已被使用
EEXIST17File exists文件已存在
EXDEV18Cross-device link无效的交叉链接
ENODEV19No such device设备不存在
ENOTDIR20Not a directory非目录文件
EISDIR21Is a directory这是一个目录文件
EINVAL22Invalid argument参数无效
ENFILE23File table overflow文件表溢出
EMFILE24Too many open files打开的文件过多
ENOTTY25Not a tty device不是一个tty设备
ETXTBSY26Text file busy文本文件被占用
EFBIG27File too large文件过大
ENOSPC28No space left on device磁盘空间不足
ESPIPE29Illegal seek非法的地址偏移
EROFS30Read-only file system只读文件系统
EMLINK31Too many links过多的链接
EPIPE32Broken pipe管道破裂
EDOM33Math argument out of domain数值结果超出范围
ERANGE34Math result not representable数值结果不具代表性
EDEADLK35Resource deadlock would occur资源死锁错误
ENAMETOOLONG36Filename too long文件名过长
ENOLCK37No record locks available没有可用的锁
ENOSYS38Function not implemented功能没有实现
ENOTEMPTY39Directory not empty目录不为空
ELOOP40Too many symbolic links encountered符号链接层次太多
EWOULDBLOCK41Same as EAGAIN与“EAGAIN”错误码类似
ENOMSG42No message of desired type没有期望类型的消息
EIDRM43Identifier removed标识符已经被删除
ECHRNG44Channel number out of range通道数目超出范围
EL2NSYNC45Level 2 not synchronized2级不同步
EL3HLT46Level 3 halted3级中断
EL3RST47Level 3 reset3级复位
ELNRNG48Link number out of range链接数超出范围
EUNATCH49Protocol driver not attached协议驱动程序没有连接
ENOCSI50No CSI structure available没有可用CSI结构
EL2HLT51Level 2 halted2级中断
EBADE52Invalid exchange无效的交换
EBADR53Invalid request descriptor请求描述符无效
EXFULL54Exchange full交换空间已满
ENOANO55No anode-
EBADRQC56Invalid request code无效的请求代码
EBADSLT57Invalid slot无效的槽函数
EDEADLOCK58Same as EDEADLK与“EDEADLK”错误码类似
EBFONT59Bad font file format错误的字体文件格式
ENOSTR60Device not a stream非数据流设备
ENODATA61No data available无可用数据
ETIME62Timer expired定时器溢出
ENOSR63Out of streams resources数据流相关资源溢出
ENONET64Machine is not on the network机器未连接到网络
ENOPKG65Package not installed软件包未安装
EREMOTE66Object is remote-
ENOLINK67Link has been severed(软/硬)链接已被断开
EADV68Advertise error广播错误
ESRMNT69Srmount error-
ECOMM70Communication error on send通信状态在发送过程出错
EPROTO71Protocol error协议错误
EMULTIHOP72Multihop attempted多次尝试
EDOTDOT73RFS specific errorRFS特定的错误
EBADMSG74Not a data message非有效的数据消息
EOVERFLOW75Value too large for defined data type数值超出定义的数据类型
ENOTUNIQ76Name not unique on network命名在网络中非唯一
EBADFD77File descriptor in bad state文件描述符损坏
EREMCHG78Remote address changed远程地址已更改
ELIBACC79Cannot access a needed shared library无法访问必要的共享库
ELIBBAD80Accessing a corrupted shared library访问已损坏的共享库
ELIBSCN81.lib section in a.out corrupted库文件部分损坏
ELIBMAX82Linking in too many shared libraries链接共享库过多
ELIBEXEC83Cannot exec a shared library directly不能执行一个共享库
EILSEQ84Illegal byte sequence非法字节序列
ERESTART85Interrupted system call should be restarted需重新启动中断系统
ESTRPIPE86Streams pipe error管道流出错
EUSERS87Too many users访问用户过多
ENOTSOCK88Socket operation on non-socket非套接字函数访问套接字描述符
EDESTADDRREQ89Destination address required请求目的地址
EMSGSIZE90Message too long消息长度过长
EPROTOTYPE91Protocol wrong type for socketsocket协议类型错误
ENOPROTOOPT92Protocol not available协议不可用
EPROTONOSUPPORT93Protocol not supported不支持的协议
ESOCKTNOSUPPORT94Socket type not supported不支持的socket类型
EOPNOTSUPP95Operation not supported on transport不支持的操作
EPFNOSUPPORT96Protocol family not supported不支持的协议族
EAFNOSUPPORT97Address family not supported by protocol协议不支持该地址
EADDRINUSE98Address already in use地址已被使用
EADDRNOTAVAIL99Cannot assign requested address无法分配请求的地址
ENETDOWN100Network is down网络已被断开
ENETUNREACH101Network is unreachable互联网不可用
ENETRESET102Network dropped网络连接丢失
ECONNABORTED103Software caused connection软件导致连接中断
ECONNRESET104Connection reset by连接被重置
ENOBUFS105No buffer space available没有可用的缓冲空间
EISCONN106Transport endpoint传输端点已经连接
ENOTCONN107Transport endpoint传输终点没有连接
ESHUTDOWN108Cannot send after transport传输后无法发送
ETOOMANYREFS109Too many references请求用户过多
ETIMEDOUT110Connection timed连接超时
ECONNREFUSED111Connection refused(远程端)拒绝连接
EHOSTDOWN112Host is down主机已关闭
EHOSTUNREACH113No route to host主机未找到路由
EALREADY114Operation already操作已执行
EINPROGRES115Operation now in操作正在执行
ESTALE116Stale NFS file handleNFS文件句柄已过期
EUCLEAN117Structure needs cleaning结构需要清除
ENOTNAM118Not a XENIX-named-
ENAVAIL119No XENIX semaphores没有“XENIX”信号量
EISNAM120Is a named type file已定义的文件类型
EREMOTEIO121Remote I/O error远程IO错误
EDQUOT122Quota exceeded超出磁盘配额
ENOMEDIUM123No medium found没有发现媒体介质
EMEDIUMTYPE124Wrong medium type媒体类型错误
ECANCELED125Operation Canceled操作被取消
ENOKEY126Required key not available所需键值不可用
EKEYEXPIRED127Key has expired键值已过期
EKEYREVOKED128Key has been revoked键值已被撤销
EKEYREJECTED129Key was rejected by service键值被拒绝
EOWNERDEAD130Owner died用户注销
ENOTRECOVERABLE131State not recoverable状态不可恢复
ERFKILL132Operation not possible due to RF-kill由于RF-kill而无法操作
EHWPOISON133Memory page has hardware error内存页存在硬件错误
-134—139Reserve保留
  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Acuity.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值