IOCTL调用并检查返回值

时间:2013-02-19 21:55:49

标签: ioctl errno

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

以上代码是否正确并且是一种良好的编程习惯?它在我的电脑上编译。 即它是否使用err的返回值填充ioctl,并检查err是否为< 0

上述方法是否是IOCTL返回“err”的标准方法。

似乎有一些名为errno的标准变量? 它是什么?那会和上面一样吗?

2 个答案:

答案 0 :(得分:9)

我发现了一种更好的方法。

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

errno是为系统调用设置的全局变量。而strerror将代码(负整数)转换为有意义的字符串(例如“无效参数”。)

答案 1 :(得分:4)

只是偶然发现了这个回应。答案只是部分正确,因为printf可能会覆盖errno - 根据手册页,它必须保存errno。所以一个更健全的答案是:

{{1}}