热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

IO出错常用错误代码

在Linux文件操作以及更底层的IO操作出错的情况下,经常会为该如何返回合适的错误代码而纠结。另外在阅读代码的时候,可能会碰到很多种错误代码࿰

在Linux文件操作以及更底层的IO操作出错的情况下,经常会为该如何返回合适的错误代码而纠结。另外在阅读代码的时候,可能会碰到很多种错误代码,因为不明白它的含义而迷惑。为此,有必要归纳整理一下常见的所有的出错代码及其对应的含义,既方便阅读代码时参考,又便于自己正确选用。



显然因为这些代码大都处在用户态,可能会有多个进程或者线程会用到它,因此通常把它们归纳一起放在同一个头文件里。在笔者的Linux中系统中,目前用到的宏的定义在下面的头文件里:



/usr/include/asm-generic/errno-base.h:

#ifndef _ASM_GENERIC_ERRNO_BASE_H

#define _ASM_GENERIC_ERRNO_BASE_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  /* 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 */

#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 */



此外,/usr/include/asm-generic/errno.h还有一部分常用到的出错代码在这里定义,可以看到它和上面定义的错误代码的代码是统一编号的。



#ifndef _ASM_GENERIC_ERRNO_H

#define _ASM_GENERIC_ERRNO_H



#include



#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 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 */

#define ECANCELED   125 /* Operation Canceled */

#define ENOKEY      126 /* Required key not available */

#define EKEYEXPIRED 127 /* Key has expired */

#define EKEYREVOKED 128 /* Key has been revoked */

#define EKEYREJECTED    129 /* Key was rejected by service */



/* for robust mutexes */

#define EOWNERDEAD  130 /* Owner died */

#define ENOTRECOVERABLE 131 /* State not recoverable */

#define ERFKILL     132 /* Operation not possible due to RF-kill */

#define EHWPOISON   133 /* Memory page has hardware error */



通过上面列举出来的所有文件和IO操作相关的错误代码可以看到,种类很多,数量不小,在我们实际的工程项目中,必须结合具体业务场景选则合适的错误代码,既要保证代码的含义和真是场景吻合,又要避免在不同的场景中使用了相同的错误代码。



















本文转自存储之厨51CTO博客,原文链接:http://blog.51cto.com/xiamachao/1796116 ,如需转载请自行联系原作者






推荐阅读
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
author-avatar
风雨无痕630_748
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有