欢迎,来自IP地址为:44.221.66.130 的朋友


我们可能遇到过 POSIX 这个术语,本文将系统介绍它是什么以及为什么程序员经常讨论 POSIX 合规性。

我们常常会在不同的在线论坛和文章中听到或读到这个缩写词:POSIX。程序员和系统开发人员似乎最担心这个问题。

这听起来可能很神秘,虽然关于这个主题有很多好的资料来源,但如果不详细说明它是什么,这可能会导致混乱。那么,POSIX 到底是什么?

什么是 POSIX

POSIX 是便携式操作系统接口的缩写(Portable Operating System Interface),它是一个 IEEE 1003.1 标准,定义了应用程序(以及命令行 shell 和实用程序接口)和 UNIX 操作系统之间的语言接口。

POSIX 实际上并不是一个东西,但它描述了一个东西,这很像一个标签。想象一个标有”POSIX”的盒子,盒子里面是一个标准。标准由 POSIX 相关的一组规则和指令组成。

遵守该标准可确保 UNIX 程序从一个 UNIX 平台转换到另一个平台时的兼容性。POSIX 的重点主要在于 AT&T 的 System V UNIX 和 BSD UNIX 之间的兼容性。

因此,必须制定一个标准并遵循有关如何实现操作系统之间互操作性目标的规则。POSIX 涵盖了以下内容:系统接口、命令和实用程序、网络文件访问等。当然,POSIX 的内容还远不止这些。

为什么使用 POSIX

一言以蔽之:便携性。

60 多年前,如果程序员希望自己的软件在多个系统上运行,就必须完全重写代码。由于涉及费用,这种情况并不经常发生,但可移植性在 20 世纪 60 年代中期成为一个特征,首先在大型机领域出现。

IBM 推出了 System/360 系列大型计算机。不同的型号有其独特的专业性,但使用的硬件又支持它们使用相同的操作系统:OS/360。

操作系统不仅可以在不同的型号大型机上运行,应用程序也可以在它们上运行。这不仅降低了成本,而且还创建了计算机系统——跨产品线的可以协同工作的系统。如今来看,这一切都很常见——网络和系统,但在当时,这是巨大的进步!

而当 UNIX 大约在同一时间问世时,它也显示出了可以在不同制造商的机器上运行的前景。然而,当 UNIX 开始出现不同的发行版本时,跨这些 UNIX 变体移植代码变得困难。UNIX 可移植性的优势正在丢失。

为了解决这个可移植性问题,POSIX 在 20 世纪 80 年代诞生。该标准是基于 AT&T 的 System V UNIX 和 BSD UNIX(当时最大的两个变体)定义的。值得注意的是,POSIX 的形成并不是为了控制操作系统的构建方式——任何公司都可以按照自己喜欢的方式自由设计其 UNIX 变体。POSIX 只关心应用程序如何与操作系统交互。用程序员的话说,接口是一个程序代码可以与另一个程序进行通信的方法。该接口期望程序 A 向程序 B 提供特定类型的信息;同样,程序 A 期望程序 B 以特定类型的数据进行答复。

例如,如果我们想使用 cat 命令读取文件,会在命令行中输入如下内容:

# cat file.txt

cat 命令调用操作系统来获取文件,以便 读取它。当 cat 读取到文件后,就会在屏幕上显示文件的内容。

应用程序(cat)和操作系统之间有很多相互作用。而 POSIX 感兴趣的是这种相互作用的工作原理。如果不同 UNIX 变体之间的相互作用是相同的,那么无论操作系统、制造商和硬件如何,都可以获得可移植性。

合规自愿性原则

我们很多人都见过这样的消息:“for help, type: xxxxx –help.” 这在 Linux 中非常常见,并且不符合 POSIX 标准。POSIX 从来不需要双破折号,他们使用单破折号,双破折号来自 GNU。然而,这并没有损害 Linux,而且还增加了一点它的特性。同时,Linux 基本上是兼容的,尤其是在系统调用接口方面。这就是为什么我们能够在 Linux、Sys V UNIX 和 BSD UNIX 上运行 X、GNOME 和 KDE 应用程序。同时,各种命令(例如 ls、cat、grep、find、awk 等)在不同变体中的操作方式相同。

一般来说,遵守是自愿的第一步。当代码合规时,就更容易迁移到另一个系统;几乎不需要重写代码(如果有的话)。当代码可以在不同的系统上运行时,它的用途就会扩大。使用其他系统的人可以从该程序的使用中受益。

POSIX 标准允许开发人员使用大部分相同的代码在许多操作系统上创建应用程序、工具和平台。虽然不强制根据标准编写代码,但如果想要将代码移植到其他系统时,它确实会在很大程度上提供帮助。

基本上,POSIX 面向操作系统设计者和软件开发者。但作为系统的用户,无论我们是否意识到,我们都会受到 POSIX 的影响。 正是由于有了该标准,我们才能够在一个 UNIX 或 Linux 系统上工作,并将该工作转移到另一个系统上顺利运行。作为用户,我们在跨系统的可用性和数据重用方面获得了许多好处。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注