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

前端 未结 3 2135
北恋
北恋 2021-02-19 01:10

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

3条回答
  •  后悔当初
    2021-02-19 01:56

    For what it's worth, the man page is incorrect. The prototypes it shows:

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

    are not equivalent to the correct prototype:

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

    Using the incorrect ones it provides (e.g. if you prototype the function yourself rather than including the right header) will cause your program to have undefined behavior. (And this is not just theoretical; it will probably fail to run on x86_64 and other platforms with pass-by-register ABIs.)

    What the man page was trying to express (and doing a very poor job of) is that the variadic part of open's argument list can be either empty or a single mode_t type argument, where the absence or presence of the optional argument depends on the value of flags.

提交回复
热议问题