errno、_doserrno、_sys_errlist和_sys_nerr
perror 和 strerror 函数使用的这些全局变量保存错误代码的输出错误消息。应在它们的全局变量位置使用此表中列出的更安全的函数版本。
全局变量 |
功能等效 |
---|---|
_doserrno |
|
_errno |
这些变量在 STDLIB.H 声明
extern int _doserrno;
extern int errno;
extern char *_sys_errlist[ ];
extern int _sys_nerr;
备注
errno 和 _errno 连接到同一个变量。errno 定义与代码 #define errno (*_errno())
errno 在系统级的错误设置调用。由于 errno 表示的值最后调用将其设置为,此值能成功将调用。始终检查 errno ,前面直接和,可以设置它的调用之后。
在错误, errno 不一定设置为与错误代码返回系统调用的值。对于 I/O 操作,请使用 _doserrno 到 errno 操作系统的错误代码等效代码的访问。对于大多数非 I/O 操作 _doserrno 的值是不确定的。
每个 errno 值与使用 strerror,在字符串中打印使用 perror 或存储的错误消息。perror 和 strerror 使用 _sys_errlist 数组,并 _sys_nerr,元素数。 _sys_errlist的中,对处理错误信息。
库算术例程通过调用 _matherr设置 errno 。处理不同的处理,编写基于 _matherr 拥有实例引用声明并将其命名为 _matherr。
所有 errno 值,定义为 ERRNO.H 预定义的常量,是 UNIX 兼容的和下面列出。仅 ERANGE、 EILSEQ 和 EDOM 在 ANSI 标准指定。
常量 |
系统错误信息 |
值 |
---|---|---|
EPERM |
不允许的操作 |
1 |
ENOENT |
如果没有这样的文件或目录 |
2 |
ESRCH |
如果没有这样处理 |
3 |
EINTR |
中断函数 |
4 |
EIO |
I/O 错误 |
5 |
ENXIO |
如果没有这样的计算机或地址 |
6 |
E2BIG |
太长的参数列表 |
7 |
ENOEXEC |
exec 格式错误 |
8 |
EBADF |
文件号错误 |
9 |
ECHILD |
未给定进程 |
10 |
EAGAIN |
不处理或未到达足够的内存或最大嵌套级别 |
11 |
ENOMEM |
没有足够的内存 |
12 |
EACCES |
拒绝的权限 |
13 |
EFAULT |
错误的地址 |
14 |
EBUSY |
忙计算机或的资源 |
16 |
EEXIST |
文件存在 |
17 |
EXDEV |
跨模式链接 |
18 |
ENODEV |
如果没有这样的计算机 |
19 |
ENOTDIR |
不是内容 |
20 |
EISDIR |
为内容 |
21 |
EINVAL |
参数无效。 |
22 |
ENFILE |
许多文件系统中打开 |
23 |
EMFILE |
许多打开文件 |
24 |
ENOTTY |
不适当的 I/O 控件操作 |
25 |
EFBIG |
太大文件 |
27 |
ENOSPC |
在计算机预留的没有空格 |
28 |
ESPIPE |
无效、 |
29 |
EROFS |
只读文件系统 |
30 |
EMLINK |
很多链接 |
31 |
EPIPE |
破裂的管道 |
32 |
EDOM |
算术参数 |
33 |
ERANGE |
结果太大 |
34 |
EDEADLK |
资源会发生死锁 |
36 |
EDEADLOCK |
和兼容性的 EDEADLK 相同与旧的 Microsoft C 版本 |
36 |
ENAMETOOLONG |
文件名太长 |
38 |
ENOLCK |
不可用的锁 |
39 |
ENOSYS |
不支持的功能 |
40 |
ENOTEMPTY |
非空的内容 |
41 |
EILSEQ |
非法字节顺序 |
42 |
STRUNCATE |
字符串被截断 |
80 |