Linux错误处理与错误号

Linux错误处理与错误号


每天只要进步一点点!
09-11-24
小知识:
linux从文本界面启动:
首先进入root权限,在fedora下,终端输入:su root;输入你的密码;进入root权限下,使用shell,vi /etc/inittab,修改inittab文件,把id:5:initdefault的5改成3。其他几种对应的模式如下: 0 关机 1 单用户模式 2 多用户模式,但是不支持网络访问 3 多用户模式,文本模式启动 4 无定义的 5 图形化界面 6 重启
进入图形界面startx,就OK了,当然前提是装了图形界面

文件权限:
4:读 相当于r
2:写 相当于w
1:执行 相当二x
常用7 可读可写可执行
6 可读可写
5 可读可执行
4 只可读

Linux错误机制
1,在用户进行文件操作的时候,会出各种各样的错误,比如权限不足,空间不足,找不到文件等,此时需在程序中设置错误捕捉语句,并显示错误.
在linux中错误定义成了错误号和错误常数,如果发生错误,便宜会返回

在终端上可以用以下命令来查看错误的定义:
cat /usr/include/asm/errno.h
如下:
#ifndef _I386_ERRNO_H
#define _I386_ERRNO_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 /* Arg 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 */
#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 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 /* 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 */
#endif
通过strerror函数来显示错误信息
输入以下程序:
#include
#include
#inc

lude /*包含错误处理的头文件*/
int main(void)
{
printf("ENOENT:\n");
char *mesg = strerror(ENOENT);
printf(" Errno :%d\n",ENOENT);
printf(" Message:%s\n",mesg);
printf("EIO :\n");
char *mesg1 = strerror(EIO);
printf(" Errno :%d\n",EIO);
printf(" Message:%s\n",mesg1);
printf("EEXIST :\n");
char *mesg2 = strerror(EEXIST);
printf(" Errno :%d\n",EEXIST);
printf(" Message:%s\n",mesg2);
}
编译运行结果如下:
ENOENT:
Errno :2
Message:No such file or directory
EIO :
Errno :5
Message:Input/output error
EEXIST :
Errno :17
Message:File exists
下面用序号显示错误信息
char *strerrno(int erronum)
输入以下源程序:
#include
#include
#include
int main(void)
{
int i;
for(i=0;i
编译运行如下:
errno :0
message :Success
errno :1
message :Operation not permitted
errno :2
message :No such file or directory
errno :3
message :No such process
errno :4
message :Interrupted system call
errno :5
message :Input/output error
errno :6
message :No such device or address
errno :7
message :Argument list too long
errno :8
message :Exec format error
errno :9
message :Bad file descriptor
errno :10
message :No child processes
errno :11
message :Resource temporarily unavailable
errno :12
message :Cannot allocate memory
errno :13
message :Permission denied
errno :14
message :Bad address
errno :15
message :Block device required
# _i386_errno_h标识
#定义_i386_errno_h
#定义eperm 1 / * * /操作不允许
#定义enoent 2 / * * /没有这样的文件或目录
#定义esrch 3 / * * /没有这样的过程
#定义eintr 4 / * * /中断系统调用
#定义操作错误 5 / * * / /错误
#定义enxio 6 / *没有这样的设备或地址* /
#定义e2big 7 / * * /参数表太长
#定义enoexec 8 / * * /执行格式错误
#定义ebadf 9 / * * /错误的文件编号
#定义echild 10 / * * /无子过程
#定义eagain 11 / * * /再试一次
#定义enomem 12 / * * /内存不足
#定义eacces 13 / * * /拒绝许可
#定义efault 14 / * * /坏地址
#定义enotblk 15 / * * /块设备请求
#定义设备的 16 / * * /设备或资源忙
#定义eexist 17 / * * /文件存在
#定义exdev 18 / * * /交叉链接
#定义enodev 19 / * * /没有这种装置
#定义enotdir 20 / * * /不是一个目录
#定义eisdir 21 / * * /目录
#定义einval 22 / * * /参数无效
#定义enfile 23 / * * /文件表溢出
#定义emfile 24 / * * /打开文件太多
#定义enotty 25 / * * /没有打字机
#定义etxtbsy 26 / * * /文本文件忙
#定义efbig 27 / * * /文件太大
#定义enospc 28 / * * /设备上没有空间了
#定义espipe 29 / *非法谋取* /
#定义erofs 30 / * * /只读文件系统
#定义emlink 31 / * * /太多的链接
#定义epipe 32 / * * /断管
#定义以东 33 / *数学论证的域名功能* /
#定义erange 34 / * * /不可表示的数学结果
#定义edeadlk 35 / * * /会发生

资源死锁
#enametoolong 36 / * * /文件名太长
#定义enolck 37 / *没有记录锁可* /
#定义enosys 38 / * * /功能没有实现
#定义enotempty 39 / * * /目录不空
#定义eloop 40 / * * /遇到太多的符号链接
#定义ewouldblock eagain / * * /操作将阻塞
#定义enomsg 42 / * * /没有期望类型的消息
#定义eidrm 43 / * * /标识符删除
#定义echrng 44 / * * /频道数目超出范围
#定义el2nsync 45 / * * /2级不同步
#定义el3hlt 46 / * * /3级中断
#定义el3rst 47 / * * /3级复位
#定义elnrng 48 / * * /链接数超出范围
#定义eunatch 49 / * * /不附协议驱动
#定义enocsi 50 / * * /没有倡议结构可用
#定义el2hlt 51 / * * /2级中断
#定义ebade 52 / * * /无效的交换
#定义ebadr 53 / * * /无效请求描述符
#定义exfull 54 / * * /交流全
#定义enoano 55 / * * /阳极
#定义ebadrqc 56 / * * /无效的请求代码
#定义ebadslt 57 / * * /无效槽
# edeadlock edeadlk定义
#定义ebfont 59 / * * /错误的字体文件格式
#定义enostr 60 / * * /不流装置
#定义enodata 61 / * * /无可用数据
#定义和 62 / * * /计时器过期
#定义enosr 63 / * * /资源的溪流
#定义enonet 64 / *机上的不是网* /
#定义enopkg 65 / * * /没有安装软件包
#定义eremote 66 / * * /对象是远程的
#定义enolink 67 / * * /联系被切断
#定义马腺病毒 68 / * * /宣传错误
#定义esrmnt 69 / * * / srmount误差
#定义在 70 / * * /通讯错误发送
#定义eproto 71 / * * /协议错误
#定义emultihop 72 / * * /跳企图
#定义edotdot 73 / * * /具体错误率
#定义ebadmsg 74 / * * /没有数据信息
#定义eoverflow 75 / *值太大,定义数据类型* /
#定义enotuniq 76 / * * /网络名称不唯一
#定义ebadfd 77 / * * /文件描述符在坏状态
#定义eremchg 78 / * * /远程地址改变了
#定义elibacc 79 / *无法访问必要的共享库* /
#定义elibbad 80 / * * /访问损坏的共享库
#定义elibscn 81 / * . out。库部分损坏* /
#定义elibmax 82 / *试图链接太多的共享库* /
#定义elibexec 83 / *不能直接执行一个共享库* /
#定义eilseq 84 / * * /非法字节序列
#定义erestart 85 / *中断的系统调用应该重新启动* /
#定义estrpipe 86 / * * /错误流管
#定义eusers 87 / * * /用户太多
#定义enotsock 88 / * * /在非套接字套接字操作
#edestaddrreq 89 / * * /需要目标地址
#定义emsgsize 90 / * * /消息太长
#定义eprototype 91 / * * /协议类型错误的插座
# enoprotoopt 92 / * * /协议不可用
#eprotonosupport93 / * * /不支持的协议
esocktnosupport 94 / * * /套接字类型不受支持
#定义eopnotsupp 95 / *上不支持的操作运输终点* /
epfnosupport 96 / * * /不支持的协议族
eafnosupport 97 / *协议不支持的地址* /
eaddrinuse 98 / * * /地址已在使用
eaddrnotavail 99 / * * /无法分配请求的地址
#定义enetdown 100 / * * /网络
enetunreach 101 / * * /网络不可达
#定

义enetreset 102 / *网络掉连接因为复位* /
econnaborted 103 / * * /软件导致连接中断
econnreset 104 / * * /连接被重置
#定义enobufs 105 / * * /没有可用的缓冲空间
#定义eisconn 106 / * * /传输端点已经连接
#定义enotconn 107 / * * /运输终点没有连接
eshutdown 108 / *不能发送后运输终点关闭* /
etoomanyrefs 109 / *引用太多:不能剪接* /
#定义etimedout 110 / * * /连接超时
econnrefused 111 / * * /拒绝连接
#定义ehostdown 112 / * * /主机
#定义ehostunreach113 / * * /没有到主机的路由
#定义ealready114 / * * /进程已运行
#定义einprogress115 / * * /现在的进展
#确定地116 / * * /陈旧的文件句柄
#定义euclean117 / * * /结构需要清洗
#定义enotnam118 / *不是一个开发者命名文件类型* /
#定义enavail119 / * * /开发者提供无信号
#定义eisnam120 / * * /指定类型文件
#定义eremoteio121 / * * /远程输入/输出错误
#定义edquot122 / * * /超过配额
#定义enomedium123 / * * /中发现
#定义emediumtype124 / * * /错误的媒体类型




相关文档
最新文档