【问题标题】:Headers for C POSIX functionsC POSIX 函数的标头
【发布时间】:2011-11-10 22:22:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ gcc posix


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 2019-04-26
      • 2013-09-11
      • 1970-01-01
      相关资源
      最近更新 更多