如果我有一个接受文件描述符的函数,并且它想防御性地检查fd是否有效,是否应该通过if (fd >= 0) {...}
或if (fd != -1) {...}
进行检查?像open(2)和dup(2)这样的Linux系统调用似乎都在失败时返回-1,而我见过的大多数代码在使用前都会将fds初始化为-1。
我是对的,除了-1之外没有有意义的负fd值吗?拒绝所有负面的fds似乎更有说服力,但这是否只是在误导人们预期会有较大的负面fd?
答案 0 :(得分:1)
POSIX file descriptors are non-negative integers.偶数-1作为文件描述符无效。并非所有创建新文件描述符的函数都会在出现错误的情况下返回非文件描述符-1-pipe
是一个反例,它不使用此类带内信令。 >
我倾向于使用零而不是-1进行比较,这主要是因为它们会导致机器代码更加紧凑。 (这适用于错误返回值以及使用-1表示不存在打开文件描述符的情况。)编译器通常无法自行进行转换。与对-1进行比较相比,大多数体系结构可以更有效地对寄存器进行0(有符号)比较。有些将测试和分支指令组合为零值,或者它们可以执行比较而不会破坏寄存器或对该指令中的常数进行编码。