2013-03-01 41 views
8

我刚刚发现的open()(男子2开放)系统调用有两个版本:open()系统调用多态性

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

事实上,人们可以在一个单一的C文件请使用两者会工作。标准C如何实现这一目标?

+0

@张元在C?一点也不。 – 2013-03-01 16:31:49

回答

4

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

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

且仅当“标志”需要它,它会寻找第三个参数。

+0

在手册页中没有看到标志和模式之间的任何关系。谨慎阐述? – lang2 2013-03-01 06:05:44

+0

@ lang2模式*仅在需要时使用*,例如,当'O_CREAT'被指定为标志时。例如,当您打开一个文件供阅读时,谈论文件模式是没有意义的...... – 2013-03-01 06:07:03

4

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

open的POSIX文件指定这样的:

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