【问题标题】:What is the relationship between POSIX and the C language?POSIX和C语言有什么关系?
【发布时间】:2019-10-04 22:04:31
【问题描述】:

我了解C语言是ISO standard,我从维基百科可以看到标准包括29 header files,并且符合这些头文件,C应用程序理论上是“可移植的”。

然而,在实践中,我最近尝试在 simple C HTTP server 上编写教程,该教程使用不属于 C 标准的头文件。所以在这种情况下,我能想到的最简单的应用程序 - 一个包含单个 int main(void) 函数的 C 应用程序,不到 100 行,目的是在网络接口上侦听超出 C 标准?

在这种情况下,作为规范的 C 语言与(假设我正在为 Linux 编写应用程序)作为语言的 POSIX 规范之间的关系是什么?

据我所知,“man7.org”提供了定义所有 Unix/Linux 系统(我假设这与“POSIX”相同)系统的 API 的 C 头文件列表,如以及 Linux 平台的系统调用列表。

这包括 82 个头文件,其中 29 个 C 标准库头是一个子集,以及大约 10 000 个系统调用(至少我假设 this list 中不是头文件的所有内容都是系统调用)。

我假设任何用 C 编写的功能合理的程序都将超越标准库并使用操作系统特定的头文件。说在 Linux 上运行应用程序实际上是“POSIX 编程”不是更准确吗?

我想也可以坚持使用标准库,并为跨 POSIX 和非 POSIX 系统的可移植逻辑实现定义自定义头文件(包括特定于平台的汇编例程)。这样做过吗?

【问题讨论】:

    标签: c linux posix


    【解决方案1】:

    POSIX 不是一种语言的规范,它是一种操作系统的规范,其中一部分是更广泛的 C 库规范以及对 C 语言本身需要的附加限制在这样的操作系统上实现。

    有许多流行的跨平台库。 Apache Portable Runtime 是 POSIX C 规范最关心的领域的一个流行库:

    Apache Portable Runtime (APR) 项目的使命是创建和维护软件库,为特定平台的底层实现提供可预测且一致的接口。主要目标是提供一个 API,软件开发人员可以对其进行编码,并确保无论他们的软件构建在哪个平台上,即使不完全相同的行为也是可预测的,从而使他们无需编写特殊情况条件来解决或采取平台特定缺陷或功能的优势。

    APR 包括 sockets 和 threads and processes 之类的东西,可用于为各种操作系统(许多类似 unix 的操作系统和 Windows)编译相同的应用程序,只需进行少量更改。

    【讨论】:

    • 谢谢 - 另一个问题。系统调用是 POSIX 规范的一部分吗?这些系统调用中有很多是用 C 编程的吗?
    • @ZachSmith 这个问题在这里得到了回答:stackoverflow.com/questions/30155858/…
    【解决方案2】:

    POSIX 不是一个标准,而是一个标准系列,它指定了整个操作系统。

    POSIX C 标准是标准 C 库的超集,这两者之间的关系在this other question中有很好的描述

    【讨论】:

      猜你喜欢
      • 2011-01-22
      • 2010-11-18
      • 2021-08-07
      • 2017-07-31
      • 2015-05-16
      • 2021-03-24
      • 1970-01-01
      • 2020-03-05
      • 2015-04-30
      相关资源
      最近更新 更多