2011-11-10 103 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編譯沒有任何警告。