是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;
}
我的问题如下:
(error = ioctl(get_card_fd(card_ref), CARD_SETVERSION, &context))
对于ioctl的非零返回值,上面的表达式如何计算为true?这取决于开发驱动程序的开发人员,该驱动程序处理此
ioctl
请求成功返回的值。通常,0
表示一切正常。这种约定在UNIX系统中已经使用了很长时间
无论如何,请阅读有关此特定文件描述符的文档,并了解此文件描述符处理的特定系统调用返回的值
至于第二个问题,=
运算符在赋值后返回一个新的变量值。因此,如果赋值运算符返回非零值,则表达式的返回值(在本例中为int
forioctl
)将隐式地计算为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。