#include<errno.h> 包含这个头文件就可以使用errno这个错误码了,一般在库调用或者系统调用时,当出错就会把相应的错误码写到errno中。如果没错的话就不会去修改errno。所以可以根据errno来判断究竟是在哪一步出问题了。
经常在调用linux 系统api 的时候会出现一些错误,比方说使用open() write() creat()之类的函数有些时候会返回-1,也就是调用失败,这个时候往往需要知道失败的原因。这个时候使用errno这个全局变量就相当有用了。
二、 把errno的数字转换成相应的文字说明
1、 使用strerror函数
- 函数原型:
char * strerror(int errno)
- 使用方法:
fprintf(stderr, "%s", strerror(errno));
- 通过标准错误的标号,获得错误的描述字符串 ,将单纯的错误标号转为字符串描述,方便用户查找错误。
2、 使用perror函数
- 函数原型:
void perror(const char *s)
- 使用说明
参数s指定的字符串是要先打印出来的信息,可以由我么自己定义,然后系统会在s字符串后加上错误原因的字符串。
#defineEPERM 1 /* Operation not permitted */操作不允许
#define ENOENT 2 /* Nosuch file or directory */文件/路径不存在
#define ESRCH 3 /* Nosuch process */进程不存在
#define EINTR 4 /*Interrupted system call */中断的系统调用
#define EIO 5 /* I/Oerror */I/O错误
#define ENXIO 6 /* Nosuch device or address */设备/地址不存在
#define E2BIG 7 /* Arglist too long */参数列表过长
#define ENOEXEC 8 /*Exec format error */执行格式错误
#define EBADF 9 /* Badfile number */错误文件编号
#define ECHILD 10 /* Nochild processes */子进程不存在
#define EAGAIN 11 /* Tryagain */重试
#define ENOMEM 12 /* Outof memory */内存不足
#define EACCES 13 /*Permission denied */无权限
#define EFAULT 14 /* Badaddress */地址错误
#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 /* Nosuch device */设备不存在
#define ENOTDIR 20 /*Not a directory */路径不存在
#define EISDIR 21 /* Isa directory */是路径
#define EINVAL 22 /*Invalid argument */无效参数
#define ENFILE 23 /*File table overflow */文件表溢出
#define EMFILE 24 /* Toomany open files */打开的文件过多
#define ENOTTY 25 /* Nota typewriter */非打字机
#define ETXTBSY 26 /*Text file busy */文本文件忙
#define EFBIG 27 /* Filetoo large */文件太大
#define ENOSPC 28 /* Nospace left on device */设备无空间
#define ESPIPE 29 /*Illegal seek */非法查询
#define EROFS 30 /*Read-only file system */只读文件系统
#define EMLINK 31 /* Toomany links */链接太多
#define EPIPE 32 /*Broken pipe */管道破裂
#define EDOM 33 /* Mathargument out of domain of func */参数超出函数域
#define ERANGE 34 /*Math result not representable */结果无法表示
#define EDEADLK 35 /*Resource deadlock would occur */资源将发生死锁
#define ENAMETOOLONG 36/* File name too long */文件名太长
#define ENOLCK 37 /* Norecord locks available */没有可用的记录锁
#define ENOSYS 38 /*Function not implemented */函数未实现
#define ENOTEMPTY 39 /*Directory not empty */目录非空
#define ELOOP 40 /* Toomany symbolic links encountered */遇到太多符号链接
#define EWOULDBLOCKEAGAIN /* Operation would block */操作会阻塞
#define ENOMSG 42 /* Nomessage of desired type */没有符合需求类型的消息
#define EIDRM 43 /*Identifier removed */标识符已删除
#define ECHRNG 44 /*Channel number out of range */通道编号超出范围
#define EL2NSYNC 45 /*Level 2 not synchronized */level2不同步
#define EL3HLT 46 /*Level 3 halted */3级停止
#define EL3RST 47 /*Level 3 reset */3级重置
#define ELNRNG 48 /*Link number out of range */链接编号超出范围
#define EUNATCH 49 /*Protocol driver not attached */协议驱动程序没有连接
#define ENOCSI 50 /* NoCSI structure available */没有可用的CSI结构
#define EL2HLT 51 /*Level 2 halted */2级停止
#define EBADE 52 /*Invalid exchange */无效交换
#define EBADR 53 /*Invalid request descriptor */无效请求描述
#define EXFULL 54 /*Exchange full */交换完全
#define ENOANO 55 /* Noanode */无阳极
#define EBADRQC 56 /*Invalid request code */无效请求码
#define EBADSLT 57 /*Invalid slot */无效插槽
#define EDEADLOCKEDEADLK
#define EBFONT 59 /* Badfont file format */错误的字体文件格式
#define ENOSTR 60 /*Device not a stream */设备不是流
#define ENODATA 61 /* Nodata available */无数据
#define ETIME 62 /*Timer expired */计时器到期
#define ENOSR 63 /* Outof 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 */RFS特定错误
#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 */库部分在a.out损坏
#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 /* Toomany 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 EPROTONOSUPPORT93 /* Protocol not supported */不支持协议
#define ESOCKTNOSUPPORT94 /* 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 NFS 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 /* Isa 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 */