错误信息errno

在Linux/Unix系统中,系统调用时会将执行后的附加信息(错误)存入整形变量errno。errno由操作系统维护,存储就近发生的错误码,并且下一次会覆盖上一次的值,故使用时仅在调用出错时检验输出其值。

注意:

如果没有出错,则errno的值不会被一个例程清除。

任一函数都不会将errno的值设置为0,在<errno.h>中定义的所有常量都不为0。

每个线程都有属于它自己的局部 errno 以避免一个线程干扰另一个线程。

#include <string.h>

char *strerror(int errnum);   //strerror根据输入的errno值返回对应的描述信息

#include <stdio.h>

void perror(const char *msg); //perror会直接输出:msg 指向的字符串+冒号+空格+当前errno 值的出错信息+换行符

头文件:<errno.h>

errno对应值:

  • 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 <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 */
  • #endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值