转载_linux的errno定义

本文详细介绍了 Linux 系统中 errno 错误代码的含义及用途,从 EPERM 到 EMEDIUMTYPE,共列举了 124 种错误类型。这些错误代码有助于开发者理解并解决在 Linux 环境下遇到的各种问题。

linux 的errno定义,头文件#include  <errno.h>

  124 EMEDIUMTYPE   Wrong medium type

  123 ENOMEDIUM     No medium found

  122 EDQUOT        Disk quota exceeded

  121 EREMOTEIO     Remote I/O error

  120 EISNAM        Is a named type file

  119 ENAVAIL       No XENIX semaphores available

  118 ENOTNAM       Not a XENIX named type file

  117 EUCLEAN       Structure needs cleaning

  116 ESTALE        Stale NFS file handle

  115 EINPROGRESS  +Operation now in progress

  114 EALREADY      Operation already in progress

  113 EHOSTUNREACH  No route to host

  112 EHOSTDOWN     Host is down

  111 ECONNREFUSED  Connection refused

  110 ETIMEDOUT    +Connection timed out

  109 ETOOMANYREFS  Too many references: cannot splice

  108 ESHUTDOWN     Cannot send after transport endpoint shutdown

  107 ENOTCONN      Transport endpoint is not connected

  106 EISCONN       Transport endpoint is already connected

  105 ENOBUFS       No buffer space available

  104 ECONNRESET    Connection reset by peer

  103 ECONNABORTED  Software caused connection abort

  102 ENETRESET     Network dropped connection on reset

  101 ENETUNREACH   Network is unreachable

  100 ENETDOWN      Network is down

  99 EADDRNOTAVAIL Cannot assign requested address

  98 EADDRINUSE    Address already in use

  97 EAFNOSUPPORT  Address family not supported by protocol

  96 EPFNOSUPPORT  Protocol family not supported

  95 EOPNOTSUPP    Operation not supported

  94 ESOCKTNOSUPPORT Socket type not supported

  93 EPROTONOSUPPORT Protocol not supported

  92 ENOPROTOOPT   Protocol not available

  91 EPROTOTYPE    Protocol wrong type for socket

  90 EMSGSIZE     +Message too long

  89 EDESTADDRREQ  Destination address required

  88 ENOTSOCK      Socket operation on non-socket

  87 EUSERS        Too many users

  86 ESTRPIPE      Streams pipe error

  85 ERESTART      Interrupted system call should be restarted

  84 EILSEQ        Invalid or incomplete multibyte or wide character

  83 ELIBEXEC      Cannot exec a shared library directly

  82 ELIBMAX       Attempting to link in too many shared libraries

  81 ELIBSCN       .lib section in a.out corrupted

  80 ELIBBAD       Accessing a corrupted shared library

  79 ELIBACC       Can not access a needed shared library

  78 EREMCHG       Remote address changed

  77 EBADFD        File descriptor in bad state

  76 ENOTUNIQ      Name not unique on network

  75 EOVERFLOW     Value too large for defined data type

  74 EBADMSG      +Bad message

  73 EDOTDOT       RFS specific error

  72 EMULTIHOP     Multihop attempted

  71 EPROTO        Protocol error

  70 ECOMM         Communication error on send

  69 ESRMNT        Srmount error

  68 EADV          Advertise error

  67 ENOLINK       Link has been severed

  66 EREMOTE       Object is remote

  65 ENOPKG        Package not installed

  64 ENONET        Machine is not on the network

  63 ENOSR         Out of streams resources

  62 ETIME         Timer expired

  61 ENODATA       No data available

  60 ENOSTR        Device not a stream

  59 EBFONT        Bad font file format

  57 EBADSLT       Invalid slot

  56 EBADRQC       Invalid request code

  55 ENOANO        No anode

  54 EXFULL        Exchange full

  53 EBADR         Invalid request descriptor

  52 EBADE         Invalid exchange

  51 EL2HLT        Level 2 halted

  50 ENOCSI        No CSI structure available

  49 EUNATCH       Protocol driver not attached

  48 ELNRNG        Link number out of range

  47 EL3RST        Level 3 reset

  46 EL3HLT        Level 3 halted

  45 EL2NSYNC      Level 2 not synchronized

  44 ECHRNG        Channel number out of range

  43 EIDRM         Identifier removed

  42 ENOMSG        No message of desired type

  40 ELOOP         Too many levels of symbolic links

  39 ENOTEMPTY    +Directory not empty

  38 ENOSYS       +Function not implemented

  37 ENOLCK       +No locks available

  36 ENAMETOOLONG +File name too long

  35 EDEADLK      +Resource deadlock avoided

  34 ERANGE       +Numerical result out of range

  33 EDOM         +Numerical argument out of domain

  32 EPIPE        +Broken pipe

  31 EMLINK       +Too many links

  30 EROFS        +Read-only file system

  29 ESPIPE       +Illegal seek

  28 ENOSPC       +No space left on device

  27 EFBIG        +File too large

  26 ETXTBSY       Text file busy

  25 ENOTTY       +Inappropriate ioctl for device

  24 EMFILE       +Too many open files

  23 ENFILE       +Too many open files in system

  22 EINVAL       +Invalid argument

  21 EISDIR       +Is a directory

  20 ENOTDIR      +Not a directory

  19 ENODEV       +No such device

  18 EXDEV        +Invalid cross-device link

  17 EEXIST       +File exists

  16 EBUSY        +Device or resource busy

  15 ENOTBLK       Block device required

  14 EFAULT       +Bad address

  13 EACCES       +Permission denied

  12 ENOMEM       +Cannot allocate memory

  11 EAGAIN       +Resource temporarily unavailable

  10 ECHILD       +No child processes

  9 EBADF        +Bad file descriptor

  8 ENOEXEC      +Exec format error

  7 E2BIG        +Argument list too long

  6 ENXIO        +No such device or address

  5 EIO          +Input/output error

  4 EINTR        +Interrupted system call

  3 ESRCH        +No such process

  2 ENOENT       +No such file or directory

  1 EPERM        +Operation not permitted

  0                    Success

Linux系统中,`errno` 是一个全局变量,通常用于存储最近一次系统调用或库函数执行失败时的错误代码。它定义在 `<errno.h>` 头文件中,并且每个错误代码都有一个对应的宏名称,便于程序开发者理解和处理错误情况。 ### errno 错误代码的定义 当系统调用或库函数发生错误时,`errno` 会被设置为一个非零值以表示具体的错误类型。成功执行时,`errno` 的值不会被修改,因此不能依赖其值来判断是否发生了错误。只有在函数返回错误状态时,`errno` 才具有有效的意义。 例如,在使用 `open()` 函数打开文件失败时,可以通过检查 `errno` 的值来确定具体的错误原因: ```c #include <fcntl.h> #include <errno.h> #include <stdio.h> int main() { int fd = open("nonexistent_file", O_RDONLY); if (fd == -1) { switch(errno) { case ENOENT: printf("Error: File does not exist.\n"); break; case EACCES: printf("Error: Permission denied.\n"); break; default: printf("Error: Unknown error occurred.\n"); } } return 0; } ``` ### 常见的 errno 错误代码及其含义 以下是一些常见的 `errno` 错误代码及其描述: - **EAGAIN** (Resource temporarily unavailable) 表示资源暂时不可用,常用于非阻塞操作中。 - **EBADF** (Bad file descriptor) 文件描述符无效或未打开。 - **EFAULT** (Bad address) 指针指向了非法地址空间。 - **EINVAL** (Invalid argument) 提供了无效的参数。 - **ENOENT** (No such file or directory) 文件或目录不存在。 - **ENOMEM** (Cannot allocate memory) 内存不足,无法完成请求的操作。 - **ENOSPC** (No space left on device) 设备上没有足够的空间。 - **EPIPE** (Broken pipe) 管道写端关闭后尝试写入。 - **EIO** (Input/output error) 发生了底层I/O错误。 - **EINTR** (Interrupted system call) 系统调用被信号中断。 - **EROFS** (Read-only file system) 尝试修改只读文件系统中的文件。 - **ETIMEDOUT** (Connection timed out) 连接超时。 这些错误代码可以在 `/usr/include/asm-generic/errno-base.h` 和 `/usr/include/asm-generic/errno.h` 文件中找到完整的定义列表。 ### 如何查询 errno 错误代码 可以通过命令行工具 `errno` 来查询特定错误代码的含义。例如,要查找 `ENOENT` 的具体信息,可以运行: ```bash errno ENOENT ``` 这将输出类似以下的信息: ``` ENOENT 2 No such file or directory ``` 此外,也可以通过 `strerror()` 函数将错误代码转换为可读性更好的字符串描述: ```c #include <errno.h> #include <stdio.h> #include <string.h> int main() { FILE *fp = fopen("nonexistent_file", "r"); if (!fp) { printf("Error: %s\n", strerror(errno)); } return 0; } ``` ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值