您的位置:首页 > 运维架构 > Linux

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

2008-06-11 13:27 666 查看
在没有解释这些错误定义之前,先让我们看看为什么要知道这些常用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 */
无法表示数学结果在没有解释这些错误定义之前,先让我们看看为什么要知道这些常用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 */无法表示数学结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: