由于errno的重要性,在这里翻译一下Linux中man手册关于errno的内容以及errno涉及的要点
- 注意点1
就像errno的名字一样,它是最后一个错误的编号,因此要小心在查看错误之前又出现了新的错误。 - 注意点2
errno的值不会被任何程序清除,因此在使用errno的值之前,先要通过函数(系统调用/库函数)的返回值来确定有错误发生了。 - 注意点3
下面表格中没有一个常量是0。所以可以事先将errno的值设为0。 - C标准引入在错误处理函数
#include <string.h>
char *strerror(int errnum);
- 1
- 2
这个函数将errno映射到错误消息字符串,并返回一个指向这个字符串的指针。
#include <stdio.h>
void perror(const char *msg);
- 1
- 2
perror有类似的功能,只是先加上了一个msg消息|
名字
errno - number of last error头文件
#include <errno.h>
- 1
- 描述
<errno.h>
定义了整数变量errno。由系统调用和某些库函数根据事件来设置它,用以表明哪里有问题。这个值只有当调用的返回表明错误的时候有用,(比如,对于大多数的系统调用是-1,对于大多数的库函数来说是-1或NULL),正确的函数也可以修改errno。
有效的错误number都是非零的; 系统调用和库函数不会把errno设为0。
对于某些系统调用和库函数(比如,getpriority(2)),没有错误的时候也会返回-1。在这种情况下,可以在调用之前先将errno设为0,当不确定有没有错误的时候,可以通过查看errno是不是一个非零值来确定是否发生错误。
ISO C标准将errno定义为一个可以修改的int型左值,并且不允许准确声明,errno可能是一个宏,errno是thread-local,在一个线程中设置它的值不会影响它在另一个thread中的值。
所有由POSIX.1确定的错误名必须有唯一的值,有个例外是,EAGIAN和EWOULDBLOCK可能是相同的。
- 下面是Linux定义的符号错误名,如果有POSIX.1标记,表明名字由POSIX.1-2001定义,由C99标记,表明名字由C99定义。