我遇到了以下代码。
if((error = ioctl(get_card_fd(card_ref), CARD_SETVERSION, &context)))
{
return EXIT_FAILURE;
}
我的问题如下:
以下表达式如何评估为正/ TRUE?
(error = ioctl(get_card_fd(card_ref), CARD_SETVERSION, &context))
对于ioctl的非零返回值,上面的表达式如何评估为真?
答案 0 :(得分:6)
开发人员可以开发处理此ioctl
请求的驱动程序,以获得成功返回的值。通常,0
意味着一切顺利。这个约定已经在UNIX系统中使用了很长时间。
无论如何,请阅读有关此特定文件描述符的文档,并了解此文件描述符返回的特定系统调用的值。
至于第二个问题,=
运算符在赋值后返回变量的新值。因此,如果返回非零值,则表达式的返回值(在我们的示例中为int
ioctl
)将被隐式评估为true
赋值运算符。
大多数方式,非零负值意味着执行错误。在某些情况下,UNIX系统调用会在read
或write
系统调用时返回正值。在read
和write
系统调用的情况下,它们的正返回值表示读取或写入的字节数。
可能ioctl
返回正值,这可能意味着执行正常,并且我们返回此特定文件描述符所代表的某些状态。再次仔细阅读您的文档。
所以,在下面的代码中:
if (error = ioctl(get_card_fd(card_ref), CARD_SETVERSION, &context)) {
return EXIT_FAILURE;
}
非零值被评估为true
,我们输入该条件代码块。