在调用标准库函数时,通常会对返回值进行处理。比如:fopen,malloc,socket等,普遍的处理办法时,返回错误时
printf("open xxx error");
retun -1;
...
这样的报错,我们仅仅知道打开文件失败了,具体原因却无从知晓,只能跟踪调试了。如果,使用error函数来处理,
我们就可以得直接错误信息。
#include<stdio.h>
#define NDEBUG
#include<assert.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
#include<error.h>
#include<errno.h>
int main(int argc, char *argv[])
{
int fd[2];
if (pipe(fd)<0)
error(errno,errno,"[%s,%s,%d]",__FILE__,__func__,__LINE__);
if (fopen("xxx","r") == NULL)
error(errno,errno,"[%s,%s,%d]",__FILE__,__func__,__LINE__);
return 0;
}
当error第一个参数填0时,程序不会退出,非0时,退出,第2个参数为库函数的错误返回码,不同的错误码对应着不同的情况,能帮助我们更快的定位问题。如把文件xxx的权限修改为0,则会报错:./a.out: [main.c,main,29]: Permission denied。
错误码可以在文件./include/linux/errno.h中进行查看。