linux应用编程异常处理

本文详细介绍了Linux系统中errno枚举定义,包括各种错误代码及其含义,如权限问题、文件不存在等。同时,讲解了如何通过perror和strerror函数查看和处理错误信息。通过对errno的了解,开发者可以更好地进行异常处理和错误排查。
摘要由CSDN通过智能技术生成

一、介绍
Linux中系统调用的错误都存储于 errno中,errno由操作系统维护,存储就近发生的错误,即下一次的错误码会覆盖掉上一次的错误。
异常处理主要是对errno值然后做相应的处理

errno的枚举定义
文件系统/usr/include/asm-generic/errno-base.h
定义1-34
在这里插入图片描述

文件系统/usr/include/asm-generic/errno.h
定义35-133
在这里插入图片描述

errno:  0	Success
errno:  1	Operation not permitted
errno:  2	No such file or directory
errno:  3	No such process
errno:  4	Interrupted system call
errno:  5	Input/output error
errno:  6	No such device or address
errno:  7	Argument list too long
errno:  8	Exec format error
errno:  9	Bad file descriptor
errno: 10	No child processes
errno: 11	Resource temporarily unavailable
errno: 12	Cannot allocate memory
errno: 13	Permission denied
errno: 14	Bad address
errno: 15	Block device required
errno: 16	Device or resource busy
errno: 17	File exists
errno: 18	Invalid cross-device link
errno: 19	No such device
errno: 20	Not a directory
errno: 21	Is a directory
errno: 22	Invalid argument
errno: 23	Too many open files in system
errno: 24	Too many open files
errno: 25	Inappropriate ioctl for device
errno: 26	Text file busy
errno: 27	File too large
errno: 28	No space left on device
errno: 29	Illegal seek
errno: 30	Read-only file system
errno: 31	Too many links
errno: 32	Broken pipe
errno: 33	Numerical argument out of domain
errno: 34	Numerical result out of range
errno: 35	Resource deadlock avoided
errno: 36	File name too long
errno: 37	No locks available
errno: 38	Function not implemented
errno: 39	Directory not empty
errno: 40	Too many levels of symbolic links
errno: 41	Unknown error 41
errno: 42	No message of desired type
errno: 43	Identifier removed
errno: 44	Channel number out of range
errno: 45	Level 2 not synchronized
errno: 46	Level 3 halted
errno: 47	Level 3 reset
errno: 48	Link number out of range
errno: 49	Protocol driver not attached
errno: 50	No CSI structure available
errno: 51	Level 2 halted
errno: 52	Invalid exchange
errno: 53	Invalid request descriptor
errno: 54	Exchange full
errno: 55	No anode
errno: 56	Invalid request code
errno: 57	Invalid slot
errno: 58	Unknown error 58
errno: 59	Bad font file format
errno: 60	Device not a stream
errno: 61	No data available
errno: 62	Timer expired
errno: 63	Out of streams resources
errno: 64	Machine is not on the network
errno: 65	Package not installed
errno: 66	Object is remote
errno: 67	Link has been severed
errno: 68	Advertise error
errno: 69	Srmount error
errno: 70	Communication error on send
errno: 71	Protocol error
errno: 72	Multihop attempted
errno: 73	RFS specific error
errno: 74	Bad message
errno: 75	Value too large for defined data type
errno: 76	Name not unique on network
errno: 77	File descriptor in bad state
errno: 78	Remote address changed
errno: 79	Can not access a needed shared library
errno: 80	Accessing a corrupted shared library
errno: 81	.lib section in a.out corrupted
errno: 82	Attempting to link in too many shared libraries
errno: 83	Cannot exec a shared library directly
errno: 84	Invalid or incomplete multibyte or wide character
errno: 85	Interrupted system call should be restarted
errno: 86	Streams pipe error
errno: 87	Too many users
errno: 88	Socket operation on non-socket
errno: 89	Destination address required
errno: 90	Message too long
errno: 91	Protocol wrong type for socket
errno: 92	Protocol not available
errno: 93	Protocol not supported
errno: 94	Socket type not supported
errno: 95	Operation not supported
errno: 96	Protocol family not supported
errno: 97	Address family not supported by protocol
errno: 98	Address already in use
errno: 99	Cannot assign requested address
errno: 100	Network is down
errno: 101	Network is unreachable
errno: 102	Network dropped connection on reset
errno: 103	Software caused connection abort
errno: 104	Connection reset by peer
errno: 105	No buffer space available
errno: 106	Transport endpoint is already connected
errno: 107	Transport endpoint is not connected
errno: 108	Cannot send after transport endpoint shutdown
errno: 109	Too many references: cannot splice
errno: 110	Connection timed out
errno: 111	Connection refused
errno: 112	Host is down
errno: 113	No route to host
errno: 114	Operation already in progress
errno: 115	Operation now in progress
errno: 116	Stale file handle
errno: 117	Structure needs cleaning
errno: 118	Not a XENIX named type file
errno: 119	No XENIX semaphores available
errno: 120	Is a named type file
errno: 121	Remote I/O error
errno: 122	Disk quota exceeded
errno: 123	No medium found
errno: 124	Wrong medium type
errno: 125	Operation canceled
errno: 126	Required key not available
errno: 127	Key has expired
errno: 128	Key has been revoked
errno: 129	Key was rejected by service
errno: 130	Owner died
errno: 131	State not recoverable
errno: 132	Operation not possible due to RF-kill
errno: 133	Memory page has hardware error
errno: 134	Unknown error
...
errto: 255- Unknown error

二、使用方法
1、查看错误宏定义
使用函数
1)打印错误信息 / perror
作用:
打印系统错误信息
头文件:
#include <stdio.h>
函数原型:
void perror(const char *s)
参数:
s: 字符串提示符
输出形式:
const char *s: strerror(errno) //提示符:发生系统错误的原因
返回值:
无返回值

2)字符串显示错误信息 / strerror
作用:
将错误码以字符串的信息显示出来
头文件:
#include <string.h>
函数原型:
char *strerror(int errnum);
参数:
errnum: 即errno
返回值:
返回错误码字符串信息

#include <stdio.h>
#include <string.h>     //for strerror()
#include <errno.h>

int main()
{
    int tmp = 0;
    for(tmp = 0; tmp <=256; tmp++)
    {
        printf("errno: %2d\t%s\n",tmp,strerror(tmp));
    }
    return 0;
}

在这里插入图片描述

2、根据错误信息异常处理
添加头文件
#include <errno.h>

...
if(errno == ENOENT)
{
	//错误处理
	//---
}
...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值