博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux errno详解
阅读量:7097 次
发布时间:2019-06-28

本文共 13294 字,大约阅读时间需要 44 分钟。

1. 错误码 / errno

Linux中系统调用的错误都存储于 errno中,errno由操作系统维护,存储就近发生的错误,即下一次的错误码会覆盖掉上一次的错误。

PS: 只有当系统调用或者调用lib函数时出错,才会置位errno

查看系统中所有的errno所代表的含义,可以采用如下的代码:

/* Function: obtain the errno string*   char *strerror(int errno)*/#include 
#include
//for strerror()//#include
int main(){ int tmp = 0; for(tmp = 0; tmp <=256; tmp++) { printf("errno: %2d\t%s\n",tmp,strerror(tmp)); } return 0;}

输出信息如下:

errno:  0       Successerrno:  1       Operation not permittederrno:  2       No such file or directoryerrno:  3       No such processerrno:  4       Interrupted system callerrno:  5       Input/output errorerrno:  6       No such device or addresserrno:  7       Argument list too longerrno:  8       Exec format errorerrno:  9       Bad file descriptorerrno: 10       No child processeserrno: 11       Resource temporarily unavailableerrno: 12       Cannot allocate memoryerrno: 13       Permission deniederrno: 14       Bad addresserrno: 15       Block device requirederrno: 16       Device or resource busyerrno: 17       File existserrno: 18       Invalid cross-device linkerrno: 19       No such deviceerrno: 20       Not a directoryerrno: 21       Is a directoryerrno: 22       Invalid argumenterrno: 23       Too many open files in systemerrno: 24       Too many open fileserrno: 25       Inappropriate ioctl for deviceerrno: 26       Text file busyerrno: 27       File too largeerrno: 28       No space left on deviceerrno: 29       Illegal seekerrno: 30       Read-only file systemerrno: 31       Too many linkserrno: 32       Broken pipeerrno: 33       Numerical argument out of domainerrno: 34       Numerical result out of rangeerrno: 35       Resource deadlock avoidederrno: 36       File name too longerrno: 37       No locks availableerrno: 38       Function not implementederrno: 39       Directory not emptyerrno: 40       Too many levels of symbolic linkserrno: 41       Unknown error 41errno: 42       No message of desired typeerrno: 43       Identifier removederrno: 44       Channel number out of rangeerrno: 45       Level 2 not synchronizederrno: 46       Level 3 haltederrno: 47       Level 3 reseterrno: 48       Link number out of rangeerrno: 49       Protocol driver not attachederrno: 50       No CSI structure availableerrno: 51       Level 2 haltederrno: 52       Invalid exchangeerrno: 53       Invalid request descriptorerrno: 54       Exchange fullerrno: 55       No anodeerrno: 56       Invalid request codeerrno: 57       Invalid sloterrno: 58       Unknown error 58errno: 59       Bad font file formaterrno: 60       Device not a streamerrno: 61       No data availableerrno: 62       Timer expirederrno: 63       Out of streams resourceserrno: 64       Machine is not on the networkerrno: 65       Package not installederrno: 66       Object is remoteerrno: 67       Link has been severederrno: 68       Advertise errorerrno: 69       Srmount errorerrno: 70       Communication error on senderrno: 71       Protocol errorerrno: 72       Multihop attemptederrno: 73       RFS specific errorerrno: 74       Bad messageerrno: 75       Value too large for defined data typeerrno: 76       Name not unique on networkerrno: 77       File descriptor in bad stateerrno: 78       Remote address changederrno: 79       Can not access a needed shared libraryerrno: 80       Accessing a corrupted shared libraryerrno: 81       .lib section in a.out corruptederrno: 82       Attempting to link in too many shared librarieserrno: 83       Cannot exec a shared library directlyerrno: 84       Invalid or incomplete multibyte or wide charactererrno: 85       Interrupted system call should be restartederrno: 86       Streams pipe errorerrno: 87       Too many userserrno: 88       Socket operation on non-socketerrno: 89       Destination address requirederrno: 90       Message too longerrno: 91       Protocol wrong type for socketerrno: 92       Protocol not availableerrno: 93       Protocol not supportederrno: 94       Socket type not supportederrno: 95       Operation not supportederrno: 96       Protocol family not supportederrno: 97       Address family not supported by protocolerrno: 98       Address already in useerrno: 99       Cannot assign requested addresserrno: 100      Network is downerrno: 101      Network is unreachableerrno: 102      Network dropped connection on reseterrno: 103      Software caused connection aborterrno: 104      Connection reset by peererrno: 105      No buffer space availableerrno: 106      Transport endpoint is already connectederrno: 107      Transport endpoint is not connectederrno: 108      Cannot send after transport endpoint shutdownerrno: 109      Too many references: cannot spliceerrno: 110      Connection timed outerrno: 111      Connection refusederrno: 112      Host is downerrno: 113      No route to hosterrno: 114      Operation already in progresserrno: 115      Operation now in progresserrno: 116      Stale file handleerrno: 117      Structure needs cleaningerrno: 118      Not a XENIX named type fileerrno: 119      No XENIX semaphores availableerrno: 120      Is a named type fileerrno: 121      Remote I/O errorerrno: 122      Disk quota exceedederrno: 123      No medium founderrno: 124      Wrong medium typeerrno: 125      Operation cancelederrno: 126      Required key not availableerrno: 127      Key has expirederrno: 128      Key has been revokederrno: 129      Key was rejected by serviceerrno: 130      Owner diederrno: 131      State not recoverableerrno: 132      Operation not possible due to RF-killerrno: 133      Memory page has hardware errorerrno: 134~255  unknown error!

Linux中,在头文件 /usr/include/asm-generic/errno-base.h 对基础常用errno进行了宏定义

#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 */#endif

/usr/include/asm-asm-generic/errno.h 中,对剩余的errno做了宏定义

#ifndef _ASM_GENERIC_ERRNO_H#define _ASM_GENERIC_ERRNO_H#include 
#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 */#endif

2. 打印错误信息

1). 打印错误信息 / perror

  • 作用
    打印系统错误信息
  • 头文件

    #include 
  • 函数原型

    void perror(const char *s)
  • 参数

    s: 字符串提示符

  • 输出形式
    const char *s: strerror(errno) //提示符:发生系统错误的原因
  • 返回值

    无返回值

2). 字符串显示错误信息 / strerror

  • 作用
    将错误码以字符串的信息显示出来
  • 头文件

    #include 
  • 函数原型

    char *strerror(int errnum);
  • 参数

    errnum: 即errno

  • 返回值
    返回错误码字符串信息

转载于:https://www.cnblogs.com/Jimmy1988/p/7485133.html

你可能感兴趣的文章
第三个阶段事后诸葛亮
查看>>
java中的sql语句中如果有like怎么写
查看>>
【原创】驱动加载之StartService
查看>>
1751: [Usaco2005 qua]Lake Counting
查看>>
【BZOJ】4753: [Jsoi2016]最佳团体 01分数规划+树上背包
查看>>
iOS 获取设备信息之UIDevice的使用,Swift 基于 API
查看>>
IntelliJ cannot log in to GitHub上传github报错解决
查看>>
MySQL强制性操作
查看>>
对称密码-分组密码-AES
查看>>
腾讯地图点击地图创建锚点(且只创建一个)同事创建锚点提示
查看>>
洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication(最小割)
查看>>
洛谷P3396 哈希冲突(分块)
查看>>
优化Mysql数据库的8个方法
查看>>
Centos7下用户登录失败N次后锁定用户禁止登陆的方法
查看>>
开源许可协议简介
查看>>
程序性能优化的3个级别
查看>>
有的日期输入框,可直接调用javascripts
查看>>
手工创建表控制条目
查看>>
poj 2109 -- Power of Cryptography
查看>>
通过Navicat for MySQL远程连接的时候报错mysql 1130的解决方法
查看>>