errno的基本用法
error是一個包含在<errno.h>中的預定義的外部int變量,用于表示最近一個函數調用是否產生了錯誤。若為0,則無錯誤,其它值均表示一類錯誤。
perror()和strerrot()函數可以把errno的值轉化為有意義的字符輸出。
#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\n", errno);//用法2:使用perror函數,把error的值轉化為有意義的字符提示。if(errno != 0){perror("opendir: "); // exit(EXIT_FAILURE);}//用法3:類似用法2,但使用strerror函數。if(errno != 0){printf("%s\n", strerror(errno));exit(0);}exit(0); }輸出結果為:
2
opendir: : No such file or directory
No such file or directory
以下程序用于顯示所有的錯誤代碼含義(經測試,目前的錯誤代碼從0-132,其余未使用)
#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\n", 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
總結
以上是生活随笔為你收集整理的errno的基本用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux系统常用目录操作函数
- 下一篇: syslog()的基本用法