目录
- Ubuntu 中安装 ‘errno’ 命令
- 使用 ‘errno -ls’ 命令,查看错误码
- 错误码(error code)列表
- 错误码列表生成程序
1. Ubuntu 中安装 ‘errno’ 命令:
ubuntu@cuname:~$ sudo apt-get install moreutils
2. 使用 ‘errno -ls’ 命令,查看错误码:
ubuntu@cuname:~$ errno -ls
/* 列分别为:macro name , errno code, description */
/* 宏名称, 错误代码, 描述 */
EPERM 1 Operation not permitted
ENOENT 2 No such file or directory
ESRCH 3 No such process
EINTR 4 Interrupted system call
...
3. 错误码(error code)列表(总共 134 行)
- 声明头文件 ‘#include <errno.h>’
| 宏名称 | 错误代码 | 描述 |
|---|---|---|
| EPERM | 1 | Operation not permitted |
| ENOENT | 2 | No such file or directory |
| ESRCH | 3 | No such process |
| EINTR | 4 | Interrupted system call |
| EIO | 5 | Input/output error |
| ENXIO | 6 | No such device or address |
| E2BIG | 7 | Argument list too long |
| ENOEXEC | 8 | Exec format error |
| EBADF | 9 | Bad file descriptor |
| ECHILD | 10 | No child processes |
| EAGAIN | 11 | Resource temporarily unavailable |
| ENOMEM | 12 | Cannot allocate memory |
| EACCES | 13 | Permission denied |
| EFAULT | 14 | Bad address |
| ENOTBLK | 15 | Block device required |
| EBUSY | 16 | Device or resource busy |
| EEXIST | 17 | File exists |
| EXDEV | 18 | Invalid cross-device link |
| ENODEV | 19 | No such device |
| ENOTDIR | 20 | Not a directory |
| EISDIR | 21 | Is a directory |
| EINVAL | 22 | Invalid argument |
| ENFILE | 23 | Too many open files in system |
| EMFILE | 24 | Too many open files |
| ENOTTY | 25 | Inappropriate ioctl for device |
| ETXTBSY | 26 | Text file busy |
| EFBIG | 27 | File too large |
| ENOSPC | 28 | No space left on device |
| ESPIPE | 29 | Illegal seek |
| EROFS | 30 | Read-only file system |
| EMLINK | 31 | Too many links |
| EPIPE | 32 | Broken pipe |
| EDOM | 33 | Numerical argument out of domain |
| ERANGE | 34 | Numerical result out of range |
| EDEADLK | 35 | Resource deadlock avoided |
| ENAMETOOLONG | 36 | File name too long |
| ENOLCK | 37 | No locks available |
| ENOSYS | 38 | Function not implemented |
| ENOTEMPTY | 39 | Directory not empty |
| ELOOP | 40 | Too many levels of symbolic links |
| EWOULDBLOCK | 11 | Resource temporarily unavailable |
| ENOMSG | 42 | No message of desired type |
| EIDRM | 43 | Identifier removed |
| ECHRNG | 44 | Channel number out of range |
| EL2NSYNC | 45 | Level 2 not synchronized |
| EL3HLT | 46 | Level 3 halted |
| EL3RST | 47 | Level 3 reset |
| ELNRNG | 48 | Link number out of range |
| EUNATCH | 49 | Protocol driver not attached |
| ENOCSI | 50 | No CSI structure available |
| EL2HLT | 51 | Level 2 halted |
| EBADE | 52 | Invalid exchange |
| EBADR | 53 | Invalid request descriptor |
| EXFULL | 54 | Exchange full |
| ENOANO | 55 | No anode |
| EBADRQC | 56 | Invalid request code |
| EBADSLT | 57 | Invalid slot |
| EDEADLOCK | 35 | Resource deadlock avoided |
| EBFONT | 59 | Bad font file format |
| ENOSTR | 60 | Device not a stream |
| ENODATA | 61 | No data available |
| ETIME | 62 | Timer expired |
| ENOSR | 63 | Out of streams resources |
| ENONET | 64 | Machine is not on the network |
| ENOPKG | 65 | Package not installed |
| EREMOTE | 66 | Object is remote |
| ENOLINK | 67 | Link has been severed |
| EADV | 68 | Advertise error |
| ESRMNT | 69 | Srmount error |
| ECOMM | 70 | Communication error on send |
| EPROTO | 71 | Protocol error |
| EMULTIHOP | 72 | Multihop attempted |
| EDOTDOT | 73 | RFS specific error |
| EBADMSG | 74 | Bad message |
| EOVERFLOW | 75 | Value too large for defined data type |
| ENOTUNIQ | 76 | Name not unique on network |
| EBADFD | 77 | File descriptor in bad state |
| EREMCHG | 78 | Remote address changed |
| ELIBACC | 79 | Can not access a needed shared library |
| ELIBBAD | 80 | Accessing a corrupted shared library |
| ELIBSCN | 81 | .lib section in a.out corrupted |
| ELIBMAX | 82 | Attempting to link in too many shared libraries |
| ELIBEXEC | 83 | Cannot exec a shared library directly |
| EILSEQ | 84 | Invalid or incomplete multibyte or wide character |
| ERESTART | 85 | Interrupted system call should be restarted |
| ESTRPIPE | 86 | Streams pipe error |
| EUSERS | 87 | Too many users |
| ENOTSOCK | 88 | Socket operation on non-socket |
| EDESTADDRREQ | 89 | Destination address required |
| EMSGSIZE | 90 | Message too long |
| EPROTOTYPE | 91 | Protocol wrong type for socket |
| ENOPROTOOPT | 92 | Protocol not available |
| EPROTONOSUPPORT | 93 | Protocol not supported |
| ESOCKTNOSUPPORT | 94 | Socket type not supported |
| EOPNOTSUPP | 95 | Operation not supported |
| EPFNOSUPPORT | 96 | Protocol family not supported |
| EAFNOSUPPORT | 97 | Address family not supported by protocol |
| EADDRINUSE | 98 | Address already in use |
| EADDRNOTAVAIL | 99 | Cannot assign requested address |
| ENETDOWN | 100 | Network is down |
| ENETUNREACH | 101 | Network is unreachable |
| ENETRESET | 102 | Network dropped connection on reset |
| ECONNABORTED | 103 | Software caused connection abort |
| ECONNRESET | 104 | Connection reset by peer |
| ENOBUFS | 105 | No buffer space available |
| EISCONN | 106 | Transport endpoint is already connected |
| ENOTCONN | 107 | Transport endpoint is not connected |
| ESHUTDOWN | 108 | Cannot send after transport endpoint shutdown |
| ETOOMANYREFS | 109 | Too many references: cannot splice |
| ETIMEDOUT | 110 | Connection timed out |
| ECONNREFUSED | 111 | Connection refused |
| EHOSTDOWN | 112 | Host is down |
| EHOSTUNREACH | 113 | No route to host |
| EALREADY | 114 | Operation already in progress |
| EINPROGRESS | 115 | Operation now in progress |
| ESTALE | 116 | Stale file handle |
| EUCLEAN | 117 | Structure needs cleaning |
| ENOTNAM | 118 | Not a XENIX named type file |
| ENAVAIL | 119 | No XENIX semaphores available |
| EISNAM | 120 | Is a named type file |
| EREMOTEIO | 121 | Remote I/O error |
| EDQUOT | 122 | Disk quota exceeded |
| ENOMEDIUM | 123 | No medium found |
| EMEDIUMTYPE | 124 | Wrong medium type |
| ECANCELED | 125 | Operation canceled |
| ENOKEY | 126 | Required key not available |
| EKEYEXPIRED | 127 | Key has expired |
| EKEYREVOKED | 128 | Key has been revoked |
| EKEYREJECTED | 129 | Key was rejected by service |
| EOWNERDEAD | 130 | Owner died |
| ENOTRECOVERABLE | 131 | State not recoverable |
| ERFKILL | 132 | Operation not possible due to RF-kill |
| EHWPOISON | 133 | Memory page has hardware error |
| ENOTSUP | 95 | Operation not supported |
4. 错误码列表生成程序(待优化/待注释)
代码如下(运行前提:必须安装了 ‘errno’ 命令,即上述的步骤 1 和 2 ):
/* test1.c */
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
int getALine(int, char *);
void handleALine(char *aLine, char *resStr, int *resStrLen);
void main(){
char buf_ALine[512];
char buf_HandledALine[512];
int len;
// 将命令‘errno -ls’输出重定向到文件‘data.txt’,
system("errno -ls > data.txt");
int so = open("data.txt", O_RDONLY);
int de = open("error_code.txt", O_WRONLY | O_CREAT | O_TRUNC | O_APPEND, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
char a[] = "|宏名称|错误代码|描述|\n";
char b[] = "|:--|:--:|:--|\n";
write(de, a, sizeof(a) - 1);
write(de, b, sizeof(b) - 1);
while(getALine(so, buf_ALine) > 0){
handleALine(buf_ALine, buf_HandledALine, &len);
// write to de
if(write(de, buf_HandledALine, len) != len){
printf("error: write file failed.\n");
exit(EXIT_FAILURE);
}
}
close(so);
close(de);
}
void handleALine(char *aLine, char *resStr, int *resStrLen){
// printf("%s", aLine);
// init
*resStrLen = 0;
char *pstr = aLine;
char *rstr = resStr;
*rstr++ = '|';
(*resStrLen)++;
int count = 0; // max 2
char pchar = -1;
char cchar;
while(*pstr != '\n'){
cchar = *pstr;
if(*resStrLen > 0){
pchar = *(pstr - 1);
}
if(pchar == ' ' && cchar >= '0' && cchar <= '9' && count < 2){
*rstr++ = '|';
(*resStrLen)++;
count++;
}else if(pchar >= '0' && pchar <= '9' && cchar == ' ' && count < 2){
*rstr++ = '|';
(*resStrLen)++;
count++;
}
*rstr++ = *pstr++;
(*resStrLen)++;
}
*rstr++ = '|';
*rstr = '\n';
(*resStrLen) += 2;
}
int getALine(int fd, char *buf){
int count = 0;
char *ptr = buf;
int res;
char c;
do{
res = read(fd, &c, 1);
if(res == 0){
// EOF
*ptr++ = '\n';
break;
}else if(res == 1){
*ptr++ = c;
count++;
}else{
// error
printf("error: getALine failed.\n");
exit(EXIT_FAILURE);
}
}while(c != '\n');
//
*ptr = '\0';
return count;
}
版权声明:本文为SLN2432713617原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。