最近在看LinuxC这本书时,经常在代码里看见perror这个函数,并且后跟:“错误代码存入errno中,详细错误代码请参考man手册。”
查过后做一下笔记
使用perror这个函数要包含<stdlib.h>这个头文件
perror的函数原型为`void perror(const char *s)`
这个函数会先输出你传给他的实参 s 所指的字符串,后面再加上错误原因字符串。此错误原因依照全局变量errno 的值来决定要输出的字符串。
在库函数中有个errno变量,每个errno值对应着以字符串表示的错误类型。当你调用"某些"函数出错时,该函数已经重新设置了errno的值。perror函数只是将你输入的一些信息和现在的errno所对应的错误一起输出。只有当一个库函数失败时,errno才会被设置。当函数成功运行时,errno的值不会被修改。这意味着我们不能通过测试errno的值来判断是否有错误存在。反之,只有当被调用的函数提示有错误发生时检查errno的值才有意义。查看错误代码errno是调试程序的一个重要方法。当linux C api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因。在实际编程中用这一招解决了不少原本看来莫名其妙的问题。
例:
```
#include<stdio.h>
#include<stdlib.h>
int main()
{
char *p="abcd";
FILE *fp;
fp=fopen("asfaasf.txt","r");
if(fp==NULL)
{
perror(p);
exit(1);
}
return 0; }
```
那么,他的输出结果就会是 `abcd: No such file or directory`
也就是说,这个函数会先输出你给他传的字符串,在输出错误原因