关于linux:“POSIX”是什么意思?

What is the meaning of “POSIX”?

什么是POSIX?我读过维基百科的文章,每次遇到这个词我都会读。事实上,我从来没有真正理解它是什么。

有人能给我解释一下"posix的需求"吗?


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


POSIX7定义的最重要的东西好的。

  • 计算机辅助编程接口好的。

    极大地扩展了ansi c,包括:好的。

    • 更多的文件操作:mkdirdirnamesymlinkreadlinklink(硬链接)、poll()statsyncnftw()
    • 进程和线程:forkexeclpipe、信号量sem_*、共享内存(shm_*kill、调度参数(nicesched_*sleepmkfifosetpgid()
    • 联网:socket()
    • 内存管理:mmapmlockmprotectmadvisebrk()
    • 实用程序:正则表达式(reg*)

    这些API还决定了它们所依赖的底层系统概念,例如,fork需要一个过程概念。好的。

    存在许多Linux系统调用来实现特定的posix c api函数并使Linux兼容,例如sys_writesys_read…。然而,其中许多系统调用也有特定于Linux的扩展。好的。

    主要的Linux桌面实现:glibc,在许多情况下,它只是为系统调用提供一个简单的包装器。好的。

  • CLI实用程序好的。

    例如:cdlsecho……好的。

    许多实用程序是对应C API函数的直接shell前端,例如mkdir。好的。

    主要的Linux桌面实现:小的GNU coreutils,大的单独GNU项目:sedgrepawk…。一些CLI实用程序是由bash作为内置组件实现的。好的。

  • 外壳语言好的。

    例如,a=b; echo"$a"。好的。

    主要的Linux桌面实现:GNUBash。好的。

  • 环境变量好的。

    例如:HOMEPATH。好的。

    指定了PATH搜索语义,包括斜杠如何防止PATH搜索。好的。

  • 程序退出状态好的。

    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(扩展)。基本的被弃用,只保留不中断API。好的。

    这些是由C API函数实现的,并在cli实用程序中使用,例如grep默认接受bres,而eres使用-E。好的。

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

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

  • 目录结构好的。

    例如:/dev/null/tmp。好的。

    LinuxFHS极大地扩展了POSIX。好的。

  • 文件名好的。

    • 字母名称
    • 字母名称
    • 爱德华X1
    • 便携式文件
      • Use at most max 14 chars and 256 for the full path
      • Can only contain:EDOCX1

    (P)See also:What is posix compliance for filesystem?好的,好的。

  • (P)Command Line Utility API Conventions好的,好的。(P)Not mandatory,used by posix,but almost now here else,notably not in GNU.但实际上,这是一种限制,E.G.Single Letter Flags Only(E.G.EDOCX1 Anual 6),而不是Double Hyphen Long versions(E.G.EDOCX1 Anual 7)。好的,好的。(P)a FEW Widely Used Conventions:好的,好的。
    • EDOCX1语言8音译:一份文件在哪里等待
    • EDOCX1 9极致的旗子,E.G.EDOCX1音符10-List a directory named EDOCX1

    (P)See also:Are there standards for Linux command line switches and arguments?好的,好的。

  • (P)"Posix acls"(access control lists),e.g.as used as backend for EDOCX1.好的,好的。(P)This was withdrawn but it was implemented in several Oses,including in Linux with EDOCX1 original 13.好的,好的。
  • (P)谁会舒服呢?好的,好的。(P)Many systems follow posix closely,but few are actually certificated by the open group which maintains the standard.值得注意的证明包括:好的,好的。

    • OS X(Apple)x stands for both 10 and unix.was the first apple posix system,released Circa 2001.See also:is OSX a posix os?
    • AIX(IBM)
    • HP-UX(HP)
    • 索拉里斯(Oracle)

    (P)大多数Linux Distros are very compliant,but not certificated because they don't want to pay the compliance check.Inspur's K-UX and Huawei's Euleros are two certificated examples.好的,好的。(P)The official list of certificated systems be found at:https://www.opengroup.org/openbrand/register/and also at the wiki page.好的,好的。(P)视窗好的,好的。(P)Windows implemented posix on some of its professional distributions.好的,好的。(P)由于这是一个可选的特点,方案不能为大多数用户的应用提供信息。好的,好的。(P)Support was deported in windows 8:好的,好的。

    • 微软Windows'7 posex implementation currently stand?
    • https://superuser.com/questions/495360/does-windows-8-still-implement-posix
    • Feature request:https://windows.uservoice.com/forums/265757-windows-feature-suggestions/suggestions/6573649-full-posex-support

    (P)在2016年,一个新的官方Linux-like Api called"Windows subsstem for Linux"was announced.包括Linux System Calls,Elf Running,Parts of the EDOCX1 English 14 FilesSystem,Bash,GCC,(All Likely Glibc?)EDOCX1和More:https://channel9.msdn.com/events/build/2016/p488 so I believe that it will allow windows to run much,if not all,of posix.然而,它侧重于开发商/Deployment Instead of End Users。特别是,有无计划可供使用的视窗指南。好的,好的。(P)Historical overview of the official Microsoft posix compatibility:http://brianreiter.org/2010/08/24/the-sad-history-of-the-Microsoft-posix-subsstem/好的,好的。

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

    安卓好的。

    Android有自己的C库(Bionic),自Android O起,它不完全支持POSIX:Android POSIX兼容吗?好的。

    奖金水平好的。

    Linux标准库进一步扩展了POSIX。好的。

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

    获取HTML页面的完整压缩版本进行grepping:posix c api函数的列表在哪里?好的。好啊。


    POSIX是:

    POSIX (pronounced /?p?z?ks/) or
    "Portable Operating System Interface
    [for Unix]"1 is the name of a family
    of related standards specified by the
    IEEE to define the application
    programming interface (API), along
    with shell and utilities interfaces
    for software compatible with variants
    of the Unix operating system, although
    the standard can apply to any
    operating system.

    基本上,它是一套通过拥有(大部分)通用API和实用程序来减轻开发和使用不同风格Unix的痛苦的措施。有限的POSIX遵从性也扩展到了各种版本的Windows。


    让我给你一个粗俗的"非官方"解释。

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

    因为posix是事后写的…描述一组松散相似的竞争系统…它不是以可以实现的方式编写的。

    因此,例如,微软的NT是以足够的POSIX一致性来编写的,以符合一些投标的条件…尽管POSIX子系统在实际的可移植性和与UNIX系统的兼容性方面基本上是无用的。

    在过去的几十年中,已经编写了各种其他的Unix标准。像spec1170(指定了1170个函数调用,必须兼容地实现)和sus的各种体现(单个unix规范)。

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


    POSIX是由IEEE和开放组提出的一组标准,描述理想的UNIX如何运行。程序员、用户和管理员都可以熟悉POSIX文档,并期望POSIX投诉Unix提供所提到的所有标准工具。

    由于每个Unix的操作方式都有一些不同——Solaris、Mac OS X、IRIX、BSD和Linux都有其独特之处——POSIX对业界的用户尤其有用,因为它定义了一个标准的操作环境。例如,C库中的大多数函数都基于POSIX;因此,程序员可以在其应用程序中使用一个函数,并期望它在大多数unice中的行为相同。

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

    关于posix,最棒的是欢迎您自己阅读:

    The Open Group Base Specifications Issue 7

    第7期被称为posix.1-2008,其中有一些新的东西——不过,google fu for posix.1等可以让您看到Unix背后的整个历史。


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


    In 1985, individuals from companies throughout the computer industry
    joined together to develop the POSIX (Portable Operating System
    Interface for Computer Environments) standard, which is based largely
    on the UNIX System V Interface Definition (SVID) and other earlier
    standardization efforts. These efforts were spurred by the U.S.
    government, which needed a standard computing environment to minimize
    its training and procurement costs. Released in 1988, POSIX is a group
    of IEEE standards that define the API, shell, and utility interfaces
    for an operating system. Although aimed at UNIX-like systems, the
    standards can apply to any compatible operating system. Now that these
    stan- dards have gained acceptance, software developers are able to
    develop applications that run on all conforming versions of UNIX,
    Linux, and other operating systems.

    摘自《Linux实用指南》


    posix代表可移植的操作系统接口,是一个IEEE标准,旨在促进应用程序的可移植性。POSIX是一个供应商联盟试图创建一个单一的Unix标准版本。


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

    政府法规更倾向于在投资中采用符合POSIX的解决方案,因此符合POSIX具有显著的财务优势,特别是对于美国的大型IT公司。

    对于完全符合POSIX的操作系统来说,这是一种奖励,它可以保证无缝地编译和运行所有符合POSIX的应用程序。

    Linux是最有名的。OSX、Solaris、NetBSD和Windows NT也在这里播放。免费和OpenBSD只"几乎"符合POSIX。Winnt的POSIX遵从性只是避免上述政府法规的一个伪解决方案。


    本标准为类Unix操作系统提供了通用基础。它指定了shell的工作方式、ls和grep等命令的期望值,以及C作者希望提供的一些C库。

    例如,命令行用户用来将命令串在一起的管道在这里被详细地指定,这意味着C的popen(管道打开)函数是POSIX标准,而不是ISO C标准。


    关于posix的一些事实并不那么明朗。

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

    它是为使用单CPU的单台计算机对本地存储进行串行数据访问而设计的。

    安全性在POSIX的设计中并不是一个主要问题,多年来导致了大量的竞争条件攻击,并迫使程序员绕过这些限制。

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

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

    这个同步API对于访问远程和云对象尤其不好,因为高延迟很重要。


    关于如何使操作系统与最近的Unix操作系统兼容的规范(蓝图)(愿上帝保佑他!)这就是为什么MacOS和GNU/Linux有非常相似的终端命令行、GUI、库等,因为它们都是根据POSIX蓝图设计的。

    POSIX不告诉工程师和程序员如何编写代码,而是告诉他们如何编写代码。


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

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

    最流行的例子是GNU Bash,它100%符合POSIX和gawk实用程序。


    posix控制互操作性、可移植性,以及在其他领域,如fork的用法和机制、permissions和filesystem标准,如/etc、/var、/usr等。因此,当开发人员在符合POSIX的系统(如Linux)下编写程序时,通常并不是总是保证在另一个符合POSIX的系统(如IBM的AIX系统或其他UNIX商业变体)上运行。POSIX是一个很好的东西,因此它可以简化软件开发,以实现它所追求的最大可移植性。希望这个答案有意义。

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