我了解C语言是ISO standard,并且我从维基百科可以看到该标准包括29 header files,并且符合这些头文件,C应用程序在理论上是“可移植的”。
但是,实际上,我最近尝试在simple C HTTP server上进行使用不属于C标准的头文件的教程。因此,在这种情况下,我能想到的最简单的应用程序-包含单个int main(void)
函数且少于100行的C应用程序,其目的是侦听网络接口,超出了C标准?
在这种情况下,C语言规范和POSIX规范(假设我正在为Linux编写应用程序)之间有什么关系?
据我所知,“ man7.org”提供了C头文件的列表,这些头文件定义了所有Unix / Linux系统(我假设这与“ POSIX”相同)的API,如下所示:以及针对Linux平台的系统调用列表。
这包括82个头文件,其中29个C标准库头是其中的一个子集,以及大约1万个系统调用(至少我假设this list中不是头文件的所有内容都是系统调用) )。
我认为用C编写的任何具有合理功能的程序都将超出标准库并使用OS特定的头文件。说对在Linux上运行的应用程序进行编程实际上是“ POSIX编程”会不会更准确?
我想还可以坚持使用标准库,并定义自定义头文件,以便在POSIX和非POSIX系统(包括特定于平台的汇编例程)之间实现可移植逻辑实现。这曾经做过吗?
答案 0 :(得分:5)
POSIX不是一种语言规范,它是一种操作系统规范,其中只有一部分是更广泛的C库规范,以及对C语言本身需求的附加限制。在此类操作系统上实现。
有许多流行的跨平台库。 Apache Portable Runtime:
是一个与POSIX C规范最关注的领域有关的流行图书馆。Apache Portable Runtime(APR)项目的任务是创建和维护软件库,这些库为基础平台特定的实现提供可预测的一致接口。首要目标是提供一个API,软件开发人员可以在该API上进行编码,并确保可预测的行为(即使行为不相同),无论其软件所基于的平台是什么,从而使他们无需编写特殊情况下的代码即可解决或解决平台特定的缺陷或功能的优势。
APR包含socket和threads and processes之类的东西,可用于以最小的更改为各种操作系统(许多与Unix相似的操作系统和Windows)编译同一应用程序。
答案 1 :(得分:2)
POSIX不是标准,而是指定整个操作系统的标准家族。
POSIX C标准是标准C库的超集,这两者之间的关系在this other question
中有很好的描述。