我很清楚man页面是由s.t部分分隔的。 man(2)
讨论系统调用和man(3)
关于库函数的讨论。我也知道fopen
(C库函数)和open
(系统调用)之间的区别。但有什么区别open(2)
和open(3)
?
当我在O_DIRECT
的手册页中寻找open
(用于直接I / O)时,它就出现了。奇怪的是,我发现它是版本open(2)中的有效标记,但不是open(3)。
这很有趣。我知道open(2)
是一个Linux系统调用(也许我应该说* nix?)。而AFAIK,没有名为open
的C库函数。那是什么open(3)
?
我在网上做了一些搜索,但没有找到任何明确回答我的问题。这是否来自POSIX标准?这是我能猜到的最后一件事。如果这是真的,有什么区别?是open(2)
仅在Linux中实现而在Unix和Linux中是open(3)
(因为POSIX)。是吗?
O_DIRECT
排除open(3)
的理由,我会很感激。
感谢。
答案 0 :(得分:4)
open(3)
是对POSIX open
函数的描述。 Linux上的真正功能是open(2)
。我们的想法是,如果您坚持使用open(3)
描述,那么您的代码应该适用于另一个符合POSIX标准的系统。但是,如果您使用的实际底层open(2)
函数的功能不在open(3)
描述中(例如O_DIRECT
标志),那么您将牺牲POSIX可移植性。