errno

errno 是c语言中用于记录系统最后一次错误的代码,它是一个int类型的值,通常在头文件errno.h中定义。在Linux C API函数出现异常时,errno会被赋予特定的整数值,这些值对应着不同的错误类型。程序员可以利用errno来诊断并解决程序中的问题。

使用注意事项

使用errno时需要注意,只有当一个库函数失败时,errno才会被设置。当函数成功运行时,errno的值不会被修改。因此,不能通过测试errno的值来判断是否存在错误,而应该在被调用的函数提示有错误发生时才去检查errno的值。

错误定义

errno的错误定义可以在/usr/include/asm-generic/errno.h及errno-base.h等头文件中找到。下面是一些常见的错误定义及其对应的错误码:

常见错误码

- EPERM 1 表示操作未授权

- ENOENT 2 表示找不到指定的文件或目录

- ESRCH 3 表示找不到指定的进程

- EINTR 4 表示中断了系统调用

- EIO 5 表示I/O错误

- ENXIO 6 表示没有相应的设备或地址

- E2BIG 7 表示参数列表过长

- ENOEXEC 8 表示执行格式错误

- EBADF 9 表示无效的文件描述符

- ECHILD 10 表示无子进程

- EAGAIN 11 表示资源暂时不可用

- ENOMEM 12 表示内存不足

- EACCES 13 表示权限受限

- EFAULT 14 表示无效的指针

- ENOTBLK 15 表示块设备请求

- EBUSY 16 表示设备或资源忙

- EEXIST 17 表示文件已存在

- EXDEV 18 表示跨设备链接

- ENODEV 19 表示不存在的设备

- ENOTDIR 20 表示不是目录

- EISDIR 21 表示是目录

- EINVAL 22 表示无效的参数

- ENFILE 23 表示文件表溢出

- EMFILE 24 表示打开的文件过多

- ENOTTY 25 表示非字符设备

- ETXTBSY 26 表示文本文件繁忙

- EFBIG 27 表示文件过大

- ENOSPC 28 表示磁盘空间不足

- ESPIPE 29 表示非法的序列号

- EROFS 30 表示只读文件系统

- EMLINK 31 表示链接数过多

- EPIPE 32 表示管道破裂

- EDOM 33 表示数学运算超出范围

- ERANGE 34 表示数学计算结果无法表示

- EDEADLK 35 表示资源死锁

- ENAMETOOLONG 36 表示文件名过长

- ENOLCK 37 表示无可用的锁

- ENOSYS 38 表示功能未实现

- ENOTEMPTY 39 表示目录非空

- ELOOP 40 表示符号链接循环

- EWOULDBLOCK EAGAIN 表示操作可能阻塞

- ENOMSG 42 表示无相应消息

- EIDRM 43 表示标识符已被移除

- ECHRNG 44 表示通道号超出范围

- EL2NSYNC 45 表示第2层未同步

- EL3HLT 46 表示第3层暂停

- EL3RST 47 表示第3层重置

- ELNRNG 48 表示链路号超出范围

- EUNATCH 49 表示协议驱动未连接

- ENOCSI 50 表示无CSI结构

- EL2HLT 51 表示第2层暂停

- EBADE 52 表示无效交换

- EBADR 53 表示无效请求描述符

- EXFULL 54 表示交换满载

- ENOANO 55 表示无节点

- EBADRQC 56 表示无效请求码

- EBADSLT 57 表示无效槽位

- EDEADLOCK EDEADLK 表示资源死锁

- EBFONT 59 表示字体文件格式错误

- ENOSTR 60 表示设备非流式

- ENODATA 61 表示无数据可用

- ETIME 62 表示定时器超时

- ENOSR 63 表示流资源耗尽

- ENONET 64 表示机器不在网络上

- ENOPKG 65 表示包未安装

- EREMOTE 66 表示对象远程

- ENOLINK 67 表示链接断开

- EADV 68 表示广告错误

- ESRMNT 69 表示srmount错误

- ECOMM 70 表示发送通信错误

- EPROTO 71 表示协议错误

- EMULTIHOP 72 表示多跳尝试

- EDOTDOT 73 表示RFS特定错误

- EBADMSG 74 表示非数据报文

- EOVERFLOW 75 表示值太大

- ENOTUNIQ 76 表示名称在网络中不唯一

- EBADFD 77 表示文件描述符状态不良

- EREMCHG 78 表示远程地址变更

- ELIBACC 79 表示无法访问共享库

- ELIBBAD 80 表示访问损坏的共享库

- ELIBSCN 81 表示.aout中的.lib节损坏

- ELIBMAX 82 表示尝试链接太多共享库

- ELIBEXEC 83 表示无法直接执行共享库

- EILSEQ 84 表示非法字节序列

- ERESTART 85 表示应重启的中断系统调用

- ESTRPIPE 86 表示流管道错误

- EUSERS 87 表示用户过多

- ENOTSOCK 88 表示套接字操作非套接字

- EDESTADDRREQ 89 表示目的地址必需

- EMSGSIZE 90 表示消息长度不当

- EPROTOTYPE 91 表示套接字协议类型不符

- ENOPROTOOPT 92 表示套接字选项不可用

- EPROTONOSUPPORT 93 表示套接字协议不受支持

- ESOCKTNOSUPPORT 94 表示套接字类型不受支持

- EOPNOTSUPP 95 表示传输端口上的操作不受支持

- EPFNOSUPPORT 96 表示套接字协议族不受支持

- EAFNOSUPPORT 97 表示地址家族不受套接字协议支持

- EADDRINUSE 98 表示地址已被占用

- EADDRNOTAVAIL 99 表示无法分配请求的地址

- ENETDOWN 100 表示网络已关闭

- ENETUNREACH 101 表示网络不可达

- ENETRESET 102 表示网络因重置而断开连接

- ECONNABORTED 103 表示软件导致的连接终止

- ECONNRESET 104 表示对端复位连接

- ENOBUFS 105 表示无缓冲区可用

- EISCONN 106 表示传输端点已连接

- ENOTCONN 107 表示传输端点未连接

- ESHUTDOWN 108 表示无法在传输端点关闭后发送

- ETOOMANYREFS 109 表示引用过多,无法拼接

- ETIMEDOUT 110 表示连接超时

- ECONNREFUSED 111 表示连接被拒绝

- EHOSTDOWN 112 表示主机已下线

- EHOSTUNREACH 113 表示无法到达主机

- EALREADY 114 表示操作正在进行

- EINPROGRESS 115 表示操作正在处理中

- ESTALE 116 表示NFS文件句柄已失效

- EUCLEAN 117 表示结构需要清理

- ENOTNAM 118 表示非Xenix命名类型文件

- ENAVAIL 119 表示无XENIX信号量可用

- EISNAM 120 表示是命名类型文件

- EREMOTEIO 121 表示远程I/O错误

- EDQUOT 122 表示配额超过限制

- ENOMEDIUM 123 表示介质缺失

- EMEDIUMTYPE 124 表示介质类型错误

- ECANCELED 125 表示操作取消

- ENOKEY 126 表示所需密钥不可用

- EKEYEXPIRED 127 表示密钥已过期

- EKEYREVOKED 128 表示密钥已被撤销

- EKEYREJECTED 129 表示密钥被服务拒绝

- EOWNERDEAD 130 表示所有者死亡

- ENOTRECOVERABLE 131 表示状态不可恢复

- ERFKILL 132 表示由于RF-kill操作不可能

- EHWPOISON 133 表示硬件页有错误

errno | C语言errno详细说明: 记录最后的错误代码.爱问知识人.2024-11-01

C标准库errno,perror()和strerror().CSDN博客.2024-11-01

C标准库中的 头文件详解.脉脉.2024-11-01