2013-02-19 311 views
3
if((err = ioctl(fd, IOC_CARD_LOCK, &lock)) < 0) 
{ 
    printf("ioctl failed and returned errno %d \n",err); 
} 

上述代码是否正确并且是一种很好的编程习惯?它可以在我的电脑上编译。 即它填充errioctl返回值,并检查是否err< 0IOCTL调用和检查返回值

是上述方法返回“ERR”由IOCTL返回的标准方法。

似乎有一些标准变量叫做errno? 这是什么?这是否与上述相同?

回答

8

我发现了一个更好的方法来做到这一点。

if(ioctl(fd, IOC_CARD_LOCK, &lock) < 0) 
{ 
    printf("ioctl failed and returned errno %s \n",strerror(errno)); 
} 

错误号是被设置为系统calls.and字符串错误的全局变量的代码(一个负整数)转换成有意义的字符串(“无效参数”例如)

1

只是偶然移到该响应。答案只是部分正确,因为printf可能会覆盖errno - 根据man页面,它必须保存errno。所以一个更强大的答案是:

if(ioctl(fd, IOC_CARD_LOCK, &lock) < 0) 
{ 
    int errsv = errno; 
    printf("ioctl failed and returned errno %s \n",strerror(errsv)); 
}