我是否应该包含手册页概要中列出的任何或所有标题?

时间:2014-01-10 19:27:07

标签: c linux posix bsd man

例如,取open(2),其中包含以下概要:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

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

我应该包含所有这些头文件还是其中任何一个?在前一种情况下,我如何知道哪些头文件包含哪些函数,宏和typedef?

4 个答案:

答案 0 :(得分:7)

你应该包括所有这些。 POSIX规范将告诉你每个中的内容(例如,this是fcntl.h的POSIX规范),或者至少保证每个中的内容。

答案 1 :(得分:1)

您应该包含所有这些头文件。概要中提到的标题都应包括在内。

答案 2 :(得分:1)

AFAIK,您应该包含所有这些头文件。为什么你最终要包含所有头文件包含宏,函数或typedef?

答案 3 :(得分:1)

只需要<fcntl.h>open有两个手册页。 http://linux.die.net/man/2/openhttp://linux.die.net/man/3/open

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
int creat(const char *pathname, mode_t mode);

如果您使用mode_t重载,则需要<sys/types.h>

#include <sys/stat.h>
#include <fcntl.h>

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

对于后一种重载,opengroup.org认为<sys/stat.h>是可选的。此外,也不需要<sys/types.h>

  

要求包含&lt; sys / types.h&gt;已被删除。虽然    是符合以前实施的要求   POSIX规范,UNIX应用程序不需要它。