我经常在各处看到 POSIX 被提及,并且我一直认为它是 UNIX 基线标准......直到我在 Wikipedia 页面上注意到以下摘录:公开组
The Open Group 是最著名的 UNIX 商标认证机构,其出版的单一UNIX规范技术标准,它扩展了 POSIX 标准,是 UNIX 系统的官方定义。
如果UNIX系统的官方定义是POSIX的扩展,那么POSIX到底是什么? ,,, 它看起来确实是 UNIX 世界的试金石,但我不知道它如何融入整体情况。
答案1
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 操作系统使用。 UNIX 上使用的 Socket API 是在 BSD 上开发的,并且 Unix Fast Filesystem 代码被借用并用于各种 UNIX 操作系统(例如 Solaris),并具有自己的增强功能。
Linux 于 1991 年开发,但与 BSD 不同,它是从头开始开发的,并使用现有的 GNU 项目,该项目是大部分 UNIX 用户空间的干净室实现。它实现了大部分 POSIX 的兼容性,并且在设计上类似于 UNIX,但它不像 BSD 那样与 AT&T 或 UNIX® 有着紧密的联系。
答案2
最重要的事情POSIX 7定义
-
极大地扩展 ANSI C诸如此类的事情:
- 更多文件操作:
mkdir
,dirname
,symlink
,readlink
,link
(硬链接),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 重击。
-
例如:
HOME
、PATH
。PATH
指定搜索语义, 包括斜杠如何阻止PATH
搜索。 -
ANSI C 表示“
0
or ”表示EXIT_SUCCESS
成功,“EXIT_FAILURE
or”表示失败,并定义其余的实现。POSIX 补充道:
126
: 命令已找到但不可执行。127
: 找不到命令。> 128
:由信号终止。但 POSIX 似乎没有指定
128 + SIGNAL_ID
Bash 使用的规则:进程终止时的默认退出代码?
也可以看看:
$?
shell脚本中的(美元问号)是什么意思? -
有两种类型:BRE(基本)和 ERE(扩展)。 Basic 已被弃用,保留只是为了不破坏 API。
这些由 C API 函数实现,并在整个 CLI 实用程序中使用,例如
grep
默认接受 BRE,以及带有-E
.例如:
echo 'a.1' | grep -E 'a.[[:digit:]]'
Linux主要实现:glibc实现了下的功能正则表达式.h哪些程序
grep
可以用作后端。 -
例如:
/dev/null
,/tmp
LinuxFHS极大地扩展了 POSIX。
-
/
是路径分隔符NUL
不能使用.
是cwd
,..
父级- 可移植文件名
- 完整路径最多使用 14 个字符和 256 个字符
- 只能包含:
a-zA-Z0-9._-
也可以看看:https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem
-
不是强制性的,由 POSIX 使用,但几乎没有在其他地方使用,尤其是在 GNU 中。但确实,它的限制性太大,例如只有单字母标志(例如
-a
),没有双连字符长版本(例如--all
)。一些广泛使用的约定:
-
表示需要文件的 stdin--
终止标志,例如ls -- -l
列出名为的目录-l
“POSIX ACL”(访问控制列表),例如用作后端
setfacl
。这被撤回但它已在多种操作系统中实现,包括在 Linux 中
setxattr
。
谁符合 POSIX?
许多系统都严格遵循 POSIX,但很少有系统真正获得维护该标准的 Open Group 的认证。著名的认证包括:
- OS X (Apple) X 代表 10 和 UNIX。是第一个 Apple POSIX 系统,于 2001 年左右发布。另请参阅:https://stackoverflow.com/questions/5785516/is-osx-a-posix-os
- AIX(IBM)
- HP-UX(惠普)
- Solaris(甲骨文)
大多数 Linux 发行版都非常合规,但没有经过认证,因为他们不想支付合规性检查费用。浪潮K-UX和华为EulerOS这是两个经过认证的例子。
认证系统的官方列表可在以下位置找到:https://www.opengroup.org/openbrand/register/并且还在维基页面。
视窗
Windows 在其一些专业发行版上实现了 POSIX。
由于它是一个可选功能,因此程序员不能依赖它来完成大多数最终用户应用程序。
Windows 8 中已弃用支持:
- https://stackoverflow.com/questions/4746043/where-does-microsoft-windows-7-posix-implementation-currently-stand
- 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 年,宣布了一个新的类似 Linux 的官方 API,称为“Windows Subsystem for 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/
西格文是一个众所周知的 GPL 第三方项目,它为 Windows“提供大量的 POSIX API 功能”,但要求您“如果您希望应用程序在 Windows 上运行,则需要从源代码重建应用程序”。系统2是一个相关项目,似乎在 Cygwin 之上添加了更多功能。
安卓
Android 有自己的 C 库 (Bionic),从 Android O 开始,它并不完全支持 POSIX:https://stackoverflow.com/questions/27604455/is-android-posix-兼容
奖金等级
这Linux 标准库进一步扩展了 POSIX。
使用非框架索引,它们更具可读性和可搜索性:http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
获取用于 grep 的 HTML 页面的完整压缩版本: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939
答案3
POSIX 是便携式操作系统标准。它描述了兼容操作系统必须向软件提供的某些实用程序、API 和服务(例如套接字、文件 I/O 和线程),以及如何从程序调用这些工具的约定。
这个想法是,为一个 POSIX 兼容操作系统编写的程序将比在非 POSIX 兼容操作系统之间移植更容易移植到另一个 POSIX 兼容操作系统。这就是为什么将应用程序从 FreeBSD 移植到 Linux 比从 FreeBSD 移植到 Windows 容易得多(尽管 Windows 表面上支持 POSIX 的子集)。
答案4
POSIX 是 UNIX 的一个子集,旨在涵盖其他操作系统的各种类 Unix 环境;这最初包括 Eunice for VMS、Windows NT 的 POSIX 个性和 Apollo Domain/OS 等环境。您可以将其视为操作系统服务子集的标准可移植性 API,其行为在 Unix 和非 Unix 之间是相同的。看http://standards.ieee.org/develop/wg/POSIX.html了解更多信息。