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 |