您的位置:首页 > 编程语言

IO出错常用错误代码

2016-07-05 23:01 204 查看
在Linux文件操作以及更底层的IO操作出错的情况下,经常会为该如何返回合适的错误代码而纠结。另外在阅读代码的时候,可能会碰到很多种错误代码,因为不明白它的含义而迷惑。为此,有必要归纳整理一下常见的所有的出错代码及其对应的含义,既方便阅读代码时参考,又便于自己正确选用。

显然因为这些代码大都处在用户态,可能会有多个进程或者线程会用到它,因此通常把它们归纳一起放在同一个头文件里。在笔者的Linux中系统中,目前用到的宏的定义在下面的头文件里:

/usr/include/asm-generic/errno-base.h:
#ifndef
_ASM_GENERIC_ERRNO_BASE_H
#define
_ASM_GENERIC_ERRNO_BASE_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 /* Argument 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 */

此外,/usr/include/asm-generic/errno.h还有一部分常用到的出错代码在这里定义,可以看到它和上面定义的错误代码的代码是统一编号的。

#ifndef
_ASM_GENERIC_ERRNO_H
#define
_ASM_GENERIC_ERRNO_H

#include
<asm-generic/errno-base.h>

#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 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 */
#define
ECANCELED 125 /* Operation Canceled */
#define
ENOKEY 126 /* Required key not available */
#define
EKEYEXPIRED 127 /* Key has expired */
#define
EKEYREVOKED 128 /* Key has been revoked */
#define
EKEYREJECTED 129 /* Key was rejected by service */

/*
for robust mutexes */
#define
EOWNERDEAD 130 /* Owner died */
#define
ENOTRECOVERABLE 131 /* State not recoverable */
#define
ERFKILL 132 /* Operation not possible due to RF-kill */
#define
EHWPOISON 133 /* Memory page has hardware error */

通过上面列举出来的所有文件和IO操作相关的错误代码可以看到,种类很多,数量不小,在我们实际的工程项目中,必须结合具体业务场景选则合适的错误代码,既要保证代码的含义和真是场景吻合,又要避免在不同的场景中使用了相同的错误代码。

本文出自 “存储之厨” 博客,请务必保留此出处http://xiamachao.blog.51cto.com/10580956/1796116
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: