【问题标题】:Is IOCTL return value是 IOCTL 返回值
【发布时间】:2014-05-15 23:51:23
【问题描述】:

我遇到了以下代码。

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))
    

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

【问题讨论】:

  • 1) 否。请阅读:man7.org/linux/man-pages/man2/ioctl.2.html 2) 如果 ioctl 返回的值不同于 0,则评估为“真”。
  • @AntonH 你应该作为答案发布:)
  • @JesusRamos 我应该,但由于它是一个如此简短/快速的答案,我认为这有点浪费答案。我错过了这么多的声誉:D
  • @AntonH - 如果 ioctl 返回非零值,(2)如何评估为“真”?
  • 因为在 C 语言中,0 为假,其他均为真。

标签: c ioctl


【解决方案1】:

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

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

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

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

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

所以,在下面的代码中:

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

非零值被评估为true,然后我们输入那个条件代码块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    相关资源
    最近更新 更多