FILE *fp_Md5=NULL;
fp_Md5=fopen((string).c_str(), "r");
if(!fp_Md5){
sprintf(buf,"error:%s\n",strerror(errno));//strerror()通过标准错误的标号,获得错误的描述字符串 ,将单纯的错误标号转为字符串描述,方便用户查找错误。
return -1;
}
fgets(md5Buf,50*sizeof(char),fp_Md5);
fclose(fp_Md5);
在MD5文件校验打开文件时,出现signal 11 。
原因是U盘为只读系统,fopen时用了“r+”,fp_Md5为null,fgets和fclose时导致signal。
通过errno打印得知由于什么导致打开文件失败。
--------------------以下百度百科----------需要哪个函数打印err就紧接着调用strerror(errno),要不或许是中间其他函数---------------------------
errno 是记录系统的最后一次错误代码。代码是一个int型的值,在errno.h中定义。查看错误代码errno是调试程序的一个重要方法。当linux C api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因。在实际编程中用这一招解决了不少原本看来莫名其妙的问题。
if (somecall() == -1) {
printf("somecall() failed\n");
if (errno == ...) { ... }
}
这样的例子并不能得到somecall这个函数的运行所产生的错误代码,因为很可能是printf这个函数产生的。
if (somecall() == -1) {
int errsv = errno;
printf("somecall() failed\n");
if (errsv == ...) { ... }
这样才能真正得到运行somecall函数所带来的错误代码。
}
注意:只有当一个库函数失败时,errno才会被设置。当函数成功运行时,errno的值不会被修改。这意味着我们不能通过测试errno的值来判断是否有错误存在。反之,只有当被调用的函数提示有错误发生时检查errno的值才有意义。