int fcntl(int fd, int command, ... /* arg */ );
它是否可移植:(flags = fcntl(fd, F_GETFL);
注意:否arg
)?
F_GETFL (void)
Get the file access mode and the file status flags; arg
is ignored.
void
在 Linux 文档中意味着这arg
不是必需的。
这是来自 POSIX 的相关标志的用法示例F_GETFD
:
#include <unistd.h>
#include <fcntl.h>
...
int flags;
flags = fcntl(fd, F_GETFD);
if (flags == -1)
/* Handle error */;
flags |= FD_CLOEXEC;
if (fcntl(fd, F_SETFD, flags) == -1)
/* Handle error */;"
它表明(今天)arg
不需要。F_GETFD
然后它说:
F_GETFD、F_SETFD、F_GETFL 和 F_SETFL 的 arg 值都表示允许未来增长的标志值。
这是否意味着将来F_GETFL
可能会使用?arg
在 Ohloh 代码上快速搜索“F_GETFL”会产生大多数开源项目确实通过arg
的印象(通常0
,有时NULL
,甚至(损坏?)&fl
)。我不明白为什么fcntl(fd, F_GETFL, 0)
是首选形式。@Wumpus Q. Wumbley 认为这可能是由也使用表单的“UNIX 环境中的高级编程”一书引起的。fcntl(fd, F_GETFL, 0)
是否有需要第三个参数的系统/编译器:flags = fcntl(fd, F_GETFL, 0);
?今天或将来是否可以fcntl(fd, F_GETFL)
产生fcntl(fd, F_GETFL, 0)
不同的结果(假设一个合规的实施)?