查看错误代码errno是调试程序的一个重要方法。当linuc C api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因。在实际编程中用这一招解决了不少原本看来莫名其妙的问题。比较麻烦的是每次都要去linux源代码里面查找错误代码的含义,现在把它贴出来,以后需要查时就来这里看了。
1-34号错误号是在内核源码的include/asm-generic/errno-base.h定义
35-132则是在include/asm-generic/errno.h中定义
剩下还有一些更大的错误号是留给内核级别的,如系统调用等,用户程序一般是看不见的这些号的,Ubuntu9.10中/usr/src/linux-headers-2.6.31-21-generic/include/linux/errno.h
#ifndef _ASM_GENERIC_ERRNO_BASE_H
#define _ASM_GENERIC_ERRNO_BASE_H
#defineEPERM1/* Operation not permitted */
#defineENOENT2/* No such file or directory */
#defineESRCH3/* No such process */
#defineEINTR4/* Interrupted system call */
#defineEIO5/* I/O error */
#defineENXIO6/* No such device or address */
#defineE2BIG7/* Argument list too long */
#defineENOEXEC8/* Exec format error */
#defineEBADF9/* Bad file number */
#defineECHILD10/* No child processes */
#defineEAGAIN11/* Try again */
#defineENOMEM12/* Out of memory */
#defineEACCES13/* Permission denied */
#defineEFAULT14/* Bad address */
#defineENOTBLK15/* Block device required */
#defineEBUSY16/* Device or resource busy */
#defineEEXIST17/* File exists */
#defineEXDEV18/* Cross-device link */
#defineENODEV19/* No such device */
#defineENOTDIR20/* Not a directory */
#defineEISDIR21/* Is a directory */
#defineEINVAL22/* Invalid argument */
#defineENFILE23/* File table overflow */
#defineEMFILE24/* Too many open files */
#defineENOTTY25/* Not a typewriter */
#defineETXTBSY26/* Text file busy */
#defineEFBIG27/* File too large */
#defineENOSPC28/* No space left on device */
#defineESPIPE29/* Illegal seek */
#defineEROFS30/* Read-only file system */
#defineEMLINK31/* Too many links */
#defineEPIPE32/* Broken pipe */
#defineEDOM33/* Math argument out of domain of func */
#defineERANGE34/* Math result not representable */
#endif
#include <asm-generic/errno-base.h>
#defineEDEADLK35/* Resource deadlock would occur */
#defineENAMETOOLONG36/* File name too long */
#defineENOLCK37/* No record locks available */
#defineENOSYS38/* Function not implemented */
#defineENOTEMPTY39/* Directory not empty */
#defineELOOP40/* Too many symbolic links encountered */
#defineEWOULDBLOCKEAGAIN/* Operation would block */
#defineENOMSG42/* No message of desired type */
#defineEIDRM43/* Identifier removed */
#defineECHRNG44/* Channel number out of range */
#defineEL2NSYNC45/* Level 2 not synchronized */
#defineEL3HLT46/* Level 3 halted */
#defineEL3RST47/* Level 3 reset */
#defineELNRNG48/* Link number out of range */
#defineEUNATCH49/* Protocol driver not attached */
#defineENOCSI50/* No CSI structure available */
#defineEL2HLT51/* Level 2 halted */
#defineEBADE52/* Invalid exchange */
#defineEBADR53/* Invalid request descriptor */
#defineEXFULL54/* Exchange full */
#defineENOANO55/* No anode */
#defineEBADRQC56/* Invalid request code */
#defineEBADSLT57/* Invalid slot */
#defineEDEADLOCKEDEADLK
#defineEBFONT59/* Bad font file format */
#defineENOSTR60/* Device not a stream */
#defineENODATA61/* No data available */
#defineETIME62/* Timer expired */
#defineENOSR63/* Out of streams resources */
#defineENONET64/* Machine is not on the network */
#defineENOPKG65/* Package not installed */
#defineEREMOTE66/* Object is remote */
#defineENOLINK67/* Link has been severed */
#defineEADV68/* Advertise error */
#defineESRMNT69/* Srmount error */
#defineECOMM70/* Communication error on send */
#defineEPROTO71/* Protocol error */
#defineEMULTIHOP72/* Multihop attempted */
#defineEDOTDOT73/* RFS specific error */
#defineEBADMSG74/* Not a data message */
#defineEOVERFLOW75/* Value too large for defined data type */
#defineENOTUNIQ76/* Name not unique on network */
#defineEBADFD77/* File descriptor in bad state */
#defineEREMCHG78/* Remote address changed */
#defineELIBACC79/* Can not access a needed shared library */
#defineELIBBAD80/* Accessing a corrupted shared library */
#defineELIBSCN81/* .lib section in a.out corrupted */
#defineELIBMAX82/* Attempting to link in too many shared libraries */
#defineELIBEXEC83/* Cannot exec a shared library directly */
#defineEILSEQ84/* Illegal byte sequence */
#defineERESTART85/* Interrupted system call should be restarted */
#defineESTRPIPE86/* Streams pipe error */
#defineEUSERS87/* Too many users */
#defineENOTSOCK88/* Socket operation on non-socket */
#defineEDESTADDRREQ89/* Destination address required */
#defineEMSGSIZE90/* Message too long */
#defineEPROTOTYPE91/* Protocol wrong type for socket */
#defineENOPROTOOPT92/* Protocol not available */
#defineEPROTONOSUPPORT93/* Protocol not supported */
#defineESOCKTNOSUPPORT94/* Socket type not supported */
#defineEOPNOTSUPP95/* Operation not supported on transport endpoint */
#defineEPFNOSUPPORT96/* Protocol family not supported */
#defineEAFNOSUPPORT97/* Address family not supported by protocol */
#defineEADDRINUSE98/* Address already in use */
#defineEADDRNOTAVAIL99/* Cannot assign requested address */
#defineENETDOWN100/* Network is down */
#defineENETUNREACH101/* Network is unreachable */
#defineENETRESET102/* Network dropped connection because of reset */
#defineECONNABORTED103/* Software caused connection abort */
#defineECONNRESET104/* Connection reset by peer */
#defineENOBUFS105/* No buffer space available */
#defineEISCONN106/* Transport endpoint is already connected */
#defineENOTCONN107/* Transport endpoint is not connected */
#defineESHUTDOWN108/* Cannot send after transport endpoint shutdown */
#defineETOOMANYREFS109/* Too many references: cannot splice */
#defineETIMEDOUT110/* Connection timed out */
#defineECONNREFUSED111/* Connection refused */
#defineEHOSTDOWN112/* Host is down */
#defineEHOSTUNREACH113/* No route to host */
#defineEALREADY114/* Operation already in progress */
#defineEINPROGRESS115/* Operation now in progress */
#defineESTALE116/* Stale NFS file handle */
#defineEUCLEAN117/* Structure needs cleaning */
#defineENOTNAM118/* Not a XENIX named type file */
#defineENAVAIL119/* No XENIX semaphores available */
#defineEISNAM120/* Is a named type file */
#defineEREMOTEIO121/* Remote I/O error */
#defineEDQUOT122/* Quota exceeded */
#defineENOMEDIUM123/* No medium found */
#defineEMEDIUMTYPE124/* Wrong medium type */
#defineECANCELED125/* Operation Canceled */
#defineENOKEY126/* Required key not available */
#defineEKEYEXPIRED127/* Key has expired */
#defineEKEYREVOKED128/* Key has been revoked */
#defineEKEYREJECTED129/* Key was rejected by service */
/* for robust mutexes */
#defineEOWNERDEAD130/* Owner died */
#defineENOTRECOVERABLE131/* State not recoverable */
#define ERFKILL132/* Operation not possible due to RF-kill */
#ifdef __KERNEL__
/*
* These should never be seen by user programs. To return one of ERESTART*
* codes, signal_pending() MUST be set. Note that ptrace can observe these
* at syscall exit tracing, but they will never be left for the debugged user
* process to see.
*/
#define ERESTARTSYS512
#define ERESTARTNOINTR513
#define ERESTARTNOHAND514/* restart if no handler.. */
#define ENOIOCTLCMD515/* No ioctl command */
#define ERESTART_RESTARTBLOCK 516 /* restart by calling sys_restart_syscall */
/* Defined for the NFSv3 protocol */
#define EBADHANDLE521/* Illegal NFS file handle */
#define ENOTSYNC522/* Update synchronization mismatch */
#define EBADCOOKIE523/* Cookie is stale */
#define ENOTSUPP524/* Operation is not supported */
#define ETOOSMALL525/* Buffer or request is too small */
#define ESERVERFAULT526/* An untranslatable error occurred */
#define EBADTYPE527/* Type not supported by server */
#define EJUKEBOX528/* Request initiated, but will not complete before timeout */
#define EIOCBQUEUED529/* iocb queued, will get completion event */
#define EIOCBRETRY530/* iocb queued, will trigger a retry */
#endif