为什么手册页中有两个版本的open()?

时间:2014-07-11 00:05:37

标签: c linux posix

我很清楚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)的理由,我会很感激。

感谢。

1 个答案:

答案 0 :(得分:4)

open(3)是对POSIX open函数的描述。 Linux上的真正功能是open(2)。我们的想法是,如果您坚持使用open(3)描述,那么您的代码应该适用于另一个符合POSIX标准的系统。但是,如果您使用的实际底层open(2)函数的功能不在open(3)描述中(例如O_DIRECT标志),那么您将牺牲POSIX可移植性。