POSIX和C语言之间是什么关系?

Zac*_*ith 6 c linux posix

我知道C语言是ISO标准,并且我从Wikipedia可以看到该标准包含29个头文件,并且符合这些头文件的C应用程序在理论上是“可移植的”。

但是,实际上,我最近尝试在一个简单的C HTTP服务器上做一个教程,该服务器使用不属于C标准的头文件。因此,在这种情况下,我能想到的最简单的应用程序-包含单个int main(void)功能且少于100行的C应用程序,其目的是侦听网络接口,是否超出了C标准?

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

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

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

我假设任何用C编写的合理功能的程序都将超出标准库,并使用OS特定的头文件。说对在Linux上运行的应用程序进行编程实际上就是“ POSIX编程”,是否会更准确?

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

Ant*_*ala 6

POSIX不是一种语言规范,它是一种操作系统规范,其中只有一部分是更广泛的C库规范,以及对如何在此类操作系统上实现C语言本身的附加限制。

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

Apache Portable Runtime(APR)项目的任务是创建和维护软件库,这些库为基础平台特定的实现提供可预测的一致接口。首要目标是提供一个API,软件开发人员可以使用该API进行编码,并确保可预测的行为(即使行为不相同),无论其软件所基于的平台是什么,从而使他们无需编写特殊情况下的代码即可解决或解决特定于平台的缺陷或功能的优势。

APR包含套接字线程和进程之类的内容,可用于以最小的更改为各种操作系统(许多类Unix和Windows)编译同一应用程序。