宏定义 errno
cerrno
errno是一个全局变量,用于存储最近一次发生的错误代码。
int
标准库的函数可以将errno设置为任何值(不仅仅是上面列出的可移植值)。特定的库实现可以在这个头文件中定义额外的名字。
c++ 11扩展了需要在这个头文件中定义的基本值集,包括许多在POSIX环境中也可用的名称,将可移植errno值的总数增加到78个。有关完整列表,请参阅errc。
与errno值相关的特定错误消息可以使用strerror获得,也可以使用perror函数直接打印。
在c++中,errno总是被声明为宏,但在C中,它也可以被实现为带有外部链接的int对象。
函数 strerror
cstring
strerror是一个函数,用于返回一个表示指定错误代码的字符串。
char * strerror ( int errnum );
获取指向错误消息字符串的指针
解释errnum的值,生成一个带有消息的字符串,该消息描述错误条件,就像库中的函数设置为errno一样。
返回的指针指向一个静态分配的字符串,该字符串不能被程序修改。对该函数的进一步调用可能会覆盖其内容(不需要特定的库实现来避免数据竞争)。
strerror产生的错误字符串可能是特定于每个系统和库实现的。
参数
errnum
错误代码
例子
/* strerror example : error list */
#include
#include
#include
int main ()
{
FILE * pFile;
pFile = fopen ("unexist.ent","r");
if (pFile == NULL)
printf ("Error opening file unexist.ent: %s\n",strerror(errno));
return 0;
}
可能的输出
Error opening file unexist.ent: No such file or directory
函数 perror
cstdio
perror是一个函数,它接受一个字符串作为参数,并根据当前的错误代码打印出相应的错误信息。
void perror ( const char * str );
打印错误信息
将errno的值解释为错误消息,并将其打印到stderr(标准错误输出流,通常是控制台),可选地在其前面加上str中指定的自定义消息。
errno是一个整型变量,它的值描述了调用库函数产生的错误条件或诊断信息(C标准库的任何函数都可以为errno设置一个值,即使在此参考中没有显式指定,即使没有发生错误),参见errno了解更多信息。
error产生的错误消息是依赖于平台的。
如果参数str不是空指针,则输出str,后跟冒号(:)和空格。然后,无论str是否为空指针,生成的错误描述都将打印出来,后跟一个换行字符(‘\n’)。
应该在错误产生后立即调用Perror,否则它可能会被对其他函数的调用覆盖。
参数
str
包含要在错误消息本身之前打印的自定义消息的C字符串。
如果是空指针,则不打印前面的自定义消息,但仍然打印错误消息。
按照惯例,应用程序本身的名称通常用作参数。
例子
/* perror example */
#include
int main ()
{
FILE * pFile;
pFile=fopen ("unexist.ent","rb");
if (pFile==NULL)
perror ("The following error occurred");
else
fclose (pFile);
return 0;
}
如果文件 unexist.ent 不存在,程序输出可能会出现类似的结果:
The following error occurred: No such file or directory