2013-03-01 50 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, ...);