Linux/Unix Errno Code

太二發表於2013-04-21

我本地環境為 Ubuntu 12.10

Errno Code 自然是寫在 errno.h 中,不過簡直是茫茫多的 errno.h 檔案啊!

/usr/lnclude/errno.h
/usr/include/linux/errno.h
/usr/include/asm-generic/errno.h
/usr/include/i386-linux-gnu/sys/errno.h
/usr/include/i386-linux-gnu/bits/errno.h
/usr/include/i386-linux-gnu/asm/errno.h
/usr/src/linux-headers-3.5.0-22/include/linux/errno.h
/usr/src/linux-headers-3.5.0-22/include/asm-generic/errno.h /usr/src/linux-headers-3.5.0-22-generic/include/linux/errno.h
/usr/src/linux-headers-3.5.0-22/arch/xtensa/include/linux/errno.h
/usr/src/linux-headers-3.5.0-22/arch/cris/include/linux/errno.h
/usr/src/linux-headers-3.5.0-22/arch/m32r/include/linux/errno.h
/usr/src/linux-headers-3.5.0-22/arch/avr32/include/linux/errno.h
/usr/src/linux-headers-3.5.0-22/arch/microblaze/include/linux/errno.h
/usr/src/linux-headers-3.5.0-22/arch/mn10300/include/linux/errno.h
/usr/src/linux-headers-3.5.0-22/arch/ia64/include/linux/errno.h
/usr/src/linux-headers-3.5.0-22/arch/score/include/linux/errno.h
/usr/src/linux-headers-3.5.0-22/arch/frv/include/linux/errno.h
/usr/src/linux-headers-3.5.0-22/arch/arm/mach-bcmring/include/csp/errno.h
/usr/src/linux-headers-3.5.0-22/arch/mips/include/linux/errno.h
/usr/src/linux-headers-3.5.0-22/arch/m68k/include/linux/errno.h
/usr/src/linux-headers-3.5.0-22/arch/x86/include/linux/errno.h
/usr/src/linux-headers-3.5.0-22/arch/parisc/include/linux/errno.h
/usr/src/linux-headers-3.5.0-22/arch/sparc/include/linux/errno.h
/usr/src/linux-headers-3.5.0-22/arch/s390/include/linux/errno.h
/usr/src/linux-headers-3.5.0-22/arch/powerpc/include/linux/errno.h
/usr/src/linux-headers-3.5.0-22/arch/alpha/include/linux/errno.h

後面這些彷彿都是原始碼,真正要找的應該是前六個。
/usr/lnclude/errno.h 是一個空殼
/usr/include/linux/errno.h 更空的一個殼
/usr/include/asm-generic/errno.h 這裡有35-133號的錯誤碼
/usr/include/i386-linux-gnu/sys/errno.h
/usr/include/i386-linux-gnu/bits/errno.h
/usr/include/i386-linux-gnu/asm/errno.h

很鬱悶,再找找其他的。

另找了一臺,系統為 Linux version 2.6.32,清晰多了。

/usr/include/errno.h -->
/usr/include/bits/errno.h -->
/usr/include/linux/errno.h -->
/usr/include/asm/errno.h -->
/usr/include/asm-generic/errno.h -->
/usr/include/asm-generic/errno-base.h

/usr/include/asm-generic/errno-base.h 中

#define EPERM            1      /* Operation not permitted */
#define ENOENT           2      /* 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 ENOEXEC          8      /* Exec format error */
#define EBADF            9      /* Bad file number */
#define ECHILD          10      /* No child processes */
#define EAGAIN          11      /* Try again */
#define ENOMEM          12      /* Out of memory */
#define EACCES          13      /* Permission denied */
#define EFAULT          14      /* Bad address */
#define ENOTBLK         15      /* Block device required */
#define EBUSY           16      /* Device or resource busy */
#define EEXIST          17      /* File exists */
#define EXDEV           18      /* Cross-device link */
#define ENODEV          19      /* No such device */
#define ENOTDIR         20      /* Not a directory */
#define EISDIR          21      /* Is a directory */
#define EINVAL          22      /* Invalid argument */
#define ENFILE          23      /* File table overflow */
#define EMFILE          24      /* Too many open files */
#define ENOTTY          25      /* Not a typewriter */
#define ETXTBSY         26      /* Text file busy */
#define EFBIG           27      /* File too large */
#define ENOSPC          28      /* No space left on device */
#define ESPIPE          29      /* Illegal seek */
#define EROFS           30      /* Read-only file system */
#define EMLINK          31      /* Too many links */
#define EPIPE           32      /* Broken pipe */
#define EDOM            33      /* Math argument out of domain of func */
#define ERANGE          34      /* Math result not representable */

/usr/include/asm-generic/errno.h 中定義了主要的錯誤碼:

#define EDEADLK         35      /* Resource deadlock would occur */
#define ENAMETOOLONG    36      /* File name too long */
#define ENOLCK          37      /* No record locks available */
#define ENOSYS          38      /* Function not implemented */
#define ENOTEMPTY       39      /* Directory not empty */
#define ELOOP           40      /* Too many symbolic links encountered */
#define EWOULDBLOCK     EAGAIN  /* Operation would block */
#define ENOMSG          42      /* No message of desired type */
#define EIDRM           43      /* Identifier removed */
#define ECHRNG          44      /* Channel number out of range */
#define EL2NSYNC        45      /* Level 2 not synchronized */
#define EL3HLT          46      /* Level 3 halted */
#define EL3RST          47      /* Level 3 reset */
#define ELNRNG          48      /* Link number out of range */
#define EUNATCH         49      /* Protocol driver not attached */
#define ENOCSI          50      /* No CSI structure available */
#define EL2HLT          51      /* Level 2 halted */
#define EBADE           52      /* Invalid exchange */
#define EBADR           53      /* Invalid request descriptor */
#define EXFULL          54      /* Exchange full */
#define ENOANO          55      /* No anode */
#define EBADRQC         56      /* Invalid request code */
#define EBADSLT         57      /* Invalid slot */
#define EDEADLOCK       EDEADLK
#define EBFONT          59      /* Bad font file format */
#define ENOSTR          60      /* Device not a stream */
#define ENODATA         61      /* No data available */
#define ETIME           62      /* Timer expired */
#define ENOSR           63      /* Out of streams resources */
#define ENONET          64      /* Machine is not on the network */
#define ENOPKG          65      /* Package not installed */
#define EREMOTE         66      /* Object is remote */
#define ENOLINK         67      /* Link has been severed */
#define EADV            68      /* Advertise error */
#define ESRMNT          69      /* Srmount error */
#define ECOMM           70      /* Communication error on send */
#define EPROTO          71      /* Protocol error */
#define EMULTIHOP       72      /* Multihop attempted */
#define EDOTDOT         73      /* RFS specific error */
#define EBADMSG         74      /* Not a data message */
#define EOVERFLOW       75      /* Value too large for defined data type */
#define ENOTUNIQ        76      /* Name not unique on network */
#define EBADFD          77      /* File descriptor in bad state */
#define EREMCHG         78      /* Remote address changed */
#define ELIBACC         79      /* Can not access a needed shared library */
#define ELIBBAD         80      /* Accessing a corrupted shared library */
#define ELIBSCN         81      /* .lib section in a.out corrupted */
#define ELIBMAX         82      /* Attempting to link in too many shared libraries */
#define ELIBEXEC        83      /* Cannot exec a shared library directly */
#define EILSEQ          84      /* Illegal byte sequence */
#define ERESTART        85      /* Interrupted system call should be restarted */
#define ESTRPIPE        86      /* Streams pipe error */
#define EUSERS          87      /* Too many users */
#define ENOTSOCK        88      /* Socket operation on non-socket */
#define EDESTADDRREQ    89      /* Destination address required */
#define EMSGSIZE        90      /* Message too long */
#define EPROTOTYPE      91      /* Protocol wrong type for socket */
#define ENOPROTOOPT     92      /* Protocol not available */
#define EPROTONOSUPPORT 93      /* Protocol not supported */
#define ESOCKTNOSUPPORT 94      /* Socket type not supported */
#define EOPNOTSUPP      95      /* Operation not supported on transport endpoint */
#define EPFNOSUPPORT    96      /* Protocol family not supported */
#define EAFNOSUPPORT    97      /* Address family not supported by protocol */
#define EADDRINUSE      98      /* Address already in use */
#define EADDRNOTAVAIL   99      /* Cannot assign requested address */
#define ENETDOWN        100     /* Network is down */
#define ENETUNREACH     101     /* Network is unreachable */
#define ENETRESET       102     /* Network dropped connection because of reset */
#define ECONNABORTED    103     /* Software caused connection abort */
#define ECONNRESET      104     /* Connection reset by peer */
#define ENOBUFS         105     /* No buffer space available */
#define EISCONN         106     /* Transport endpoint is already connected */
#define ENOTCONN        107     /* Transport endpoint is not connected */
#define ESHUTDOWN       108     /* Cannot send after transport endpoint shutdown */
#define ETOOMANYREFS    109     /* Too many references: cannot splice */
#define ETIMEDOUT       110     /* Connection timed out */
#define ECONNREFUSED    111     /* Connection refused */
#define EHOSTDOWN       112     /* Host is down */
#define EHOSTUNREACH    113     /* No route to host */
#define EALREADY        114     /* Operation already in progress */
#define EINPROGRESS     115     /* Operation now in progress */
#define ESTALE          116     /* Stale NFS file handle */
#define EUCLEAN         117     /* Structure needs cleaning */
#define ENOTNAM         118     /* Not a XENIX named type file */
#define ENAVAIL         119     /* No XENIX semaphores available */
#define EISNAM          120     /* Is a named type file */
#define EREMOTEIO       121     /* Remote I/O error */
#define EDQUOT          122     /* Quota exceeded */
#define ENOMEDIUM       123     /* No medium found */
#define EMEDIUMTYPE     124     /* Wrong medium type */
#define ECANCELED       125     /* Operation Canceled */
#define ENOKEY          126     /* Required key not available */
#define EKEYEXPIRED     127     /* Key has expired */
#define EKEYREVOKED     128     /* Key has been revoked */
#define EKEYREJECTED    129     /* Key was rejected by service */
/* for robust mutexes */
#define EOWNERDEAD      130     /* Owner died */
#define ENOTRECOVERABLE 131     /* State not recoverable */
#define ERFKILL         132     /* Operation not possible due to RF-kill */
#define EHWPOISON       133     /* Memory page has hardware error */

/usr/include/bits/errno.h

/* Linux has no ENOTSUP error code.  */
# define ENOTSUP EOPNOTSUPP
/* Older Linux versions also had no ECANCELED error code.  */
# ifndef ECANCELED
#  define ECANCELED     125
# endif
/* Support for error codes to support robust mutexes was added later, too.  */
# ifndef EOWNERDEAD
#  define EOWNERDEAD            130
#  define ENOTRECOVERABLE       131
# endif
# ifndef ERFKILL
#  define ERFKILL               132
# endif
#if !defined _ERRNO_H && defined __need_Emath
/* This is ugly but the kernel header is not clean enough.  We must
   define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is
   defined.  */
# define EDOM   33      /* Math argument out of domain of function.  */
# define EILSEQ 84      /* Illegal byte sequence.  */
# define ERANGE 34      /* Math result not representable.  */
#endif /* !_ERRNO_H && __need_Emath */

相對的,MacOSX中,errno.h少的多,分別是:
/usr/include/errno.h
/usr/include/sys/errno.h
前者是後者的殼,後者中定義了所有的Errno Code

#define EPERM           1               /* Operation not permitted */  
#define ENOENT          2               /* No such file or directory */  
#define ESRCH           3               /* No such process */  
#define EINTR           4               /* Interrupted system call */  
#define EIO             5               /* Input/output error */  
#define ENXIO           6               /* Device not configured */  
#define E2BIG           7               /* Argument list too long */  
#define ENOEXEC         8               /* Exec format error */  
#define EBADF           9               /* Bad file descriptor */  
#define ECHILD          10              /* No child processes */  
#define EDEADLK         11              /* Resource deadlock avoided */  
                                    /* 11 was EAGAIN */  
#define ENOMEM          12              /* Cannot allocate memory */  
#define EACCES          13              /* Permission denied */  
#define EFAULT          14              /* Bad address */  
#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL  
#define ENOTBLK         15              /* Block device required */  
#endif  
#define EBUSY           16              /* Device / Resource busy */  
#define EEXIST          17              /* File exists */  
#define EXDEV           18              /* Cross-device link */  
#define ENODEV          19              /* Operation not supported by device */  
#define ENOTDIR         20              /* Not a directory */  
#define EISDIR          21              /* Is a directory */  
#define EINVAL          22              /* Invalid argument */  
#define ENFILE          23              /* Too many open files in system */  
#define EMFILE          24              /* Too many open files */  
#define ENOTTY          25              /* Inappropriate ioctl for device */  
#define ETXTBSY         26              /* Text file busy */  
#define EFBIG           27              /* File too large */  
#define ENOSPC          28              /* No space left on device */  
#define ESPIPE          29              /* Illegal seek */  
#define EROFS           30              /* Read-only file system */  
#define EMLINK          31              /* Too many links */  
#define EPIPE           32              /* Broken pipe */  
#define EDOM            33              /* Numerical argument out of domain */  
#define ERANGE          34              /* Result too large */  
#define EAGAIN          35              /* Resource temporarily unavailable */  
#define EWOULDBLOCK     EAGAIN          /* Operation would block */  
#define EINPROGRESS     36              /* Operation now in progress */  
#define EALREADY        37              /* Operation already in progress */  
#define ENOTSOCK        38              /* Socket operation on non-socket */  
#define EDESTADDRREQ    39              /* Destination address required */  
#define EMSGSIZE        40              /* Message too long */  
#define EPROTOTYPE      41              /* Protocol wrong type for socket */  
#define ENOPROTOOPT     42              /* Protocol not available */  
#define EPROTONOSUPPORT 43              /* Protocol not supported */  
#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL  
#define ESOCKTNOSUPPORT 44              /* Socket type not supported */  
#endif  
#define ENOTSUP         45              /* Operation not supported */  
#if !__DARWIN_UNIX03 && !defined(KERNEL)  
#define EOPNOTSUPP       ENOTSUP        /* Operation not supported on socket */  
#endif /* !__DARWIN_UNIX03 && !KERNEL */  
#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL  
#define EPFNOSUPPORT    46              /* Protocol family not supported */  
#endif  
#define EAFNOSUPPORT    47              /* Address family not supported by protocol family */  
#define EADDRINUSE      48              /* Address already in use */  
#define EADDRNOTAVAIL   49              /* Can't assign requested address */  
/* ipc/network software -- operational errors */  
#define ENETDOWN        50              /* Network is down */  
#define ENETUNREACH     51              /* Network is unreachable */  
#define ENETRESET       52              /* Network dropped connection on reset */  
#define ECONNABORTED    53              /* Software caused connection abort */  
#define ECONNRESET      54              /* Connection reset by peer */  
#define ENOBUFS         55              /* No buffer space available */  
#define EISCONN         56              /* Socket is already connected */  
#define ENOTCONN        57              /* Socket is not connected */  
#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL  
#define ESHUTDOWN       58              /* Can't send after socket shutdown */  
#define ETOOMANYREFS    59              /* Too many references: can't splice */  
#endif  
#define ETIMEDOUT       60              /* Operation timed out */  
#define ECONNREFUSED    61              /* Connection refused */  
#define ELOOP           62              /* Too many levels of symbolic links */  
#define ENAMETOOLONG    63              /* File name too long */  
/* should be rearranged */  
#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL  
#define EHOSTDOWN       64              /* Host is down */  
#endif  
#define EHOSTUNREACH    65              /* No route to host */  
#define ENOTEMPTY       66              /* Directory not empty */  
/* quotas & mush */  
#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL  
#define EPROCLIM        67              /* Too many processes */  
#define EUSERS          68              /* Too many users */  
#endif  
#define EDQUOT          69              /* Disc quota exceeded */  
/* Network File System */  
#define ESTALE          70              /* Stale NFS file handle */  
#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL  
#define EREMOTE         71              /* Too many levels of remote in path */  
#define EBADRPC         72              /* RPC struct is bad */  
#define ERPCMISMATCH    73              /* RPC version wrong */  
#define EPROGUNAVAIL    74              /* RPC prog. not avail */  
#define EPROGMISMATCH   75              /* Program version wrong */  
#define EPROCUNAVAIL    76              /* Bad procedure for program */  
#endif  
#define ENOLCK          77              /* No locks available */  
#define ENOSYS          78              /* Function not implemented */  
#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL  
#define EFTYPE          79              /* Inappropriate file type or format */  
#define EAUTH           80              /* Authentication error */  
#define ENEEDAUTH       81              /* Need authenticator */  
/* Intelligent device errors */  
#define EPWROFF         82      /* Device power is off */  
#define EDEVERR         83      /* Device error, e.g. paper out */  
#endif  
#define EOVERFLOW       84              /* Value too large to be stored in data type */  
/* Program loading errors */  
#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL  
#define EBADEXEC        85      /* Bad executable */  
#define EBADARCH        86      /* Bad CPU type in executable */  
#define ESHLIBVERS      87      /* Shared library version mismatch */  
#define EBADMACHO       88      /* Malformed Macho file */  
#endif  
#define ECANCELED       89              /* Operation canceled */  
#define EIDRM           90              /* Identifier removed */  
#define ENOMSG          91              /* No message of desired type */  
#define EILSEQ          92              /* Illegal byte sequence */  
#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL  
#define ENOATTR         93              /* Attribute not found */  
#endif  
#define EBADMSG         94              /* Bad message */  
#define EMULTIHOP       95              /* Reserved */  
#define ENODATA         96              /* No message available on STREAM */  
#define ENOLINK         97              /* Reserved */  
#define ENOSR           98              /* No STREAM resources */  
#define ENOSTR          99              /* Not a STREAM */  
#define EPROTO          100             /* Protocol error */  
#define ETIME           101             /* STREAM ioctl timeout */  
#if __DARWIN_UNIX03 || defined(KERNEL)  
/* This value is only discrete when compiling __DARWIN_UNIX03, or KERNEL */  
#define EOPNOTSUPP      102             /* Operation not supported on socket */  
#endif /* __DARWIN_UNIX03 || KERNEL */  
#define ENOPOLICY       103             /* No such policy registered */  
#if __DARWIN_C_LEVEL >= 200809L  
#define ENOTRECOVERABLE 104             /* State not recoverable */  
#define EOWNERDEAD      105             /* Previous owner died */  
#endif  
#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL  
#define EQFULL          106             /* Interface output queue is full */  
#define ELAST           106             /* Must be equal largest errno */  
#endif  
#endif /* _SYS_ERRNO_H_ */  

好吧,我就想試試排版效果。。。。。。

相關文章