在UNIX系统中,当函数出错时,通常会返回一个负值,同时整型变量errno会设置为一个具有特定信息的值。例如,open函数在成功时返回一个非负文件描述符,若出错则返回-1。在open函数出错时,errno可能有大约15种不同的值(如文件不存在、权限问题等)。某些函数并不返回负值,而是使用另一种约定,例如大多数返回指针的函数在出错时会返回一个null指针。文件中定义了errno变量及其对应的常数,这些常数通常以E开头。UNIX手册第2部分的第1页,intro(2)列出了所有这些出错常数。例如,若errno等于EACCES,这表示存在权限问题(如没有打开所需文件的权限)。

POSIX定义了errno为:extern int errno; 相较于C标准,POSIX.1中的定义更为严格。C标准允许errno是一个宏,可以扩展为可修改的整型左值(如返回一个指向出错数的指针的函数)。关于errno有两条规则需要注意。第一条规则是:如果没有出错,其值不会被清除。因此,只有在函数返回值指明出错时,才需检验其值。第二条是:任一函数都不会将errno的值设置为0,在中定义的所有常数都不为0。

C标准定义了两个函数来帮助打印出错信息。包括:


#include <string.h>

char *strerror(int errnum);

</string.h>

返回:指向消息字符串的指针。此函数将errnum(通常是errno的值)映射为一个出错信息字符串,并返回此字符串的指针。

了解更多关于POSIX标准的详细信息,可以参考以下资源:

  1. POSIX标准

  2. Linux系统调用出错errno描述一览

  3. POSIX标准文档

  4. POSIX标准以及函数接口查询

  5. C头文件errno.h