在库函数中有个errno变量,每个errno值对应着以字符串表示的错误类型。
以下主要来自2.6.32的内核代码中的/usr/include/asm-generic/errno.h及errno-base.h,输出错误原因定义归纳整理如下,我们可以使用如下代码输出:
/************************************************
> File Name: 0.c
> Author: GatieMe
> Mail: ftcl@163.com
> Created Time: Sat 23 Jan 2016 12:07:51 AM CST
************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char ** argv)
{
int i = 0;
for(i = 0; i < 256; i++)
{
printf("| %02d | %s |\n", i, strerror(i));
}
return 0;
}
注意:
perror( ) 用来将上一个函数发生错误的原因输出到标准设备(stderr)。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量errno 的值来决定要输出的字符串。
当你调用”某些”函数出错时,该函数已经重新设置了errno的值。perror函数只是将你输入的一些信息和现在的errno所对应的错误一起输出。
| errno | 描述 |
|---|---|
| 00 | Success |
| 01 | Operation not permitted |
| 02 | No such file or directory |
| 03 | No such process |
| 04 | Interrupted system call |
| 05 | Input/output error |
| 06 | No such device or address |
| 07 | Argument list too long |
| 08 | Exec format error |
| 09 | 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~ | Unknown error |

