Mac OS X是一个POSIX操作系统吗?

87

什么是使操作系统成为POSIX系统的原因?所有Linux版本都是POSIX,对吗?那Mac OS X呢?

5个回答

106

Mac OS X是POSIX操作系统吗?

是的。

POSIX是一组标准,确定了类Unix操作系统的可移植API。Mac OS X基于Unix(并已获得认证),按照要求符合POSIX标准。 POSIX保证某些系统调用将可用。

基本上,Mac满足了符合POSIX标准所需的API,这使它成为了POSIX操作系统。

所有版本的Linux都不符合POSIX标准。2.6内核版本之前的版本不符合标准,今天Linux没有正式获得POSIX认证,因为他们没有努力去获得认证(这可能永远不会发生)。尽管如此,Linux在几乎所有情况下都可以被视为是一个POSIX系统。


1
@z-buffer,你可以依赖于某些系统调用的可用性,例如stat()read()等。 - Rafe Kettler
1
“所有版本都不是”在这里的意思是“没有任何版本是”,而不是“不是所有版本都是”或者“有些版本是”。对吗? - tchrist
4
“是不是因为Linux的出现才有了POSIX呢?” 不是这样。第一个POSIX标准是在1988年发布的,而Linus Torvalds开始开发Linux是在1991年。根据我记忆,POSIX的产生是为了编写可移植的Unix应用程序,可以在AT&T Unix,BSD Unix等系统上运行。 - Shannon Severance
14
重要相关事实:Mac使用BSD实现的POSIX工具,而不像Linux那样使用GNU实现。 - Ciro Santilli OurBigBook.com
5
请注意,OSX的POSIX实现比较老旧,因此较新的POSIX软件可能无法编译。 - LtWorf
显示剩余7条评论

14

10

我还在OS/X中发现了一个不符合规范的bug。信号应该被传递到第一个要么取消信号屏蔽,要么对信号调用sigwait的线程。在OS/X中,当一个信号被发送到一个进程并且在所有线程中都被屏蔽时,该信号实际上被预分配给一个线程--sigpending()仅在一个线程中显示它存在!(sigpending应该在每个线程中显示相同的结果)。如果未分配的线程然后取消信号屏蔽,什么也不会发生。如果未分配的线程调用sigwait,则成功,因此它做对了这一件事。 - user1843703

4

OSX POSIX

Single UNIX Specification (SUS) 是一组使用 UNIX 标识的标准。

Portable Operating System Interface (POSIX)SUS 的子集。它定义了操作系统和应用程序之间的 API,以及其他工具和实用程序。它包括进程、IO、线程、安全和 Shell 等部分。

UNIX 03 是符合 SUS v3 的产品标准标识。

最新的 Apple Inc UNIX 产品

自 10.5 Leopard 开始,MAC OS 是一个经过 The Open Group 认证的符合 UNIX 03 标准的操作系统。

Linux 是其他操作系统内核的通用名称。

Linux 没有通过 POSIX 认证(除了一些像 华为 EulerOS - UNIX 03 这样的操作系统)。但是 Linux 大多数时候都遵循这些标准,甚至超出标准要求。


2

3
有一些有趣的问题 - 比如说,尝试遵循 POSIX 的程序仅指定 _POSIX_C_SOURCE 的值为 200809L 是不够的,要使环境符合规范 - 我本人曾遇到过问题,因为被认为是 GCC 扩展的 realpath 函数确实由 POSIX 指定 - 除非我还指定了一个非标准的 _XOPEN_SOURCE 值为 700,否则程序编译时会出现问题。这并不是很重要(后者标志的存在并不会阻止 POSIX,但它的可移植性要低得多),但确实很烦人。请参见 man 2 realpath - Armen Michaeli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接