“POSIX”的含义是什么?

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

有谁能通过解释“对POSIX的需求”来向我解释一下吗?

390402 次浏览

POSIX是操作系统的标准,应该使编写跨平台软件变得更容易。这在Unix世界中尤其重要。

POSIX是:

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

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

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背后的整个历史。

POSIX是由IEEE指定的一系列标准,用于澄清和统一Unix-y操作系统提供的应用程序编程接口(以及辅助问题,例如命令行shell实用程序)。

当您编写依赖POSIX标准的程序时,您可以非常确定能够轻松地将它们移植到一大群Unix衍生产品中(包括Linux,但不限于它!);如果您使用一些未作为Po6的一部分标准化的LinuxAPI,将来如果您想将该程序或库移植到其他Unix-y系统(例如MacOSX),您将遇到困难。

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

感谢杰德·史密斯和廷克蒂姆指出我的错误-我的错!!!:(

让我给出一个粗鲁的“非官方”解释。

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

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

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

几十年来,为UNIX编写了各种其他标准。比如SPEC1170(指定了必须兼容实现的1170个函数调用)和SUS(单一UNIX规范)的各种化身。

在大多数情况下,这些“标准”不适合任何实际的技术应用。它们主要是为了论证、法律争论和其他功能失调的原因而存在的。

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

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

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

摘自《Linux实用指南》一书

最重要的事情POSIX 7定义

  1. capi

    伟大的扩展ANSI C与这样的事情:

    • 更多文件操作:mkdirdirnamesymlinkreadlinklink(硬链接)、#5statsyncdirname0
    • 进程和线程:forkexeclexecl2、pipe、信号execl3、共享内存(shm_*)、kill、调度参数(nicesched_*)、sleepexecl0、execl4
    • 网络:#0
    • 内存管理:mmapmlockmprotectmadvise#4
    • 实用程序:正则表达式(reg*

    这些API还确定了它们所依赖的底层系统概念,例如fork需要流程的概念。

    许多Linux系统调用的存在是为了实现特定的POSIX C API函数并使Linux兼容,例如sys_writesys_read……然而,许多这些系统调用还具有Linux特定的扩展。

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

  2. CLI实用程序

    例如:cdlsecho,…

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

    主要的Linux桌面实现:小的GNU Coreutils,大的单独的GNU项目:sedgrepawk……一些CLI实用程序由Bash作为内置实现。

  3. 外壳语言

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

    主要Linux桌面实现:gnubash

  4. 环境变量

    例如:HOMEPATH

    PATH指定搜索语义学,包括斜杠如何阻止#0搜索

  5. 程序退出状态

    ANSI C表示0EXIT_SUCCESS为成功,EXIT_FAILURE为失败,并定义了其余的实现。

    POSIX补充说:

    另见:shell脚本中#0(美元问号)的含义是什么?

  6. 正则表达式

    有两种类型:BRE(基本)和ERE(扩展)。Basic已弃用,仅保留以不破坏API。

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

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

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

  7. 目录结构

    例如:/dev/null/tmp

    LinuxFHS大大扩展了POSIX。

  8. 文件名

    • /是路径分隔符
    • NUL不能使用
    • .cwd..是父节点
    • 可移植文件名
      • 最多使用14个字符和256个完整路径
      • 只能包含:a-zA-Z0-9._-

    另见:什么是文件系统的Posix合规性?

  9. 命令行实用程序API约定

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

    一些广泛使用的惯例:

    • -表示需要文件的stdin
    • --终止标志,例如ls -- -l列出名为-l的目录

    另见:是否有Linux命令行开关和参数的标准?

  10. “POSIX ACL”(访问控制列表),例如用作#0的后端。

    这个被撤回,但它在几个操作系统中实现,包括Linux#0

谁符合POSIX?

许多系统都密切遵循POSIX,但很少有人真正通过维护该标准的Open Group的认证。值得注意的认证包括:

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

大多数Linux发行版都非常合规,但没有经过认证,因为他们不想支付合规性检查。浪潮K-用户体验华为的EulerOS是两个经过认证的例子。

认证系统的官方列表可在以下位置找到:https://www.opengroup.org/openbrand/register/wiki页面

windows

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

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

支持在Windows 8中已弃用:

2016年,一个名为“Windows Subsystem forLinux”的新的官方LinuxAPI发布。它包括Linux系统调用、ELF运行、/proc文件系统的部分内容、Bash、GCC(待办事项可能是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上运行,则从源代码重建应用程序”。

如果你只需要POSIX中的命令行实用程序,还可以考虑:https://github.com/shelljs/shelljs,它在Node.js中重新实现了一堆CLI实用程序,它已经基本上为mkdir等更简单的系统调用实现了可移植层。许多人在他们项目的package.json中使用该项目,以允许在Windows上运行该项目。当然,它需要用户安装Node.js运行时,但考虑到Node.js的流行,我不认为这很快就会打破/难以满足。

android

Android有自己的C库(Bionic),从Android O开始不完全支持POSIX:Android POSIX兼容吗?

奖金水平

Linux标准基地进一步扩展了POSIX。

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

获取用于greping的超文本标记语言页面的完整压缩版本:POSIX C API函数的列表在哪里?

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

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

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

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

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

操作系统完全符合PoSIX标准的回报是,它保证了它将无缝编译和运行所有符合PoSVI标准的应用程序。

Linux是最著名的一个。OSX、Solaris、NetBSD和Windows NT也在这里玩。FreeBSD和OpenBSD只是“接近”符合Po六标准。WinNT的位置合规性只是避免上述政府监管的伪解决方案。

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

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

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

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

它是为对本地存储的序列化数据访问设计的,使用具有单个CPU的单个计算机。

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

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

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

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

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

POSIX代表PortableOperatingS系统nterface。

POSIX是由IEEE编纂,ANSI和ISO发布的一组标准。POSIX的目标是通过建立一套操作系统供应商要遵循的指南来简化跨平台软件开发的任务。理想情况下,开发人员只需编写一次程序即可在所有符合POSIX的系统上运行。大多数现代商业Unix实现和许多免费实现都是符合POSIX的。实际上有几种不同的POSIX版本,但最重要的是POSIX.1和POSIX.2,它们分别定义了系统调用和命令行界面。

POSIX规范描述了一个与Unix类似但不一定相同的操作系统。尽管POSIX在很大程度上基于BSD和System V版本,但非Unix系统,如Microsoft的Windows NT和IBM的OpenEdition MVS是符合POSIX的。

来源