现在的位置: 首页 > 综合 > 正文

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

2018年01月17日 ⁄ 综合 ⁄ 共 4890字 ⁄ 字号 评论关闭
在没有解释这些错误定义之前,先让我们看看为什么要知道这些常用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 */无法表示数学结果

抱歉!评论已关闭.