C POSIX函数的头文件

5

我应该在哪里或如何寻找正确的C头文件,以便在一个POSIX兼容环境中声明C函数?

我问这个问题是因为我需要在我的C++程序中使用open()系统调用,因此我最初尝试包含在线文档关于open()(在SYNOPSIS部分)中提到的头文件,它们是sys/stat.hfcntl.h。然而,在尝试编译时,编译器报告open()未被声明。在Google上搜索后,我发现另一个可能性是unistd.h。我尝试使用那个头文件,程序编译成功了。所以我回到POSIX文档阅读更多关于unistd.h的信息,检查是否在其中提到了open(),但我没有找到任何关于它的内容。

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

1个回答

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编译没有任何警告。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接