zoukankan      html  css  js  c++  java
  • Linux open() 一个函数,两个函数原型

    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实现真正的系统调用来调用原型二。

  • 相关阅读:
    Mac查看某个文件的中某关键字信息
    Mac查看所有的文件
    Mac查看当前用户的环境变量
    Mac安装maven
    Lombok使用坑之属性不区分大小写
    Mac常用软件列表
    Mac系统升级
    Mac安装Git
    Mac查看git的安装路径
    Mac安装JDK8
  • 原文地址:https://www.cnblogs.com/liujx2019/p/10309903.html
Copyright © 2011-2022 走看看