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);
No, they just used variadic function.
This makes the last argument
modeoptional. 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
modeargument, so the user have to be extra careful to ensure only 2 or 3 arguments are passed, and the 3rd argument must be amode_t.BTW, if you check the
man 2 openfor BSD (including OS X) it shows the correct prototype as above.