“POSIX”是什么意思?

时间:2009-11-23 00:42:49

标签: linux unix posix terminology

什么是POSIX?我已经阅读了Wikipedia article,每次遇到这个词时我都会阅读它。事实是,我从未真正理解它是什么。

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

13 个答案:

答案 0 :(得分:538)

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

答案 1 :(得分:425)

最重要的事情POSIX 7定义

  1. C API

    非常extends ANSI C类似:

    • 更多文件操作:mkdirdirnamesymlinkreadlinklink(硬链接),poll(),{{1} },statnftw()
    • 流程和主题:syncforkexecl,信号量sem_*,共享内存(pipe),shm_*,调度参数(killnice),sched_*sleepsetpgid()
    • 网络:socket()
    • 内存管理:mkfifommapmlockmprotectbrk()
    • utilities:正则表达式(madvise

    这些API还确定了它们所依赖的基础系统概念,例如: reg*需要一个过程的概念。

    许多Linux system calls用于实现特定的POSIX C API函数并使Linux兼容,例如: forksys_write,...其中许多系统调用也具有特定于Linux的扩展名。

    主要的Linux桌面实现:glibc,在很多情况下只是为系统调用提供浅层包装。

  2. CLI utilities

    例如:sys_readcdls,...

    许多实用程序是相应C API函数的直接shell前端,例如, echo

    主要的Linux桌面实现:针对小型的GNU Coreutils,针对大型项目的单独GNU项目:mkdirsedgrep,...某些CLI实用程序由以下实现: Bash as built-ins

  3. Shell language

    ,例如awk

    主要Linux桌面实施:GNU Bash

  4. Environment variables

    例如:a=b; echo "$a"HOME

    PATH search semantics are specified,包括how slashes prevent PATH search

  5. Program exit status

    ANSI C表示PATH0表示成功,EXIT_SUCCESS表示失败,并保留其余实现。

    POSIX补充道:

  6. Regular expression

    有两种类型:BRE(基本)和ERE(扩展)。不推荐使用Basic,只保留不破坏API。

    这些是由C API函数实现的,并且在整个CLI实用程序中使用,例如128 + SIGNAL_ID默认接受BRE,grep接受ERE。

    例如:-E

    主要Linux实现:glibc实现regex.h下的函数,像echo 'a.1' | grep -E 'a.[[:digit:]]'这样的程序可以用作后端。

  7. Directory struture

    例如:grep/dev/null

    Linux FHS大大扩展了POSIX。

  8. Filenames

    • /tmp是路径分隔符
    • /无法使用
    • NUL.cwd为父母
    • 便携式文件名
      • 最多使用14个字符,完整路径使用256个
      • 只能包含:..

    另请参阅:what is posix compliance for filesystem?

  9. Command line utility API conventions

    不是强制性的,由POSIX使用,但几乎没有其他地方,特别是在GNU中。但事实是,它限制性太强,例如仅限单个字母标记(例如a-zA-Z0-9._-),没有双连字符长版本(例如-a)。

    一些广泛使用的惯例:

    • --all表示预期文件的stdin
    • -终止标记,例如--列出名为ls -- -l
    • 的目录

    另请参阅:Are there standards for Linux command line switches and arguments?

  10. " POSIX ACL" (访问控制列表),例如用作setfacl的后端。

    was withdrawn但已在多个操作系统中实施,包括in Linux with setxattr

  11. 谁符合POSIX?

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

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

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

    正式的认证系统列表可在以下网址找到:https://www.opengroup.org/openbrand/register/以及wiki page

    <强>窗

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

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

    在Windows 8中弃用了支持:

    2016年,一个新的官方Linux类API称为&#34;适用于Linux的Windows子系统&#34;宣布了。它包括Linux系统调用,ELF运行,部分-l文件系统,Bash,GCC,(TODO可能是glibc?),/proc等等: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第三方项目,用于提供实质性的POSIX API功能&#34;对于Windows,但如果您希望它在Windows&#34;上运行,则需要您从源代码重建应用程序。 MSYS2是一个相关项目,似乎在Cygwin之上添加了更多功能。

    <强>的Android

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

    奖金等级

    Linux Standard Base进一步扩展了POSIX。

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

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

答案 2 :(得分:65)

POSIX是:

  

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

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

答案 3 :(得分: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背后的整个历史。

答案 4 :(得分:27)

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

答案 5 :(得分:5)

  

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

从书中:Linux实用指南

答案 6 :(得分:2)

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

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

答案 7 :(得分:2)

Posix更像是一个操作系统,它是一个&#34;操作系统标准&#34;。你可以把它想象成一个虚构的操作系统,它实际上并不存在,但它有一个文档。这些论文是&#34; posix标准&#34;,由IEEE定义,IEEE是美国的大标准组织。 实现此规范的操作系统符合Posix标准&#34;。

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

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

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

答案 8 :(得分:2)

POSIX代表可移植操作系统接口,并且是旨在促进应用程序可移植性的IEEE标准。 POSIX是供应商联盟为创建UNIX的单个标准版本而进行的尝试。

答案 9 :(得分:0)

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

感谢Jed Smith&amp; Tinkertim指出我的错误 - 我的坏!!! :(

答案 10 :(得分:0)

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

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

最受欢迎的示例是GNU Bash,它是100%POSIX合规性和gawk实用程序。

答案 11 :(得分:0)

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

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

答案 12 :(得分:0)

关于POSIX的一些事实并非如此。

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

它设计用于使用具有单个CPU的单台计算机实现对本地存储的串行数据访问

从设计上讲,安全性并不是POSIX中的主要关注点,多年来,这导致了无数竞争条件攻击,并迫使程序员克服这些限制。

仍然发现了严重的错误,而更安全的POSIX API设计可以避免这些错误。

POSIX希望用户一次发出一个同步呼叫,并等待其结果后再发出下一个。当今的程序员希望一次发出许多异步请求,以提高整体吞吐量。

这种同步API对于访问远程和云对象尤其不利,因为在这种情况下,高延迟至关重要。