首页 文章

“POSIX”是什么意思?

提问于
浏览
731

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

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

13 回答

  • 503

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

  • 4

    Most important things POSIX 7 defines

    非常extends ANSI C,有:

    • 更多文件操作: mkdirdirnamesymlinkreadlinklink (hardlinks), pollsync

    • 进程和线程: forkexeclpipe ,semaphors sem_* ,共享内存( shm_* ), kill ,调度参数( nicesched_ ), sleep

    • 网络

    • 正则表达式

    • 高级内存管理: mmapmlockmprotectmadvise

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

    存在许多Linux系统调用来实现特定的POSIX C API函数并使Linux兼容,例如, sys_writesys_read ,...

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

    例如: cdlsecho ,...

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

    主要的Linux桌面实现:针对小型的GNU Coreutils,针对大型的GNU Coreutils: sedgrepawk ,...某些CLI实用程序由Bash as built-ins实现 .

    例如, a=b; echo "$a"

    主要的Linux桌面实现:GNU Bash .

    例如: HOMEPATH .

    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

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

    它们由C API函数实现,并在整个CLI实用程序中使用,例如, grep 默认接受BRE,并使用 -E 接受ERE .

    例如: echo 'a.1' | grep -E 'a.[[:digit:]]'

    主要的Linux实现:glibc实现regex.h下的函数,像 grep 这样的程序可以用作后端 .

    例如: /dev/null/tmp

    Linux FHS极大地扩展了POSIX .

    • Filenames

    • / 是路径分隔符

    • NUL 无法使用

    • .cwd.. parent

    • 便携式文件名

    • 最多使用14个字符,完整路径使用256个字符

    • 只能包含: a-zA-Z0-9._-

    另见:what is posix compliance for filesystem?

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

    一些广泛使用的惯例:

    • - 表示需要文件的stdin

    • -- 终止标志,例如 ls -- -l 列出名为 -l 的目录

    另见:Are there standards for Linux command line switches and arguments?

    Who conforms to POSIX?

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

    • OS X(Apple)X代表10和UNIX . 是第一款Apple POSIX系统,大约在2001年发布 . 参见: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

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

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

    Windows 8中不支持支持:

    在2016年,宣布了一个名为"Windows Subsystem for 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是针对Windows的"provides substantial POSIX API functionality"的众所周知的GPL第三方项目,但需要您"rebuild your application from source if you want it to run on Windows" . MSYS2是一个相关项目,似乎在Cygwin之上添加了更多功能 .

    Android

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

    Bonus level

    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

    POSIX是:

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

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

  • 38

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

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

    由于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的好处是欢迎您自己阅读:

    公开集团基本规格问题7

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

  • 2

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

  • 64

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

    从书中:Linux的实用指南

  • 0

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

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

  • 0

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

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

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

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

  • 24

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

    POSIX is also the system call interface or API, and it is nearly 30 years old.

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

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

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

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

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

  • 0

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

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

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

  • 1

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

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

  • 383

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

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

相关问题