Search code examples
clinuxoverloadingmanpage

Why does 'man 2 open' say that there are two kinds of open?


I ran into this question while typing man 2 open. It says that there are two kinds of open, one with two args, and one with three! last time i checked we could not overload functions in C. How did they do this? did they write in C++?

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

Solution

  • No, they just used variadic function.

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

    This makes the last argument mode optional. The prototypes only show how the function should be used, not the actual interface.

    Of course, unlike real overloading, the compiler cannot type-check the mode argument, so the user have to be extra careful to ensure only 2 or 3 arguments are passed, and the 3rd argument must be a mode_t.


    BTW, if you check the man 2 open for BSD (including OS X) it shows the correct prototype as above.