C POSIX函数的标题

时间:2011-11-10 22:22:06

标签: c++ gcc posix

在哪里或如何找到要包含在C ++程序中的正确C头以获取在符合POSIX的环境中声明的C函数的声明?

我问这个是因为我需要在我的C ++程序中使用open()系统调用来实现我的目的,所以我最初尝试包含在线文档中提到的关于open()(在概要部分),sys/stat.hfcntl.h。但是,在尝试编译时,编译器抱怨未声明open()。在谷歌搜索后,我发现另一种可能性是unistd.h。我尝试使用该标头和编译的程序。所以我回到POSIX文档来阅读更多关于unistd.h的信息,以检查那里是否提到open(),但我找不到任何相关信息。

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

1 个答案:

答案 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