我经常看到到处都提到 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® 没有密切联系。
Cir*_*郝海东 68
POSIX 7定义的最重要的东西
使用以下内容极大地扩展了 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,它在许多情况下只是为系统调用提供了一个浅层包装。
例如:cd, ls, echo, ...
许多实用程序是相应 C API 函数的直接 shell 前端,例如mkdir.
主要的 Linux 桌面实现:用于小型的 GNU Coreutils,用于大型的单独的 GNU 项目:sed, grep, awk, ... 一些 CLI 实用程序由 Bash作为内置程序实现。
例如, a=b; echo "$a"
主要的 Linux 桌面实现:GNU Bash。
例如:HOME,PATH。
PATH 指定了搜索语义,包括斜线如何阻止PATH搜索。
ANSI C 表示成功0或失败,并保留定义的其余实现。EXIT_SUCCESSEXIT_FAILURE
POSIX 补充说:
126: 命令找到但不可执行。
127: 找不到相关命令。
> 128: 由信号终止。
但是 POSIX 似乎没有指定128 + SIGNAL_IDBash 使用的规则:进程终止时的默认退出代码?
有两种类型:BRE(基本)和 ERE(扩展)。Basic 已弃用,仅保留不会破坏 API。
这些由 C API 函数实现,并在整个 CLI 实用程序中使用,例如grep默认情况下接受 BRE,以及带有-E.
例如: echo 'a.1' | grep -E 'a.[[:digit:]]'
例如:/dev/null,/tmp
Linux FHS极大地扩展了 POSIX。
/ 是路径分隔符NUL 不能使用.是cwd,..父母a-zA-Z0-9._-另见:https : //stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem
不是强制性的,由 POSIX 使用,但几乎没有其他地方,尤其是在 GNU 中没有。但确实,它限制太多,例如只有单字母标志(例如-a),没有双连字符长版本(例如--all)。
一些广泛使用的约定:
- 表示需要文件的标准输入--终止标志,例如ls -- -l列出名为的目录-l 另见:https : //stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments
“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
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。
| 归档时间: |
|
| 查看次数: |
50004 次 |
| 最近记录: |