“POSIX”是什么意思?

问题描述 投票:774回答:14

什么是POSIX?我读过Wikipedia article,每次遇到这个词都会读到它。事实是,我从来没有真正理解它是什么。

任何人都可以通过解释“对POSIX的需求”向我解释一下吗?

linux unix posix terminology
14个回答
541
投票

POSIX是由IEEE指定的一系列标准,用于澄清和统一Unix-y操作系统提供的应用程序编程接口(以及辅助问题,如命令行shell实用程序)。当您编写程序以依赖POSIX标准时,您可以非常肯定能够轻松地将它们移植到大量的Unix衍生产品系列中(包括Linux,但不限于此!);如果你使用的某些Linux API没有标准化为Posix的一部分,那么如果你希望将来将该程序或库移植到其他Unix-y系统(例如MacOSX),你将会遇到更困难的时间。


2
投票

POSIX代表便携式操作系统接口,是一种旨在促进应用程序可移植性的IEEE标准。 POSIX是供应商联盟创建的单一标准版UNIX的尝试。


0
投票

POSIX为操作系统或程序定义了一组标准。目标是编写与类UNIX系统兼容的新软件。

例如,在Linux上运行的程序也可以在其他类UNIX系统上编译和运行,如Solaris,HP-UX和AIX等。

最受欢迎的例子是GNU Bash,它是100%POSIX兼容性和gawk实用程序。


0
投票

Posix管理互操作性,可移植性以及其他方面,例如fork的使用和机制,权限 和/ etc,/ var,/ usr等文件系统标准 。因此,当开发人员在符合Posix的系统(例如Linux)下编写程序时,通常(并非总是)保证在另一个符合posix的系统(例如IBM的AIX系统或Unix的其他商业变体)上运行。 Posix是一件好事,因此它可以简化软件开发,以实现最大程度的便携性。希望这个答案有意义。

感谢Jed Smith和Tinkertim指出我的错误 - 我的不好! :(


0
投票

关于如何使OS与后期UNIX OS兼容的规范(蓝图)(愿上帝保佑他!)。这就是为什么macOS和GNU / Linux具有非常相似的终端命令行,GUI,库等等。因为它们都是根据POSIX蓝图设计的。

POSIX没有告诉工程师和程序员如何编码,而是编码什么。


0
投票

关于POSIX的一些事实并不那么明亮。

POSIX也是系统调用接口或API,它已有将近30年的历史。

它设计用于使用单CPU的单台计算机对本地存储进行序列化数据访问。

安全性不是POSIX设计中的主要问题,多年来导致众多竞争条件攻击并迫使程序员解决这些限制。

仍然会发现严重的错误,可以通过更安全的POSIX API设计避免错误。

POSIX希望用户一次发出一个同步调用,并在发出下一个调用之前等待其结果。今天的程序员希望一次发出许多异步请求,以提高整体吞吐量。

这种同步API对于访问高延迟很重要的远程和云对象特别糟糕。


433
投票

POSIX 7定义的最重要的事情

  1. C API 非常extends ANSI C与以下的事情: 更多文件操作:mkdirdirnamesymlinkreadlinklink(hardlinks),poll()statsyncnftw() 进程和线程:forkexeclpipe,semaphors sem_*,共享内存(shm_*),kill,调度参数(nicesched_*),sleepmkfifosetpgid() 网络:socket() 记忆管理:mmapmlockmprotectmadvisebrk() 实用程序:正则表达式(reg*) 这些API还确定了它们所依赖的基础系统概念,例如, fork需要一个过程的概念。 存在许多Linux system calls来实现特定的POSIX C API函数并使Linux兼容,例如sys_writesys_read,......其中许多系统调用也有特定于Linux的扩展。 主要的Linux桌面实现:glibc,在很多情况下只是为系统调用提供浅层包装。
  2. CLI utilities 例如:cdlsecho,...... 许多实用程序是用于相应C API函数的直接shell前端,例如, mkdir。 主要的Linux桌面实现:针对小型的GNU Coreutils,针对大型的GNU Coreutils:sedgrepawk,......一些CLI实用程序由Bash as built-ins实现。
  3. Shell language 例如,a=b; echo "$a" 主要的Linux桌面实现:GNU Bash
  4. Environment variables 例如:HOMEPATHPATH search semantics are specified,包括how slashes prevent PATH search
  5. Program exit status ANSI C表示0EXIT_SUCCESS表示成功,EXIT_FAILURE表示失败,并保留其余的实现。 POSIX补充说: 126:发现命令但不可执行。 127:命令未找到。 > 128:被信号终止。 但POSIX似乎没有指定Bash使用的128 + SIGNAL_ID规则:https://unix.stackexchange.com/questions/99112/default-exit-code-when-process-is-terminated
  6. Regular expression 有两种类型:BRE(基本)和ERE(扩展)。不推荐使用Basic,只保留不破坏API。 它们由C API函数实现,并在整个CLI实用程序中使用,例如, grep默认接受BRE,使用-E接受ERE。 例如:echo 'a.1' | grep -E 'a.[[:digit:]]' 主要的Linux实现:glibc实现了regex.h下的函数,像grep这样的程序可以用作后端。
  7. Directory struture 例如:/dev/null/tmp Linux FHS极大地扩展了POSIX。
  8. Filenames /是路径分隔符 NUL不能使用 .cwd..的父母 便携式文件名 最多使用14个字符和256个完整路径 只能包含:a-zA-Z0-9._- 另见:what is posix compliance for filesystem?
  9. Command line utility API conventions 不是强制性的,由POSIX使用,但几乎没有其他地方,特别是在GNU中。但事实是,它限制性太强,例如仅限单个字母标记(例如-a),没有双连字符长版本(例如--all)。 一些广泛使用的惯例: -表示stdin,其中包含文件 --终止标志,例如ls -- -l列出名为-l的目录 另见:Are there standards for Linux command line switches and arguments?
  10. “POSIX ACL”(访问控制列表),例如用作setfacl的后端。 这个was withdrawn但它是在几个操作系统中实现的,包括in Linux with setxattr

谁符合POSIX?

许多系统都严格遵循POSIX,但实际上很少有Open Group认证,它保持了标准。值得注意的认证包括:

  • OS X(Apple)X代表10和UNIX。是第一个Apple POSIX系统,大约在2001年发布。参见:Is OSX a POSIX OS?
  • AIX(IBM)
  • HP-X(HP)
  • Solaris(Oracle)

大多数Linux发行版非常合规,但未经认证,因为他们不想支付合规性检查。 Inspur's K-UXHuawei's EulerOS是两个经过认证的例子。

官方认证系统清单可在以下网址找到:https://www.opengroup.org/openbrand/register/wiki page

视窗

Windows在其某些专业发行版上实现了POSIX。

由于它是一个可选功能,程序员不能依赖它来支持大多数最终用户应用程序。

Windows 8中不支持支持:

2016年,宣布了一个名为“Linux子系统Linux”的新的类似Linux的官方API。它包括Linux系统调用,ELF运行,部分/proc文件系统,Bash,GCC,(TODO可能是glibc?),apt-get等:https://channel9.msdn.com/Events/Build/2016/P488所以我相信它将允许Windows运行很多(如果不是全部)POSIX。但是,它专注于开发人员/部署而非最终用户。特别是,没有计划允许访问Windows GUI。

官方Microsoft POSIX兼容性的历史概述:http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/

Cygwin是一个众所周知的GPL第三方项目,为Windows“提供了大量的POSIX API功能”,但要求您“从源代码重建应用程序,如果您希望它在Windows上运行”。 MSYS2是一个相关项目,似乎在Cygwin之上添加了更多功能。

Android的

Android拥有自己的C库(Bionic),从Android O:Is Android POSIX-compatible?开始,它不完全支持POSIX

奖金水平

Linux Standard Base进一步扩展了POSIX。

使用非帧索引,它们更易读和可搜索:http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html

获取HTML页面的完整压缩版本以进行grepping:Where is the list of the POSIX C API functions?


65
投票

POSIX是:

POSIX(发音为/pɒzɪks/)或“便携式操作系统接口[用于Unix]”1是IEEE指定的一系列相关标准的名称,用于定义应用程序编程接口(API),以及用于软件的shell和实用程序接口虽然该标准适用于任何操作系统,但与Unix操作系统的变体兼容。

基本上,它是一组措施,通过(大多数)常见的API和实用程序来缓解开发和使用不同版本UNIX的痛苦。有限的POSIX合规性也扩展到各种版本的Windows。


40
投票

让我给出粗略的“非正式”解释。

POSIX是一组标准,它试图将“UNIX”和类UNIX系统与那些与它们不兼容的系统区分开来。它是由美国政府为采购目的而创建的。其想法是,美国联邦采购需要一种方法来合法地指定各种投标和合同的要求,其方式可以用于排除给定现有代码库或编程人员不可移植的系统。

由于POSIX是事后编写的......用于描述一组松散相似的竞争系统......它不是以可以实现的方式编写的。

因此,例如,Microsoft的NT编写时具有足够的POSIX一致性以符合某些出价......即使POSIX子系统在实际可移植性和与UNIX系统的兼容性方面基本上没用。

几十年来,已经编写了各种其他UNIX标准。诸如SPEC1170(指定了必须兼容的一百一十七个函数调用)和SUS(单一UNIX规范)的各种版本之类的东西。

在大多数情况下,这些“标准”不适用于任何实际的技术应用。它们最常用于论证,法律争论和其他功能失调的原因。


28
投票

POSIX是IEEE和The Open Group提出的一套标准,描述了理想的Unix如何运作。程序员,用户和管理员都可以熟悉POSIX文档,并期望POSIX投诉Unix提供所有提到的标准工具。

由于每个Unix的工作方式都有所不同 - Solaris,Mac OS X,IRIX,BSD和Linux都有它们的怪癖 - POSIX对业界人士特别有用,因为它定义了一个标准的操作环境。例如, C库中的大多数功能都基于POSIX;因此,程序员可以在他的应用程序中使用一个程序员,并期望它在大多数Unices中表现相同。

然而,Unix的不同领域通常是焦点,而不是标准的。

关于POSIX的好处是欢迎您自己阅读:

The Open Group Base Specifications Issue 7

问题7被称为POSIX.1-2008,并且有新的东西 - 但是,用于POSIX.1的Google-fu等可以让你看到Unix背后的整个历史。


27
投票

POSIX是操作系统的标准,应该可以更容易地编写跨平台软件。这在Unix世界中是一个特别重要的事情。


5
投票

1985年,来自整个计算机行业公司的个人联合起来开发了POSIX(计算机环境的可移植操作系统接口)标准,该标准主要基于UNIX System V接口定义(SVID)和其他早期的标准化工作。这些努力是由美国政府推动的,美国政府需要一个标准的计算环境来尽量减少其培训和采购成本。 POSIX于1988年发布,是一组IEEE标准,用于定义操作系统的API,shell和实用程序接口。虽然针对类UNIX系统,但标准可适用于任何兼容的操作系统。现在这些标准已经获得认可,软件开发人员能够开发在所有符合UNIX,Linux和其他操作系统版本上运行的应用程序。

从书中:Linux的实用指南


2
投票

该标准为类Unix操作系统提供了通用基础。它指定了shell应该如何工作,对ls和grep等命令的期望,以及C作者可以期望的许多C库。

例如,命令行用户用来串联命令的管道在这里详细说明,这意味着C的popen(管道打开)功能是POSIX标准,而不是ISO C标准。


2
投票

Posix更像是一个操作系统,它是一个“操作系统标准”。您可以将它想象成一个虚构的操作系统,它实际上不存在,但它有一个文档。这些论文是由IEEE定义的“posix标准”,IEEE是美国的标准组织。实现此规范的操作系统是“Posix兼容的”。

政府法规在其投资中更喜欢符合Posix标准的解决方案,因此符合Posix标准具有显着的财务优势,特别是对于美国的大型IT公司而言。

对完全符合posix标准的操作系统的奖励,它保证它将无缝地编译和运行所有符合Posix的应用程序。

Linux是最知名的。 OSX,Solaris,NetBSD和Windows NT也在这里播放。 Free-和OpenBSD只是“几乎”与Posix兼容。 WinNT的posix兼容性只是避免上述政府监管的伪解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.