红联Linux门户
Linux帮助

Linux系统中常用error number定义与解释

发布时间:2008-06-10 21:06:07来源:红联作者:Sednol
在没有解释这些错误定义之前,先让我们看看为什么要知道这些常用error number?

对于写C程序的人来说,errno并不是一个陌生的变量,无论你是在用户态还是在内核态。简短来说,errno是用来保存错误信息,这些信息反应了相应错误原因。因此,一个小小errno就可以连接user space programmer 与 kernel space programmers,可见其重要性。但是,我们的programmers确又常常忽略这些,他们往往只看中正确与错误,而不是去访问强大的errno获取更多的信息。对于普通的程序,为此可能仅仅是"没关系,大不了可以重启"。但是,对于一些重要的任务,重启可能意味着灾难的发生,尤其是在重要的领域。为此,这里我想给大家列出常见的errno,提醒大家在处理设备时,"check errno when your routine failed!".

Linux errno 在0.* 版本中大约只有三四十个,但是当Linux kenel飞速膨胀时,errno的数量也在增加,具体,有多少在你的linux版本中,你可以通过 man errno 查看,或者直接打开文件:

include/linux/errno.h

这里只是列出了常用的或最早期的一些errno:

引用:
#define EPERM 1 /* Operation not permitted */
拒绝操作,通常是权限的问题,例如普通用户删除root的文件
#define ENOENT 2 /* No such file or directory */
没有相应的文件或目录,例如打开不存的文件
#define ESRCH 3 /* No such process */
没有相应的进程,例如kill掉一个不存在的进程号
#define EINTR 4 /* Interrupted system call */
中断的系统调用
#define EIO 5 /* I/O error */
I/O错误
#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 */
不是一个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 */
错误的seek操作

#define EROFS 30 /* Read-only file system */
只读文件系统

#define EMLINK 31 /* Too many links */
连接太多

#define EPIPE 32 /* Broken pipe */
PIPE崩溃

#define EDOM 33 /* Math argument out of domain of func */
数学参数超出了函数域

#define ERANGE 34 /* Math result not representable */
无法表示数学结果
文章评论

共有 0 条评论