经常在调用linux 系统api的时候会出现一些错误,比方说使用open() 、write() creat()之类的函数有些时候会返回-1,也就是调用失败。这个时候使用errno这个全局变量就相当有用了。
例如:
#include <stdio.h> #include <string.h> #include <errno.h> int main(void) { int fd; extern int errno; if((fd = open("/dev/dsp",O_WRONLY)) < 0) { printf("errno=%d\n",errno); } exit(0); }
假如 errno=13,则表示文件权限不足,需要提高权限。
以下来自linux 2.4.20-18的内核代码中的/usr/include/asm/errno.h
#ifndef _I386_ERRNO_H #define _I386_ERRNO_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 / Arg 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 / #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 */ #endif
标签:No,errno,使用,file,error,type,define From: https://www.cnblogs.com/haoran123/p/17332693.html