open()系统调用多态

lan*_*ng2 8 c system-calls

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

   int open(const char *pathname, int flags);
   int open(const char *pathname, int flags, mode_t mode);
Run Code Online (Sandbox Code Playgroud)

实际上,可以在单个C文件中使用它们,两者都可以工作.标准C如何实现这一目标?

小智 6

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

int open(const char *fname, int flags, ...);
Run Code Online (Sandbox Code Playgroud)

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


Mat*_*Mat 5

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

POSIX 文档是这样open指定的:

int open(const char *path, int oflag, ...);
Run Code Online (Sandbox Code Playgroud)