IOCTL调用并检查返回值

liv*_*hak 3 ioctl errno

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

上面的代码是否正确且编程实践良好?它在我的电脑上编译.即它填充err用的返回值ioctl,并检查是否err是< 0

以上方法是返回IOCTL返回的"错误"的标准方法.

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

liv*_*hak 9

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

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

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