在哪里或如何找到要包含在C ++程序中的正确C头以获取在符合POSIX的环境中声明的C函数的声明?
我问这个是因为我需要在我的C ++程序中使用open()
系统调用来实现我的目的,所以我最初尝试包含在线文档中提到的关于open()
(在概要部分),sys/stat.h
和fcntl.h
。但是,在尝试编译时,编译器抱怨未声明open()
。在谷歌搜索后,我发现另一种可能性是unistd.h
。我尝试使用该标头和编译的程序。所以我回到POSIX文档来阅读更多关于unistd.h
的信息,以检查那里是否提到open()
,但我找不到任何相关信息。
我做错了什么?为什么POSIX文档和我的GCC环境之间存在这种差异?
答案 0 :(得分:9)
在我的Linux Debian / Sid上,man 2 open
页面声明:
SYNOPSIS
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
因此,您需要在文件以上包含所有三个。并且open
在/usr/include/fcntl.h
中声明,但需要来自其他两个的声明包括。
以下测试文件
/* file testopen.c */
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int
testopen (void)
{
return open ("/dev/null", O_RDONLY);
}
在没有任何警告的情况下编译gcc -Wall -c testopen.c
。