【问题标题】:open() system call polymorphismopen() 系统调用多态性
【发布时间】:2013-02-15 13:55:27
【问题描述】:

我刚刚发现open()(man 2 open)系统调用有两个版本:

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

确实,可以在单个 C 文件中使用其中任何一个,并且两者都可以工作。标准 C 如何做到这一点?

【问题讨论】:

  • @ZhangYuan 用 C 语言?一点也不。

标签: c system-calls


【解决方案1】:

它可以作为可变参数函数来完成。

open 的 POSIX 文档是这样指定的:

int open(const char *path, int oflag, ...);

【讨论】:

    【解决方案2】:

    事实上,它不是 C++ 风格的函数重载。只是open()是可变参数:

    int open(const char *fname, int flags, ...);
    

    只有当“标志”需要它时,它才会寻找第三个参数。

    【讨论】:

    • 在手册页中没有看到标志和模式之间的任何关系。需要详细说明吗?
    • @lang2 该模式仅在需要时使用, 例如,当O_CREAT 被指定为标志时。例如,当您打开一个文件进行读取时,谈论文件模式是没有意义的......
    猜你喜欢
    • 2015-06-02
    • 2015-01-06
    • 1970-01-01
    • 2010-10-10
    • 2012-10-21
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 2015-04-20
    相关资源
    最近更新 更多