是IOCTL返回值

是IOCTL返回值,c,ioctl,C,Ioctl,我遇到了以下代码 if((error = ioctl(get_card_fd(card_ref), CARD_SETVERSION, &context))) { return EXIT_FAILURE; } 我的问题如下: IOCTL是否总是在成功时返回“0” 以下表达式如何计算为正/真 (error = ioctl(get_card_fd(card_ref), CARD_SETVERSION, &context)) 对于ioctl的非零返回值,上面的表达式如何

我遇到了以下代码

if((error = ioctl(get_card_fd(card_ref), CARD_SETVERSION, &context)))
{
      return EXIT_FAILURE;
}
我的问题如下:

  • IOCTL是否总是在成功时返回“0”
  • 以下表达式如何计算为正/真

    (error = ioctl(get_card_fd(card_ref), CARD_SETVERSION, &context))
    

  • 对于ioctl的非零返回值,上面的表达式如何计算为true?

    这取决于开发驱动程序的开发人员,该驱动程序处理此
    ioctl
    请求成功返回的值。通常,
    0
    表示一切正常。这种约定在UNIX系统中已经使用了很长时间

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

    至于第二个问题,
    =
    运算符在赋值后返回一个新的变量值。因此,如果赋值运算符返回非零值,则表达式的返回值(在本例中为
    int
    for
    ioctl
    )将隐式地计算为
    true

    大多数情况下,非零负值表示执行错误。在某些情况下,UNIX系统调用会像
    read
    write
    系统调用一样返回正值。在
    read
    write
    的情况下,系统调用它们的正返回值表示读取或写入的字节数

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

    因此,在下面的代码中:

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

    非零值被求值为
    true
    ,我们输入条件代码块

    1)否。请阅读:2)如果
    ioctl
    返回的值与0不同,则计算结果为“true”。@antoh您应该将其作为答案发布:)@JesusRamos我应该这样做,但由于这是一个如此简短/快速的答案,我认为这有点浪费答案。我错过了这么多的名声:D@AntonH-如果ioctl返回一个非零值,(2)如何发展为“true”?因为在C中,0是false,其他的都是true。