什么是使操作系统成为POSIX系统的原因?所有Linux版本都是POSIX,对吗?那Mac OS X呢?
什么是使操作系统成为POSIX系统的原因?所有Linux版本都是POSIX,对吗?那Mac OS X呢?
是的,OS X基于Darwin BSD,自10.5(Leopard-2007年5月18日)以来,所有Intel/AMD版本都已正式获得Unix 03 / POSIX标准的认证,例如:
clock_nanosleep()
。它可能符合POSIX的一个子集或者一个非常古老的版本,但它肯定不符合POSIX.1-2017标准。请参见http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_nanosleep.html。OSX POSIX
Single UNIX Specification (SUS)
是一组使用 UNIX
标识的标准。
Portable Operating System Interface (POSIX)
是 SUS
的子集。它定义了操作系统和应用程序之间的 API,以及其他工具和实用程序。它包括进程、IO、线程、安全和 Shell 等部分。
UNIX 03
是符合 SUS v3
的产品标准标识。
自 10.5 Leopard 开始,MAC OS 是一个经过 The Open Group 认证的符合 UNIX 03
标准的操作系统。
Linux
是其他操作系统内核的通用名称。
Linux 没有通过 POSIX 认证(除了一些像 华为 EulerOS - UNIX 03 这样的操作系统)。但是 Linux 大多数时候都遵循这些标准,甚至超出标准要求。
POSIX 是一个规范:http://www.unix.org/what_is_unix/single_unix_specification.html。据我所知,Linux 遵循这个规范,但尚未获得认证。
_POSIX_C_SOURCE
的值为 200809L
是不够的,要使环境符合规范 - 我本人曾遇到过问题,因为被认为是 GCC 扩展的 realpath
函数确实由 POSIX 指定 - 除非我还指定了一个非标准的 _XOPEN_SOURCE
值为 700
,否则程序编译时会出现问题。这并不是很重要(后者标志的存在并不会阻止 POSIX,但它的可移植性要低得多),但确实很烦人。请参见 man 2 realpath
。 - Armen Michaeli
stat()
、read()
等。 - Rafe Kettler