12

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

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

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

4

2 回答 2

9

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

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

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

于 2013-03-01T05:57:10.650 回答
5

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

POSIX 文档open如下指定它:

int open(const char *path, int oflag, ...);
于 2013-03-01T05:56:28.440 回答