2011-11-10 60 views
6

在哪里或如何能够找到正确的C头文件包括在C++程序获得的C函数在POSIX兼容的环境声明的声明?头对于C POSIX功能

我问这个,因为我需要使用open()系统调用在我下我的目的++程序,所以我最初尝试包括约open()(在概要部分)的联机文档中提到的头,这是sys/stat.hfcntl.h。然而,当试图编译时,编译器抱怨open()未被声明。在谷歌搜索后,我发现另一种可能性是unistd.h。我尝试使用该标题和编译的程序。所以我回到了POSIX文档去了解更多关于unistd.h的信息,以检查是否有open()被提及,但我找不到任何关于它的信息。

我在做什么错?为什么POSIX文档和我的GCC环境之间存在这种差异?

回答

8

在我的Linux的Debian /希德,该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编译没有任何警告。