errno 常量

语法

#include <errno.h>

备注

对于各种错误条件,errno 常量是分配给 errno 的值。

ERRNO.H 包含 errno 值的定义。 但是,并非 ERRNO.H 中给定的提供定义都可用于 32 位 Windows 操作系统。 ERRNO.H 中的某些值的存在是为了保持与 UNIX 系列操作系统的兼容性。 32 位 Windows 操作系统中的 errno 值是 XENIX 系统中的 errno 值的子集。

errno 值不一定与由从 Windows 操作系统进行的系统调用返回的实际错误代码相同。 若要访问实际操作系统错误代码,请使用包含此值的 _doserrno 变量。

支持以下 errno 值:

常量 说明
E2BIG 自变量列表太长。 7
EACCES 权限被拒绝。” 文件的权限设置不允许指定的访问权限。 尝试通过与某文件的属性不兼容的方式访问该文件(在某些情况下为目录)。

例如,当尝试从未打开的文件读取时,可能会出现此错误。 或者,尝试打开现有的只读文件进行写入,或打开目录而不是文件。 在 MS-DOS 操作系统版本 3.0 以及更高版本下,EACCES 也可能表示锁定或共享冲突。

在尝试重命名文件或目录或者删除现有目录时也可能发生错误。
13
EAGAIN 没有更多进程、没有足够内存或达到最大嵌套级别。 尝试创建新进程失败,原因是没有更多的进程槽、没有足够的内存或者已到达最大嵌套级别。 11
EBADF 文件编号错误。 可能有两种原因:1) 指定的文件描述符不是有效值,或者未引用打开的文件。 2) 尝试写入到已打开进行只读访问的文件或设备。 9
EBUSY 设备或资源忙碌。 16
ECHILD 没有生成的进程。 10
EDEADLK 将会发生资源死锁。 36
EDEADLOCK EDEADLK 相同,以便与早期的 Microsoft C 版本兼容。 36
EDOM 数学自变量。 数学函数的自变量未在函数域中。 33
EEXIST 存在文件。 尝试创建已存在的文件。 例如,在 _open 调用中指定 _O_CREAT_O_EXCL 标志,但命名的文件已存在。 17
EFAULT 地址错误。 14
EFBIG 文件太大。 27
EILSEQ 非法字节序列(例如,在 MBCS 字符串中)。 42
EINTR 函数中断。 4
EINVAL 无效的参数。 为某个函数的自变量之一给定了无效值。 例如,在定位文件指针时为原始位置提供的值(通过调用 fseek)位于文件头的前面。 22
EIO I/O 错误。 5
EISDIR 是目录。 21
EMFILE 打开的文件太多。 没有更多文件说明符可用,因此无法打开更多文件。 24
EMLINK 链接太多。 31
ENAMETOOLONG 文件名太长。 38
ENFILE 系统中打开的文件太多。 23
ENODEV 没有此设备。 19
ENOENT 没有此文件或目录。 指定的文件或目录不存在或无法找到。 只要指定的文件不存在或路径的组件未指定现有的目录,就可能出现此消息。 2
ENOEXEC 执行格式错误。 尝试执行不可执行的文件或具有无效的可执行文件格式的文件。 8
ENOLCK 无可用锁。 39
ENOMEM 无法为尝试的运算符提供足够的内存。 例如,当可用于执行子进程的内存不足时,或者当无法满足 _getcwd 调用中的分配请求时,就会出现此消息。 12
ENOSPC 设备上没有剩余空间。 设备上没有可供写入的其他空间(例如,当磁盘已满时)。 28
ENOSYS 函数不受支持。 40
ENOTDIR 不是目录。 20
ENOTEMPTY 目录不为空。 41
ENOTTY 不适当的 I/O 控制操作。 25
ENXIO 没有此设备或地址。 6
EPERM 不允许执行该操作。 1
EPIPE 管道损坏。 32
ERANGE 结果太大。 数学函数的自变量太大,造成结果中的有效位部分或全部丢失。 当参数大于预期值时(例如,当 _getcwdbuffer 参数大于预期值时),在其他函数中也可能发生此错误。 34
EROFS 只读文件系统。 30
ESPIPE 搜寻无效。 29
ESRCH 没有此进程。 3
EXDEV 跨设备链接。 尝试将文件移至不同的设备(使用 rename 函数)。 18
STRUNCATE 字符串复制或串联导致字符串被截断。 请参阅 _TRUNCATE 80

下列值支持 POSIX 的兼容性:

常量 说明
EADDRINUSE 正在使用的地址。 100
EADDRNOTAVAIL 地址不可用。 101
EAFNOSUPPORT 地址系列不受支持。 102
EALREADY 连接已经进行。 103
EBADMSG 错误消息。 104
ECANCELED 操作已取消。 105
ECONNABORTED 连接已中止。 106
ECONNREFUSED 连接被拒绝。 107
ECONNRESET 连接重置。 108
EDESTADDRREQ 需要目标地址。 109
EHOSTUNREACH 无法访问主机。 110
EIDRM 已删除标识符。 111
EINPROGRESS 操作正在进行。 112
EISCONN 已连接。 113
ELOOP 符号链接级别过多。 114
EMSGSIZE 消息大小。 115
ENETDOWN 网络中断。 116
ENETRESET 网络重置。 117
ENETUNREACH 无法访问网络。 118
ENOBUFS 无缓冲空间。 119
ENODATA 无可用消息。 120
ENOLINK 无链接。 121
ENOMSG 无消息。 122
ENOPROTOOPT 无协议选项。 123
ENOSR 无流资源。 124
ENOSTR 不是流。 125
ENOTCONN 未连接。 126
ENOTRECOVERABLE 状态不可恢复。 127
ENOTSOCK 不是套接字。 128
ENOTSUP 不支持。 129
EOPNOTSUPP 不支持操作。 130
EOTHER 其他。 131
EOVERFLOW 值太大。 132
EOWNERDEAD 所有者亡。 133
EPROTO 协议错误。 134
EPROTONOSUPPORT 协议不受支持。 135
EPROTOTYPE 协议类型错误。 136
ETIME 流超时。 137
ETIMEDOUT 已超时。 138
ETXTBSY 文本文件繁忙。 139
EWOULDBLOCK 操作会阻止。 140

另请参阅

全局常量