Linux 黑话解释：什么是 POSIX？
POSIX，你肯定在各种在线论坛和文章中，听到过这个缩写，或读到过关于它的信息。
POSIX
POSIX，你肯定在各种在线论坛和文章中，听到过这个缩写，或读到过关于它的信息。
POSIX，你肯定在各种在线论坛和文章中，听到过这个缩写，或读到过关于它的信息。程序员和系统开发人员似乎最关心这个问题。它听起来很神秘，虽然有很多关于这个主题的好资料，但一些讨论区（简洁是它们的特点）并没有详细说明它是什么，这可能会让人困扰。那么，POSIX 到底是什么？


![](/data/attachment/album/202201/21/183018hcb77bg2kgy7gbmm.png)


### POSIX 简介


与其说 POSIX 是一个东西，不如说是一个标签。想象一下，有一个盒子，上面贴着标签：POSIX，而盒子里是一个标准。该标准由 POSIX 所关注的规则和指令集组成。**POSIX** 是<ruby> 可移植操作系统接口 <rt>  Portable Operating System Interface </rt></ruby> 的缩写。它是一个 IEEE 1003.1 标准，其定义了应用程序（以及命令行 Shell 和实用程序接口）和 UNIX 操作系统之间的语言接口。


当 UNIX 程序从一个 UNIX 平台移植到另一个平台时，遵守该标准可以确保其兼容性。POSIX 主要关注的是 AT&T 的 System V UNIX 和 BSD UNIX 的特性。


该标准必须阐明并遵循如何实现操作系统之间互操作性的目标的规则。POSIX 涵盖了以下内容：系统接口、命令和实用程序、网络文件访问，这里仅举几例（POSIX 的内容远不止这些）。


### 为什么有 POSIX？


一句话：可移植性。


60 多年前，如果程序员想让他们的软件在一个以上的系统上运行，就必须完全重写代码。由于所涉及的费用，这种情况并不经常发生，但在 1960 年代中期，可移植性成为一种特性 —— 不是通过 POSIX，而是在大型机领域。


IBM 推出了 System/360 系列的大型计算机。不同的型号有其独特的规范，但硬件使得它们可以使用同一个操作系统：OS/360。


不仅操作系统可以在不同的型号上运行，应用程序也可以在它们上面运行。这不仅降低了成本，而且创造了“计算机系统”：可以跨产品线协同工作的系统。今天，这一切都很常见，比如网络和系统，但在当时，这是一个巨大的进步！


![IBM System 360 | 图片来源：IBM](/data/attachment/album/202201/21/183018ehzz2f8988h7nq8s.jpg)


大约在同一时间，当 UNIX 出现的时候，它也做出了承诺，它可以在不同制造商的机器上运行。然而，当 UNIX 开始衍生出不同的流派时，在这些 UNIX 变体之间移植代码变得很困难。UNIX 可移植性的承诺正在失去基础。


为了解决这个可移植性问题，在 20 世纪 80 年代形成了 POSIX 标准。这个标准是在 AT&T 的 System V UNIX 和 BSD UNIX 的基础上定义的，这是当时最大的两个 UNIX 变体。值得注意的是，POSIX 的形成并不是为了控制操作系统的构建方式，任何公司都可以自由地以他们喜欢的方式设计他们的 UNIX 变体。POSIX 只关心应用程序与操作系统的接口是怎样的。用程序员的话来说，接口是一个程序的代码与另一个程序的通信方法。接口期望程序 A 向程序 B 提供特定类型的信息。同样地，程序 A 期望程序 B 用特定类型的数据来回答。


例如，如果我想用 `cat` 命令读取一个文件，我会在命令行上输入类似这样的内容：



```
cat myfile.txt

```

我不想说很多程序员的术语，简单的来说，`cat` 命令调用操作系统来获取文件，以便 `cat` 能够读取它。`cat` 读取它，然后在屏幕上显示文件的内容。在应用程序（`cat`）和操作系统之间有很多的相互作用。这种相互作用如何工作是 POSIX 所关心的。如果这种相互作用在不同的 UNIX 变体中是相同的，那么可移植性，无论操作系统、制造商和硬件如何，就可以重新获得了。


关于如何实现这一切的具体细节，在该标准中作了规定。


### 合规是自愿的


我们所有人都至少见过这样的信息：“如需帮助，请输入：XXXX -help”。这在 Linux 中很常见，但是这不符合 POSIX 标准。POSIX 从来没有要求双破折号，他们希望用一个破折号。双破折号来自 GNU，然而，它并没有损害 Linux，而且还为其增加了一点特性。同时，Linux 大部分都是兼容 POSIX 的，特别是在涉及到系统调用接口时。这就是为什么我们能够在 Linux、Sys V UNIX 和 BSD UNIX 上运行 X、GNOME 和 KDE 应用程序。各种命令，如 `ls`、`cat`、`grep`、`find`、`awk` 等，在不同的变体中操作相同。


作为一项规则，合规是一个自愿的步骤。当代码符合要求时，移到另一个系统上就比较容易，很少有必要或根本不需要重写代码。当代码可以在不同的系统上工作时，它的使用范围就会扩大。使用其他系统的人可以从使用该程序中受益。对于初出茅庐的程序员来说，学习如何编写符合 POSIX 标准的程序，就能对他们的职业生涯有所帮助。对于那些对 Linux 领域的合规性感兴趣的读者，可以在以下网站找到很多好的信息： [Linux 基本标准（LSB）](https://refspecs.linuxfoundation.org/lsb.shtml)。


### 但我不是程序员或系统设计师...


许多从事计算机工作的人并不是程序员或操作系统设计师。他们是医院的文员，是写信件、任务清单、听写备忘录的秘书，等等。其他人则是将数字制成表格，收集和整理数据，经营网上商店，写书和文章（我们中的一些人还会阅读这些文章）。几乎在每一个工作中，附近都可能有一台计算机。


POSIX 也影响着这些用户，不管他们是否知道。用户不一定要遵守这个标准，但他们确实希望他们的计算机能够工作。当操作系统和程序符合 POSIX 标准时，他们就获得了互操作性的好处。他们将能够从一个系统转移到另一个系统，并合理地期望这些机器能够像另一个系统那样工作。他们的数据仍然可以访问，他们仍然能够对其进行修改。


POSIX，以及其他标准，都在不断发展。随着技术的发展，标准也在发展。标准实际上是人们、制造商、组织等用来以有效的方式执行任务的商定系统。一个制造商的设备能够与另一个制造商的设备一起工作。想一想吧。你的蓝牙耳机可以在苹果手机上使用，也可以在安卓手机上使用。我们的电视可以连接到不同网络的视频和节目，如 Amazon Prime、BritBox、Hulu —— 仅举几例。现在，我们甚至可以用我们的手机监测心率。所有这些在很大程度上都是通过遵守标准而实现的。


好处多多。我喜欢这样。


### 那么 “X” 是什么？


我承认，我还没说过 POSIX 中的 “X” 是什么意思。[在一篇很好的文章中](https://opensource.com/article/19/7/what-posix-richard-stallman-explains)，Richard Stallman 解释了 POSIX 中的 “X” 是什么意思。用他的话来说就是这样：



> 
> IEEE 已经完成了规范的制定，但没有简洁的名称。标题是 “可移植的操作系统接口”，虽然我不记得确切的字眼了。委员会把 “IEEEIX” 作为简写。我不认为这是个好的选择。它的发音很难听 —— 听起来就像恐怖的尖叫声，“Ayeee！” —— 所以我预计人们会把这个规范叫为 “Unix”。
> 
> 
> 由于 GNU 不是 Unix，而它的目的是取代 Unix，我不希望人们把 GNU 称为 “Unix 系统”。因此，我提出了一个人们可能真正使用的简洁的名字。在没有特别灵感的情况下，我用了一种很笨的方式取了一个名字。我取了 “可移植操作系统” 的首字母并加上 “ix”。IEEE 马上就采用了这个名字。
> 
> 
> 


### 结论


POSIX 标准允许开发者使用大部分相同的代码在许多操作系统上创建应用程序、工具和平台。不管怎么说，按照标准写代码并不是一个要求，但当你想把你的代码移植到其他系统时，它确实有很大的帮助。


基本上，POSIX 是面向操作系统设计者和软件开发者的，但作为系统的使用者，无论我们是否意识到，我们都受到 POSIX 的影响。正是因为有了这个标准，我们才能够在一个 UNIX 或 Linux 系统上工作，并把工作带到另一个系统上，而且工作起来毫无障碍。作为用户，我们在可用性和跨系统的数据重复使用方面获得了许多好处。




---


via: <https://itsfoss.com/posix/>


作者：[Bill Dyer](https://itsfoss.com/author/bill/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出

