errno 在 <errno.h> 中定义,错误 Exx 的宏定义在 /usr/include/asm-generic 文件夹下面的 errno-base.h 和 errno.h,分别定义了 1-34 、35-132 的错误定义。
strerror() 函数依据 errno 值返回错误描述字符串,下面程序打印对照表:
[cpp] view plain copy #include <errno.h> #include <string.h> #include <stdio.h> int main() { int i; for(i = 0; i < 140; ++i) { errno = i; printf("errno %d :\t\t%s\n",i,strerror(errno)); } return 0; } 错误对照表:errno0 : Success
errno1 : Operation not permitted
errno2 : No such file or directory
errno3 : No such process
errno4 : Interrupted system call
errno5 : Input/output error
errno6 : No such device or address
errno7 : Argument list too long
errno8 : Exec format error
errno9 : Bad file descriptor
errno10 : No child processes
errno11 : Resource temporarily unavailable
errno12 : Cannot allocate memory
errno13 : Permission denied
errno14 : Bad address
errno15 : Block device required
errno16 : Device or resource busy
errno17 : File exists
errno18 : Invalid cross-device link
errno19 : No such device
errno20 : Not a directory
errno21 : Is a directory
errno22 : Invalid argument
errno23 : Too many open files in system
errno24 : Too many open files
errno25 : Inappropriate ioctl for device
errno26 : Text file busy
errno27 : File too large
errno28 : No space left on device
errno29 : Illegal seek
errno30 : Read-only file system
errno31 : Too many links
errno32 : Broken pipe
errno33 : Numerical argument out of domain
errno34 : Numerical result out of range
errno35 : Resource deadlock avoided
errno36 : File name too long
errno37 : No locks available
errno38 : Function not implemented
errno39 : Directory not empty
errno40 : Too many levels of symbolic links
errno41 : Unknown error 41
errno42 : No message of desired type
errno43 : Identifier removed
errno44 : Channel number out of range
errno45 : Level 2 not synchronized
errno46 : Level 3 halted
errno47 : Level 3 reset
errno48 : Link number out of range
errno49 : Protocol driver not attached
errno50 : No CSI structure available
errno51 : Level 2 halted
errno52 : Invalid exchange
errno53 : Invalid request descriptor
errno54 : Exchange full
errno55 : No anode
errno56 : Invalid request code
errno57 : Invalid slot
errno58 : Unknown error 58
errno59 : Bad font file format
errno60 : Device not a stream
errno61 : No data available
errno62 : Timer expired
errno63 : Out of streams resources
errno64 : Machine is not on the network
errno65 : Package not installed
errno66 : Object is remote
errno67 : Link has been severed
errno68 : Advertise error
errno69 : Srmount error
errno70 : Communication error on send
errno71 : Protocol error
errno72 : Multihop attempted
errno73 : RFS specific error
errno74 : Bad message
errno75 : Value too large for defined datatype
errno76 : Name not unique on network
errno77 : File descriptor in bad state
errno78 : Remote address changed
errno79 : Can not access a needed sharedlibrary
errno80 : Accessing a corrupted sharedlibrary
errno81 : .lib section in a.out corrupted
errno82 : Attempting to link in too manyshared libraries
errno83 : Cannot exec a shared librarydirectly
errno84 : Invalid or incomplete multibyte orwide character
errno85 : Interrupted system call should berestarted
errno86 : Streams pipe error
errno87 : Too many users
errno88 : Socket operation on non-socket
errno89 : Destinationaddress required
errno90 : Message too long
errno91 : Protocol wrong type for socket
errno92 : Protocol not available
errno93 : Protocol not supported
errno94 : Socket type not supported
errno95 : Operation not supported
errno96 : Protocol family not supported
errno97 : Address family not supported byprotocol
errno98 : Address already in use
errno99 : Cannot assign requested address
errno100 : Network is down
errno101 : Network is unreachable
errno102 : Network dropped connection onreset
errno103 : Software caused connection abort
errno104 : Connection reset by peer
errno105 : No buffer space available
errno106 : Transport endpoint is alreadyconnected
errno107 : Transport endpoint is notconnected
errno108 : Cannot send after transportendpoint shutdown
errno109 : Too many references: cannot splice
errno110 : Connection timed out
errno111 : Connection refused
errno112 : Host is down
errno113 : No route to host
errno114 : Operation already in progress
errno115 : Operation now in progress
errno116 : Stale NFS file handle
errno117 : Structure needs cleaning
errno118 : Not a XENIX named type file
errno119 : No XENIX semaphores available
errno120 : Is a named type file
errno121 : Remote I/O error
errno122 : Disk quota exceeded
errno123 : No medium found
errno124 : Wrong medium type
errno125 : Operation canceled
errno126 : Required key not available
errno127 : Key has expired
errno128 : Key has been revoked
errno129 : Key was rejected by service
errno130 : Owner died
errno131 : State not recoverable
errno132 : Operation not possible due toRF-kill
errno133 : Unknown error 133
errno134 : Unknown error 134
errno135 : Unknown error 135
errno136 : Unknown error 136
errno137 : Unknown error 137
errno138 : Unknown error 138
errno139 : Unknown error 139
由上可见Linux对错误宏的定义。
头文件 /usr/include/asm-generic/errno-base.h 的源码:
#ifndef _ASM_GENERIC_ERRNO_BASE_H #define _ASM_GENERIC_ERRNO_BASE_H #define EPERM 1 /* Operation not permitted */ #define ENOENT2/* No such file or directory */ #define ESRCH 3 /* No such process */ #define EINTR 4 /* Interrupted system call */ #define EIO 5 /* I/O error */ #define ENXIO 6 /* No such device or address */ #define E2BIG 7 /* Argument list too long */ #define ENOEXEC8/* Exec format error */ #define EBADF 9 /* Bad file number */ #define ECHILD10/* No child processes */ #define EAGAIN11/* Try again */ #define ENOMEM12/* Out of memory */ #define EACCES13/* Permission denied */ #define EFAULT14/* Bad address */ #define ENOTBLK15/* Block device required */ #define EBUSY 16 /* Device or resource busy */ #define EEXIST17/* File exists */ #define EXDEV 18 /* Cross-device link */ #define ENODEV19/* No such device */ #define ENOTDIR20/* Not a directory */ #define EISDIR21/* Is a directory */ #define EINVAL22/* Invalid argument */ #define ENFILE23/* File table overflow */ #define EMFILE24/* Too many open files */ #define ENOTTY25/* Not a typewriter */ #define ETXTBSY26/* Text file busy */ #define EFBIG 27 /* File too large */ #define ENOSPC28/* No space left on device */ #define ESPIPE29/* Illegal seek */ #define EROFS 30 /* Read-only file system */ #define EMLINK31/* Too many links */ #define EPIPE 32 /* Broken pipe */ #define EDOM 33 /* Math argument out of domain of func */ #define ERANGE34/* Math result not representable */ #endif
头文件/usr/include/asm-generic/erno.h源码:
#ifndef _ASM_GENERIC_ERRNO_H #define _ASM_GENERIC_ERRNO_H #include <asm-generic/errno-base.h> #define EDEADLK35/* Resource deadlock would occur */ #define ENAMETOOLONG36/* File name too long */ #define ENOLCK37/* No record locks available */ #define ENOSYS38/* Function not implemented */ #define ENOTEMPTY39/* Directory not empty */ #define ELOOP 40 /* Too many symbolic links encountered */ #define EWOULDBLOCKEAGAIN/* Operation would block */ #define ENOMSG42/* No message of desired type */ #define EIDRM 43 /* Identifier removed */ #define ECHRNG44/* Channel number out of range */ #define EL2NSYNC45/* Level 2 not synchronized */ #define EL3HLT46/* Level 3 halted */ #define EL3RST47/* Level 3 reset */ #define ELNRNG48/* Link number out of range */ #define EUNATCH49/* Protocol driver not attached */ #define ENOCSI50/* No CSI structure available */ #define EL2HLT51/* Level 2 halted */ #define EBADE 52 /* Invalid exchange */ #define EBADR 53 /* Invalid request descriptor */ #define EXFULL54/* Exchange full */ #define ENOANO55/* No anode */ #define EBADRQC56/* Invalid request code */ #define EBADSLT57/* Invalid slot */ #define EDEADLOCKEDEADLK #define EBFONT59/* Bad font file format */ #define ENOSTR60/* Device not a stream */ #define ENODATA61/* No data available */ #define ETIME 62 /* Timer expired */ #define ENOSR 63 /* Out of streams resources */ #define ENONET64/* Machine is not on the network */ #define ENOPKG65/* Package not installed */ #define EREMOTE66/* Object is remote */ #define ENOLINK67/* Link has been severed */ #define EADV 68 /* Advertise error */ #define ESRMNT69/* Srmount error */ #define ECOMM 70 /* Communication error on send */ #define EPROTO71/* Protocol error */ #define EMULTIHOP72/* Multihop attempted */ #define EDOTDOT73/* RFS specific error */ #define EBADMSG74/* Not a data message */ #define EOVERFLOW75/* Value too large for defined data type */ #define ENOTUNIQ76/* Name not unique on network */ #define EBADFD77/* File descriptor in bad state */ #define EREMCHG78/* Remote address changed */ #define ELIBACC79/* Can not access a needed shared library */ #define ELIBBAD80/* Accessing a corrupted shared library */ #define ELIBSCN81/* .lib section in a.out corrupted */ #define ELIBMAX82/* Attempting to link in too many shared libraries */ #define ELIBEXEC83/* Cannot exec a shared library directly */ #define EILSEQ84/* Illegal byte sequence */ #define ERESTART85/* Interrupted system call should be restarted */ #define ESTRPIPE86/* Streams pipe error */ #define EUSERS87/* Too many users */ #define ENOTSOCK88/* Socket operation on non-socket */ #define EDESTADDRREQ89/* Destination address required */ #define EMSGSIZE90/* Message too long */ #define EPROTOTYPE91/* Protocol wrong type for socket */ #define ENOPROTOOPT92/* Protocol not available */ #define EPROTONOSUPPORT93/* Protocol not supported */ #define ESOCKTNOSUPPORT94/* Socket type not supported */ #define EOPNOTSUPP95/* Operation not supported on transport endpoint */ #define EPFNOSUPPORT96/* Protocol family not supported */ #define EAFNOSUPPORT97/* Address family not supported by protocol */ #define EADDRINUSE98/* Address already in use */ #define EADDRNOTAVAIL99/* Cannot assign requested address */ #define ENETDOWN100/* Network is down */ #define ENETUNREACH101/* Network is unreachable */ #define ENETRESET102/* Network dropped connection because of reset */ #define ECONNABORTED103/* Software caused connection abort */ #define ECONNRESET104/* Connection reset by peer */ #define ENOBUFS105/* No buffer space available */ #define EISCONN106/* Transport endpoint is already connected */ #define ENOTCONN107/* Transport endpoint is not connected */ #define ESHUTDOWN108/* Cannot send after transport endpoint shutdown */ #define ETOOMANYREFS109/* Too many references: cannot splice */ #define ETIMEDOUT110/* Connection timed out */ #define ECONNREFUSED111/* Connection refused */ #define EHOSTDOWN112/* Host is down */ #define EHOSTUNREACH113/* No route to host */ #define EALREADY114/* Operation already in progress */ #define EINPROGRESS115/* Operation now in progress */ #define ESTALE116/* Stale NFS file handle */ #define EUCLEAN117/* Structure needs cleaning */ #define ENOTNAM118/* Not a XENIX named type file */ #define ENAVAIL119/* No XENIX semaphores available */ #define EISNAM120/* Is a named type file */ #define EREMOTEIO121/* Remote I/O error */ #define EDQUOT122/* Quota exceeded */ #define ENOMEDIUM123/* No medium found */ #define EMEDIUMTYPE124/* Wrong medium type */ #define ECANCELED125/* Operation Canceled */ #define ENOKEY126/* Required key not available */ #define EKEYEXPIRED127/* Key has expired */ #define EKEYREVOKED128/* Key has been revoked */ #define EKEYREJECTED129/* Key was rejected by service */ /* for robust mutexes */ #define EOWNERDEAD130/* Owner died */ #define ENOTRECOVERABLE131/* State not recoverable */ #define ERFKILL 132/* Operation not possible due to RF-kill */ #endif