errno、_doserrno、_sys_errlist和_sys_nerr

perrorstrerror 函数使用的这些全局变量保存错误代码的输出错误消息。 应在它们的全局变量位置使用此表中列出的更安全的函数版本。

全局变量

功能等效

_doserrno

_get_doserrno, _set_doserrno

_errno

_get_errno, _set_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

请参见

参考

全局变量

errno常数

perror

strerror

_get_doserrno

_set_doserrno

_get_errno

_set_errno