IOCTL是否返回值

时间:2014-04-03 21:52:22

标签: c ioctl

我遇到了以下代码。

if((error = ioctl(get_card_fd(card_ref), CARD_SETVERSION, &context)))
{
      return EXIT_FAILURE;
}

我的问题如下:

  1. IOCTL是否总是返回' 0'成功吗?
  2. 以下表达式如何评估为正/ TRUE?

    (error = ioctl(get_card_fd(card_ref), CARD_SETVERSION, &context))
    
  3. 对于ioctl的非零返回值,上面的表达式如何评估为真?

1 个答案:

答案 0 :(得分:6)

开发人员可以开发处理此ioctl请求的驱动程序,以获得成功返回的值。通常,0意味着一切顺利。这个约定已经在UNIX系统中使用了很长时间。

无论如何,请阅读有关此特定文件描述符的文档,并了解此文件描述符返回的特定系统调用的值。

至于第二个问题,=运算符在赋值后返回变量的新值。因此,如果返回非零值,则表达式的返回值(在我们的示例中为int ioctl)将被隐式评估为true赋值运算符。

大多数方式,非零值意味着执行错误。在某些情况下,UNIX系统调用会在readwrite系统调用时返回正值。在readwrite系统调用的情况下,它们的正返回值表示读取或写入的字节数。

可能ioctl返回正值,这可能意味着执行正常,并且我们返回此特定文件描述符所代表的某些状态。再次仔细阅读您的文档。

所以,在下面的代码中:

if (error = ioctl(get_card_fd(card_ref), CARD_SETVERSION, &context)) {
        return EXIT_FAILURE;
}

非零值被评估为true,我们输入该条件代码块。