转自:https://blog.csdn.net/jediael_lu/article/details/8589194;https://www.cnblogs.com/Jimmy1988/p/7485133.html
errno简介
Linux中系统调用的错误都存储于errno中,errno由操作系统维护,存储就近发生的错误,即下一次的错误码会覆盖掉上一次的错误。
errno是一个包含在<errno.h>中的预定义的外部int变量,用于表示最近一个函数调用是否产生了错误。若为0,则无错误,其它值均表示一类错误。
perror()和strerrot()函数可以把errno的值转化为有意义的字符输出。
PS: 只有当系统调用或者调用lib函数时出错,才会置位errno!
erron用法示例
#include <stdio.h> #include <stdlib.h> #include <dirent.h> #include <errno.h> //头文件 #include <string.h> int main(void){ extern int errno; //外部变量 errno=0; opendir("/home/kkk"); //用法1:直接读取errno的值 printf("%d ", errno); //用法2:使用perror函数,把error的值转化为有意义的字符提示。 if(errno != 0){ perror("opendir: "); // exit(EXIT_FAILURE); } //用法3:类似用法2,但使用strerror函数。 if(errno != 0){ printf("%s ", strerror(errno)); exit(0); } exit(0); }
输出结果为:
2
opendir: : No such file or directory
No such file or directory
查看系统中所有的errno所代表的含义
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
int main(void){
for(int i = 0; i < 140; i++){
printf("%4d:%s
", i, strerror(i));
}
exit(0);
}
输出结果如下:
0:Success 1:Operation not permitted 2:No such file or directory 3:No such process 4:Interrupted system call 5:Input/output error 6:No such device or address 7:Argument list too long 8:Exec format error 9:Bad file descriptor 10:No child processes 11:Resource temporarily unavailable 12:Cannot allocate memory 13:Permission denied 14:Bad address 15:Block device required 16:Device or resource busy 17:File exists 18:Invalid cross-device link 19:No such device 20:Not a directory 21:Is a directory 22:Invalid argument 23:Too many open files in system 24:Too many open files 25:Inappropriate ioctl for device 26:Text file busy 27:File too large 28:No space left on device 29:Illegal seek 30:Read-only file system 31:Too many links 32:Broken pipe 33:Numerical argument out of domain 34:Numerical result out of range 35:Resource deadlock avoided 36:File name too long 37:No locks available 38:Function not implemented 39:Directory not empty 40:Too many levels of symbolic links 41:Unknown error 41 42:No message of desired type 43:Identifier removed 44:Channel number out of range 45:Level 2 not synchronized 46:Level 3 halted 47:Level 3 reset 48:Link number out of range 49:Protocol driver not attached 50:No CSI structure available 51:Level 2 halted 52:Invalid exchange 53:Invalid request descriptor 54:Exchange full 55:No anode 56:Invalid request code 57:Invalid slot 58:Unknown error 58 59:Bad font file format 60:Device not a stream 61:No data available 62:Timer expired 63:Out of streams resources 64:Machine is not on the network 65:Package not installed 66:Object is remote 67:Link has been severed 68:Advertise error 69:Srmount error 70:Communication error on send 71:Protocol error 72:Multihop attempted 73:RFS specific error 74:Bad message 75:Value too large for defined data type 76:Name not unique on network 77:File descriptor in bad state 78:Remote address changed 79:Can not access a needed shared library 80:Accessing a corrupted shared library 81:.lib section in a.out corrupted 82:Attempting to link in too many shared libraries 83:Cannot exec a shared library directly 84:Invalid or incomplete multibyte or wide character 85:Interrupted system call should be restarted 86:Streams pipe error 87:Too many users 88:Socket operation on non-socket 89:Destination address required 90:Message too long 91:Protocol wrong type for socket 92:Protocol not available 93:Protocol not supported 94:Socket type not supported 95:Operation not supported 96:Protocol family not supported 97:Address family not supported by protocol 98:Address already in use 99:Cannot assign requested address 100:Network is down 101:Network is unreachable 102:Network dropped connection on reset 103:Software caused connection abort 104:Connection reset by peer 105:No buffer space available 106:Transport endpoint is already connected 107:Transport endpoint is not connected 108:Cannot send after transport endpoint shutdown 109:Too many references: cannot splice 110:Connection timed out 111:Connection refused 112:Host is down 113:No route to host 114:Operation already in progress 115:Operation now in progress 116:Stale NFS file handle 117:Structure needs cleaning 118:Not a XENIX named type file 119:No XENIX semaphores available 120:Is a named type file 121:Remote I/O error 122:Disk quota exceeded 123:No medium found 124:Wrong medium type 125:Operation canceled 126:Required key not available 127:Key has expired 128:Key has been revoked 129:Key was rejected by service 130:Owner died 131:State not recoverable 132:Operation not possible due to RF-kill 133:Unknown error 133 134:Unknown error 134 135:Unknown error 135 136:Unknown error 136 137:Unknown error 137 138:Unknown error 138 139:Unknown error 139