看看这段代码,有问题吗?
func();
if (0 != errno) {
printf("something wrong!\n");
}
我们在调用某些系统函数的时候,经常会通过errno来判断是否出错,上面的写法对吗?
错!!!
因为errno只有在调用失败的时候才会被修改,调用成功的时候不会被修改;
当errno==0的时候,我们不能确定调用成功,也有可能是前面代码把errno设置成了0;
当errno<0的时候,我们不能确定调用失败,也有可能是上次调用失败遗留下来的结果;
所以,正确的做法是
1)如果函数本身返回一个指示调用成功与否的值,则先用这个值判断失败,如果确定失败,再根据errno判断失败类型
res = func();
if(res==某个失败值) {
printf("errno=%d\n", errno);
}
2) 调用函数前先手动设置errno=0
errno = 0;
func();
这个时候errno就能说明问题了
if( 0 == errno )
printf("succeed");
else
printf("failed");
总之,记住一句话:errno是在已经知道出错了的情况下,表示出错类型的;最好不要拿它来作为判断是否出错的依据;
顺便,引用一篇文章