linux 退出码 / 状态码 / 错误码 对照表

这篇博客详细介绍了Linux系统中errno.h头文件和asm-generic目录下errno-base.h及errno.h中定义的错误码,包括从EPERM到EHWPOISON的完整列表。文章通过示例代码展示了如何使用strerror函数查询错误码对应的错误描述字符串。内容涵盖了错误码的含义、使用场景以及查询方法,是理解Linux错误处理机制的重要参考资料。
摘要由CSDN通过智能技术生成

errno 在 <errno.h> 中定义,错误 Exx 的宏定义在 /usr/include/asm-generic 文件夹下面的 errno-base.h 和 errno.h,分别定义了 1-34 、35-132 的错误定义。

如何查询状态码含义?

头文件:#include <string.h>
定义函数:char * strerror(int errnum);
函数说明:strerror()用来依参数errnum 的错误代码来查询其错误原因的描述字符串, 然后将该字符串指针返回.
返回值:返回描述错误原因的字符串指针.

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main() {
    for (int i = 0; i <= 256; i++)
        printf("%d : %s\n", i, strerror(i));
}

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

头文件/usr/include/asm-generic/erno.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 */
  
#endif
### 回答1: HTTP/HTTPS协议中,415错误状态码表示不支持的媒体类型。在向服务器发起POST请求时,需要在请求头中明确指定Content-Type字段,以告知服务器请求体的格式类型。如果请求体格式与预期不符,服务器将返回415错误状态码。 造成415错误状态码的原因可能有以下几种情况: 1.请求头中的Content-Type字段值不正确或者缺失。服务器无法识别请求体的格式类型,所以无法处理该请求,返回错误状态码。 2.请求体格式与Content-Type指定的格式类型不一致。请求头中Content-Type字段指定了请求体的格式类型,而请求体格式和Content-Type指定的格式类型不一致,导致服务器无法正确解析请求体,返回错误状态码。 3.请求体中包含的数据错误。如果请求体中包含的数据格式不规范或者不符合服务器的要求,则服务器无法处理该请求,返回错误状态码。 解决这些问题的方法为: 1.确保请求头中的Content-Type字段值正确,指定了请求体的格式类型。 2.检查请求体格式是否与Content-Type指定的格式类型一致。 3.确认请求体中的数据格式规范,并符合服务器的要求。 可以使用网络调试工具(如Postman、Fiddler等)来进行相关测试,并对请求头和请求体进行相关调整,以确保请求能够被正确处理。 ### 回答2: HTTP状态码是在网页请求和响应过程中,Web服务器告知客户端的状态标识。其中,415状态码代表请求格式不被服务器支持。也就是客户端发送了一个格式错误的请求,但是Web服务器不能处理这样的请求。 一般而言,在HTTP/HTTPS POST请求时,传递的数据都是经过编后才能被发送到服务器的。如果客户端发送的编格式与服务器无法处理的格式不符合,那么服务器就会返回415状态码,告诉客户端请求无法被处理。以下是几种常见的引起415错误状态码的原因: 1. 传递的编格式不正确。例如,客户端使用xml格式传递数据,而服务器只支持json格式。 2. 传递的编格式过期或已被废弃。例如,客户端使用text/xml传递数据,而服务器只支持application/xml。 3. 传递的请求头不正确。例如,客户端没有指定Content-Type头,或者指定的头与实际传递的数据格式不符合。 如何解决415错误状态码呢? 1. 确认请求的Content-Type与服务器支持的格式一致。 2. 确认请求头中的Content-Type正确。 3. 通过修改客户端的请求格式或者升级服务器的处理能力,使其支持客户端发送的请求格式。 总之,出现415错误状态码时,需要仔细分析错误的原因,并采取相应的解决方案。只有确保请求格式正确、协议支持一致,才能避免这种错误的出现。 ### 回答3: 对于出现http/https post请求返回415错误状态码问题,这是由于客户端请求发送的实体类型与服务器所支持的实体类型不一致所导致的。下面我们来详细分析该错误状态码的原因和解决方法: 1. 原因: 客户端请求发送的实体类型不受服务器支持,一般原因如下: (1) Content-Type请求头的值不正确:客户端要向服务器提交数据时,需要指定请求头 Content-Type,但是请求头中指定的 Content-Type 值不正确,与服务器支持的实体类型不一致,导致服务器无法解析客户端提交的数据。 (2) 服务器未能识别请求的方法或内容:在使用服务器提供的API时,如果请求的方法或请求的内容格式不正确,就会产生 415 错误码。 2. 解决办法: 要解决该问题,需要从以下几个方面入手: (1) 检查请求头 Content-Type 值:客户端需要确保请求头中的 Content-Type 值与服务器支持的实体类型一致,例如,如果要提交的是一个 XML 数据,那么在请求头 Content-Type 中设置 application/xml。 (2) 检查提交的数据格式: 一般的解决方法是检查提交的数据格式是否正确,如果格式正确,那么很可能是 Content-Type 值不正确,需要修改 Content-Type 值;如果提交的数据格式不正确,则需要修改数据格式。 (3) 检查请求方法:处理请求时,服务器会根据HTTP请求头信息来判断请求方式,因此应该检查提交的数据格式是否与请求方式相匹配。 总之,如果出现 http/https post请求返回 415 错误状态码,我们可以先检查请求头 Content-Type 值和请求方法是否正确,以解决该问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪的期许

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值