您的位置:首页 > 运维架构 > Linux

Linux open() 一个函数,两个函数原型

2018-01-08 15:57 309 查看
open在手册中有两个函数原型, 如下所示:

int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode);

这样的函数原型有些违背了我们的直觉。
C语言是不支持函数重载的, 为什么open的系统调用可以有两个这样的open原型呢? 内核绝对不可能为这个功能创建两个系统调用。
在Linux内核中, 实际上只提供了一个系统调用, 对应的是上述两个函数原型中的第二个。 那么open有两个函数原型又是怎么回事呢?

当我们调用open函数时, 实际上调用的是glibc封装的函数, 然后由glibc通过自陷指令,
进行真正的系统调用。 也就是说, 所有的系统调用都要先经过glibc才会进入操作系统。 这样的话, 实际上是glibc提供了一个变参函数open来满足两个函数原型,
然后通过glibc的变参函数open实现真正的系统调用来调用原型二。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐