我从来没有真正理解:什么是POSIX?

什么是POSIX? 我已经阅读了维基百科的文章,每次遇到这个词时我都会阅读它。 事实是,我从来没有真正明白它是什么。

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


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


POSIX 7定义的最重要的东西

  • C API

    用以下方法大大扩展ANSI C:

  • 更多文件操作: mkdirdirnamesymlinkreadlinklink (硬link ), pollsync
  • 进程和线程: forkexeclpipe ,semaphors sem_* ,共享内存( shm_* ), kill ,调度参数( nicesched_ ), sleep
  • 联网
  • 常用表达
  • 先进的内存管理: mmapmlockmprotectmadvise
  • 这些API还决定了它们所依赖的基础系统概念,例如fork需要一个过程的概念。

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

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

  • CLI实用程序

    例如: cdlsecho ,...

    许多实用程序都是相应C API函数的直接外壳前端,例如mkdir

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

  • 壳牌语言

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

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

  • 环境变量

    例如: HOMEPATH

  • 程序退出状态

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

    POSIX补充道:

  • 126 :找到命令但不可执行。

  • 127 :找不到命令。

  • > 128 :由信号终止。

    但POSIX似乎并没有指定Bash使用的128 + SIGNAL_ID规则:https: 128 + SIGNAL_ID

  • 正则表达式

    有两种类型:BRE(基本)和ERE(扩展)。 基本不推荐使用,只能保持不中断API。

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

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

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

  • 目录结构

    例如: /dev/null/tmp

    Linux FHS极大地扩展了POSIX。

  • 文件名

  • /是路径分隔符
  • NUL不能使用
  • .cwd..父母
  • 便携文件名
  • 最多使用最多14个字符和256个全路径
  • 只能包含: a-zA-Z0-9._-
  • 另请参阅:文件系统的posix合规性是什么?

  • 命令行实用程序API约定

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

    一些广泛使用的约定:

  • -意味着stdin在文件的预期位置
  • --终止标志,例如ls -- -l列出名为-l的目录
  • 另请参见:Linux命令行开关和参数是否有标准?

    谁符合POSIX?

    许多系统紧跟POSIX,但很少有实际上由维持该标准的Open Group认证。 值得注意的认证包括:

  • OS X(Apple)X代表10和UNIX。 是2001年左右发布的第一个Apple POSIX系统。另请参见:OSX是否为POSIX操作系统?
  • AIX(IBM)
  • HP-UX(HP)
  • Solaris(Oracle)
  • 大多数Linux发行版非常合规,但未经过认证,因为他们不想支付合规性检查。

    请参阅wiki页面。

    视窗

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

    由于这是一个可选功能,所以程序员不能依赖于大多数最终用户应用程序。

    Windows 8中不支持支持:

  • Microsoft Windows 7 POSIX实现目前在哪里?
  • https://superuser.com/questions/495360/does-windows-8-still-implement-posix
  • 功能请求:https://windows.uservoice.com/forums/265757-windows-feature-suggestions/suggestions/6573649-full-posix-support
  • 在2016年,一种名为“Windows 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),它不能完全支持POSIX以及Android O:与Android POSIX兼容吗?

    奖金水平

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

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

    为grepping获取完整的压缩版HTML页面:是否有POSIX API /函数列表?


    POSIX是:

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

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

    链接地址: http://www.djcxy.com/p/22909.html

    上一篇: I never really understood: what is POSIX?

    下一篇: declarative programming and imperative programming