最近在做工程的时候,程序在崩溃时候弹出了错误号,然后根据错误号搜索错误信息,很快解决之,特此记录。
在程序出错时,我们通过全局变量错误号errno和perror函数能够很快的定位到错误原因。
Linux错误代码及其含义
C NameValueDescription含义Success0Success成功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无效的参数ENFILE*23File 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 errorsrmount错误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访问损坏的共享库ELIBSCN81A .lib section in an .out is corrupted库段. out损坏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套接字类型不受支持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已运行EINPROGRESS115Operation now in正在运行ESTALE116Stale NFS file handle陈旧的NFS文件句柄EUCLEAN117Structure needs cleaning结构需要清洗ENOTNAM118Not a XENIX-named不是XENIX命名的ENAVAIL119No XENIX semaphores没有XENIX信号量EISNAM120Is a named type file是一个命名的文件类型EREMOTEIO121Remote I/O error远程输入/输出错误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而无法操作
暂时记录这么多,133-255全是Unknown error
二、错误处理函数
许多不同的函数库都在失败时设置全局变量errno的值来指明失败原因。值得注意的是函数报告出错后必须立刻检查errno变量,因为它有可能被下一个函数调用所覆盖。
有两个非常有用的函数可以用来报告出现的错误:
#include
char *strerror(int errnum);
该函数把错误代码映射为一个字符串,对错误类型进行说明。
#include
void perror(const char *s);
该函数也把errno变量中报告的错误应为到一个字符串,并把它输出到标准错误输出流。