POSIX到底是什么?


139

我看到POSIX到处都在提到,并且我以它为UNIX的基本标准。.直到我在Wikipedia页面上注意到以下摘录:The Open Group

由The Open Group是最有名的认证机构为UNIX商标,其公布统一UNIX规范技术标准它扩展了POSIX标准,是UNIX系统的官方定义

如果UNIX系统的正式定义是POSIX的扩展,那么POSIX到底是什么?,,,当然,这似乎是UNIX世界的试金石,但我不知道它如何适合整体情况。


2
SUS是UNIX的正式定义,因为The Open Group(不是IEEE)拥有UNIX商标。请在下面回答我的答案。
penguin359 2011年


Answers:


125

POSIX首先是1988年的标准,远早于Single UNIX规范。这是统一所有各种UNIX fork和类似UNIX的系统的尝试之一。POSIX是IEEE标准,但是由于IEEE不拥有UNIX®商标,因此该标准不是UNIX®,尽管它当时基于现有的UNIX API。第一个标准POSIX.1的正式名称为IEEE std 1003.1-1988。[ 1 ] IEEE收取了大量费用才能获得该标准的副本。

开放组织于1997年根据IEEE的POSIX标准工作发布了Single UNIX规范(SUSv2)。SUSv3于2001年由IEEE和The Open Group(称为Austin Group)之间的联合工作组发布。SUSv3也称为POSIX:2001 [ 2 ]。现在还有POSIX:2004和POSIX:2008,它们是SUSv4的核心。至于UNIX®是什么,UNIX®就是目前的注册商标持有人所说的。自1994年以来,这就是The Open Group。

Novell从UNIX®诞生的AT&T / USL收购了UNIX®系统业务。1994年,他们将UNIX®商标的权利出售给了X / Open [ 3 ],现在称为The Open Group。然后,他们将UNIX®源代码作为UNIXWARE®出售给了SCO。[ 3 ]UNIX®本身已经分叉了许多次[ 4 ] [ 5 ],部分原因是由于AT&T的许可模式。购买UNIX®为您提供了操作系统的完整资源以及构建它的完整工具链。拥有AT&TUNIX®许可证的任何人都可以分发和使用对源代码的修改。许可费成千上万。

BSD是Berkeley的一个项目,该项目对UNIX®操作系统进行了许多增强。BSD代码是在比AT&T的源代码宽松得多的许可下发布的,与GNU Project和Linux使用的GPL不同,它不需要许可费,甚至不需要与源代码一起分发。这导致BSD代码的很大一部分包含在各种商业UNIX分支中。大约在4.3BSD左右,他们几乎取代了对原始AT&TUNIX®源代码的任何需求。FreeBSD / NetBSD / OpenBSD是4.3BSD的全部分支,它们是完整的操作系统,并且没有原始的AT&T源代码。他们也没有UNIX®商标的权利,但是他们的许多代码被商业UNIX操作系统使用。

Linux是1991年开发的,但是与BSD不同,它是从头开始开发的,它使用现有的GNU Project,它是大多数UNIX用户空间的无尘室实现。它实现了POSIX的大部分功能以实现兼容性,并且在设计上类似于UNIX,但是它与BSD所具有的AT&T或UNIX®没有紧密的联系。


1
很好的答案..所有(3)个答案都不错,但是这个答案非常有用(尤其是在另两个答案准备之后);正是我所需要的...谢谢(在问题正文下方)关于SUS的评论,我现在已经非常了解它了,谢谢...(而且我没有注意到这只是一个段落...太有趣的:)
Peter.O 2011年

2
@Mikel希望我的编辑会有所帮助
penguin359'4

1
@ penguin359是一个很棒的答案!
boehj 2011年

有人对X代表什么有个好主意吗?如果只是后缀,表示与Unix的关系,那不是小写吗?
Alex W

优秀的。谢谢。在过去的大部分时间里,我一直在从事计算工作,但是事情发生的“愚蠢”细节并不是我关注的重点。很高兴看到这条路。
肯·英格拉姆'18

55

POSIX 7定义的最重要的事情

  1. C API

    极大地扩展了ANSI C,例如:

    • 更多文件操作:mkdirdirnamesymlinkreadlinklink(硬链接)poll()statsyncnftw()
    • 过程和线程:forkexeclwaitpipe,semaphors sem_*,共享存储器(shm_*), kill,调度参数(nicesched_*), ,,sleepmkfifosetpgid()
    • 联网: socket()
    • 内存管理:mmapmlockmprotectmadvisebrk()
    • 实用程序:正则表达式(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工具类猛砸实现为内置插件

  3. 外壳语言

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

    主要的Linux桌面实现:GNU Bash

  4. 环境变量

    如:HOMEPATH

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

  5. 程序退出状态

    ANSI C表示成功0或失败,并定义了其余实现。EXIT_SUCCESSEXIT_FAILURE

    POSIX添加:

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

    • 127: 找不到相关命令。

    • > 128:被信号终止。

      但是POSIX似乎没有指定128 + SIGNAL_IDBash使用的规则:进程终止时的默认退出代码?

  6. 正则表达式

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

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

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

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

  7. 目录结构

    如:/dev/null/tmp

    Linux FHS大大扩展了POSIX。

  8. 档名

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

    另请参阅:https : //stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem

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

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

    一些广泛使用的约定:

    • - 表示标准文件所在的位置
    • --终止标志,例如ls -- -l列出名为-l

    另请参阅:https : //stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments

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

    撤消了该功能但已在多个OS中实现了该功能,包括在Linux中使用setxattr

谁符合POSIX?

许多系统都严格遵循POSIX,但实际上很少有人通过维护该标准的Open Group进行认证。著名的认证产品包括:

大多数Linux发行版都非常合规,但未通过认证,因为它们不想支付合规性检查。浪潮的K-UX华为的EulerOS是两个获得认证的示例。

认证系统的官方列表可在以下网址找到:https//www.opengroup.org/openbrand/register/,也可以在Wiki页面上找到

视窗

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

由于它是一项可选功能,因此程序员无法将其用于大多数最终用户应用程序。

Windows 8不支持该支持:

在2016年,一个新的类似于Linux的正式API称为“ Windows子系统Linux”。它包括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拥有自己的C库(Bionic),自Android O起不完全支持POSIX:https : //stackoverflow.com/questions/27604455/is-android-posix-compatible

奖金等级

Linux标准基础进一步扩展POSIX。

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

获取HTML页的完整压缩版本以进行grepping:https ://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939


问题是关于POSIX和SUS的,但是这个答案根本没有提到SUS ...
Kidburla

1
@Kidburla一个绝佳的机会来添加您自己的答案并获得一些代表:-)(或将其编辑为我的代表,给我代表
他嘿


@phuclv谢谢,我已将其添加到答案中。
Ciro Santilli新疆改造中心法轮功六四事件

16

POSIX是可移植操作系统标准。它描述了兼容操作系统必须提供给软件的某些实用程序,API和服务(例如套接字,文件I / O和线程),以及有关如何从程序中调用它们的约定。

这个想法是,为一个兼容POSIX的操作系统编写的程序比在不兼容POSIX的操作系统之间移植更容易移植到另一个POSIX操作系统。这就是为什么将应用程序从FreeBSD移植到Linux比将其从FreeBSD移植到Windows要容易得多的原因(尽管Windows表面上支持POSIX的子集。)


14

POSIX是UNIX的一个子集,旨在覆盖其他操作系统的各种类似Unix的环境。这最初包括环境,例如Eunice for VMS,Windows NT的POSIX个性和Apollo Domain / OS。您可以将其视为操作系统服务子集的标准可移植性API,该操作系统服务的行为在Unix和非Unix之间是相同的。有关更多信息,请参见http://standards.ieee.org/develop/wg/POSIX.html


我现在已经阅读了更多有关它的内容,而且看起来Uinx确实是鸡,而POSIX是鸡蛋。和UNIX必须符合POSIX?...顺便说一句。似乎POSIX是由Richard Stallman创造的....
Peter.O 2011年

@ fred.bear:简短的答案:UNIX(商标)必须符合POSIX;Unix(产品)是POSIX的主要基础。unices(操作系统家族)大多一致,但有更多共同点。请参阅Linux是Unix吗?为Mac OS X,UNIX?有关的讨论。
吉尔斯

@ fred-bear许多人认为POSIX标准是当今由Linux内核开发社区指导的,(如果为真)恕我直言不是一件好事……
sakisk 2011年

1
@faif我从未听说过,发现它不太可能,可以发表参考吗?
penguin359 2011年

2
@GillesUNIX®商标的所有者Open Group还负责UNIX®认证和规范,它们被称为Single UNIX Specification或SUS。POSIX由不负责UNIX®的IEEE开发。自2001年以来,它们基本上是同步开发的,但是从技术上讲,它是SUS,现在是定义UNIX®的版本4。
penguin359 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.