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标准库中的