2013-03-01 17 views
8

Właśnie odkryłem, że open() (man 2 open) wywołanie systemowe ma dwie wersje:open() wywołanie systemowe polimorfizm

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

I rzeczywiście, można używać zarówno w pojedynczym pliku C i w obu przypadkach praca. W jaki sposób może to osiągnąć standard C?

+0

@ZhangYuan In C? Ani trochę. –

Odpowiedz

4

W rzeczywistości, to nie C++ - funkcja styl przeciążeniu. Tyle, że open() jest o zmiennej liczbie argumentów:

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

i tylko wtedy „flagi” wymagają, będzie wyglądać na trzeci argument.

+0

nie widział żadnego związku między flagami i trybem na stronie podręcznika. Możesz rozwinąć temat? – lang2

+0

@ lang2 tryb jest * używany tylko w razie potrzeby, * na przykład, gdy 'O_CREAT' jest określony jako flaga. Nie ma sensu mówić o trybie plików, gdy na przykład otwierasz plik do czytania ... –

4

Można to zrobić jako zmienną funkcję argumentu.

Dokumentacja POSIX dla open określa to tak:

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