POSIX 究竟是什么?

Pet*_*r.O 152 standard posix

我经常看到到处都提到 POSIX,我认为它是 UNIX 的基线标准……直到我在维基百科页面上注意到以下摘录:The Open Group

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

如果 UNIX 系统的官方定义是 POSIX 的扩展,那么 POSIX 到底是什么?,,, 它确实似乎是 UNIX 世界的试金石,但我不知道它是如何融入全局的。

pen*_*359 133

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

Open Group 在 1997 年基于 IEEE 对 POSIX 标准的工作发布了单一 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 从 AT&T/USL 手中收购了 UNIX® 系统业务,这也是 UNIX® 的诞生地。1994 年,他们将 UNIX® 商标的权利出售给 X/Open[ 3 ],现在称为 The Open Group。然后,他们将 UNIX® 源代码作为 UNIXWARE® 出售给 SCO。[ 3 ] UNIX® 本身已经多次分叉 [ 4 ][ 5 ],部分原因是 AT&T 的许可模式。购买 UNIX® 为您提供了操作系统的完整源代码和构建它的完整工具链。任何拥有 AT&T UNIX® 许可证的人都可以分发和使用对源代码的修改。许可费以千计。

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

Linux 开发于 1991 年,但与 BSD 不同,它是从头开始开发的,并使用现有的 GNU 项目,该项目是大部分 UNIX 用户空间的洁净室实现。它实现了大部分 POSIX 以实现兼容性,并且在设计上类似于 UNIX,但它与 BSD 所拥有的 AT&T 或 UNIX® 没有密切联系。

  • 一个很好的答案......所有(3)个答案都很好,但这一个信息量很大(特别是在其他 2 个已经准备好之后);正是我所需要的……感谢您对 SUS 的评论(在问题正文下方),我现在已经足够理解了,谢谢……(我没有注意到它只有一段……太有趣的 :) (2认同)
  • @Mikel 希望我的编辑有所帮助 (2认同)

Cir*_*郝海东 68

POSIX 7定义的最重要的东西

  1. 编程接口

    使用以下内容极大地扩展了 ANSI C

    • 更多文件操作: mkdir, dirname, symlink, readlink, link(hardlinks), poll(), stat, sync,nftw()
    • 进程和线程:fork, execl, wait, pipe, 信号量sem_*, 共享内存 ( shm_*), kill, 调度参数 ( nice, sched_*), sleep, mkfifo,setpgid()
    • 联网: socket()
    • 内存管理:mmap, mlock, mprotect, madvise,brk()
    • 实用程序:正则表达式 ( reg*)

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

    存在许多Linux 系统调用来实现特定的 POSIX C API 函数并使 Linux 兼容,例如sys_write, sys_read, ... 然而,其中许多系统调用也具有特定于 Linux 的扩展。

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

  2. CLI 实用程序

    例如:cd, ls, echo, ...

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

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

  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,以及带有-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.

    已被撤回,但它已在多个操作系统中实现,包括在带有setxattr.

谁符合POSIX?

许多系统都严格遵循 POSIX,但实际上很少有人通过维护该标准的 Open Group 的认证。值得注意的认证包括:

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

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

视窗

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是一个众所周知的 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

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

  • @Kidburla 这是一个很好的机会来添加你自己的答案并获得一些代表:-)(或者将其编辑到我的答案中并给我代表嘿嘿) (2认同)

And*_*ert 16

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

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


gee*_*aur 14

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

  • @Gilles The Open Group 是 UNIX® 商标的所有者,还负责 UNIX® 认证和规范,他们称之为单一 UNIX 规范或 SUS。POSIX 由不负责 UNIX® 的 IEEE 开发。自 2001 年以来,它们的开发基本上是同步的,但从技术上讲,它是 SUS,现在是定义 UNIX® 的第 4 版。 (2认同)

归档时间:

查看次数:

50004 次

最近记录:

6 年,2 月 前