学会利用errno

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的值才有意义。

上一篇:WisDom.Net 框架设计(四) 用户安全


下一篇:Git报错解决:fatal: unable to access 'https://github.com/.......': OpenSSL SSL_read: Connection