Go to main content

手册页第 7 部分:标准、环境、宏、字符集和杂项

退出打印视图

更新时间: 2018年8月8日 星期三
 
 

POSIX (7)

名称

standards, ANSI, C, C++, ISO, POSIX, POSIX.1, POSIX.2, SUS, SUSv2, SUSv3, SUSv4, SVID, SVID3, XNS, XNS4, XNS5, XPG, XPG3, XPG4, XPG4v2, XPG5, XPG6, XPG7 - 标准和规范受 SunOS 5.12 支持

描述

SunOS 5.12 符合 The Open Group 的 UNIX V7 产品标准,这意味着它支持 IEEE Std 1003.1-2008(通常称为 POSIX.1-2008)、UNIX V7、XPG7 或 SUSv4(Single UNIX Specification, Version 4,单一 UNIX 规范版本 4)。请注意,POSIX.1-2008 同时涵盖 IEEE Std 1003.1-2008 和 The Open Group Technical Standard Base Specifications, Version 7。请注意,SUSv4 结合了 IEEE Std 1003.1-2008 和 ISO/IEC 9945:2009 (Portable Operating System Interface (POSIX) Base Specifications, Issue 7)。编写新代码时应使用 UNIX V7 标准。有关最初符合特定标准的 SunOS 或 Oracle Solaris 发行版以及运行在先前版本的 Oracle Solaris 上编译的代码时的要求的历史信息,请参见此手册页的最后一节。

使用 Oracle Developer Studio 12.5 C 编译器或 SunOS 5.12 中找到的最新版本的 GCC 或 LLVM/Clang 时,SunOS 5.12 支持:

  • ANSI X3.159-1989 编程语言 - C 和 ISO/IEC 9899:1990 编程语言 - C (C) 接口

  • ISO/IEC 9899:1990 修订 1:1995: C Integrity

  • ISO/IEC 9899:1999 编程语言 - C

  • INCITS/ISO/IEC 9899:2011 编程语言 - C

如果安装了 Oracle Solaris Studio 或 Oracle Developer Studio C++,请参阅其文档,了解有关支持的 C++ 标准的论述。

对于联网,XNS4 规范只有在 ILP32(32 位)环境中使用才是安全的,不应该用于 LP64(64 位)应用程序环境。对于 LP64(64 位)应用程序环境,应使用 XNS5 或 SUSv3,因为它们具有可在 ILP32 和 LP64 环境中移植的干净的 LP64 接口。SunOS 5.12 支持 ILP32 和 LP64 两种环境。Oracle Solaris 的未来发行版可能只支持 LP64 环境。

一致性

缺省的 Oracle Solaris 安装可能需要额外的步骤,以与 SUSv4 完全兼容。

软件包

必须安装 XPG7 Conformance 组软件包和 Oracle Solaris Studio。

Package                                                 Publisher
----------------------------------------------------------------------
pkg:/group/feature/xpg7                                 solaris
----------------------------------------------------------------------
pkg://solarisstudio/developer/developerstudio-125/cc    solarisstudio
文件系统

通常,ZFS(缺省根文件系统)与 SUSv4 兼容。但是,在以下边界情况下,ZFS 不满足符合性要求:

  • 更新 ZFS 文件系统容量统计信息。

  • 在几乎完整的文件系统中修改或删除现有数据。

要求严格符合 SUSv4 的应用程序必须在 UFS 上操作,并需要在 ZFS zvol 设备上设置 UFS 文件系统。

实用程序

如果 POSIX.1-2008 要求的行为与历史 Solaris 实用程序行为冲突,则该实用程序的原始 Solaris 版本保持不变,并在 /usr/xpg7/bin 中提供该实用程序的符合标准的版本。有关早期标准版本的历史详细信息,请参见本手册页末尾。

如果应用程序要使用符合 POSIX.1-2008 标准的实用程序,则必须设置 PATHsh(1)ksh(1))或者 path (csh(1)) 环境变量,以指定顺序指定下列目录来获取相应的实用程序。有关早期版本中指定目录的历史详细信息,请参见本手册页末尾。

POSIX.1-2008、SUSv4
  1. /usr/xpg7/bin

  2. /usr/xpg6/bin

  3. /usr/xpg4/bin

  4. /usr/bin

  5. 包含编译器的二进制文件的目录

  6. 包含应用程序所需的二进制文件的其他目录

设置了 PATH/path 变量后,可以使用 getconf 命令确认设置。

应用程序使用 execlp() 函数、execvp() 函数或 execvpe() 函数执行 shell 文件或者使用 system(3C) 函数时,用于解释 shell 文件的 shell 取决于调用者遵循的标准。有关更多信息,请参见 exec(2) 手册页。

标准
使用的 Shell
POSIX.1-2008、SUSv4、XPG7
/usr/xpg4/bin/sh
未指定标准
/usr/bin/sh

功能测试宏

功能测试宏供应用程序用来指示用户需要的 C 标准指定的那些功能之外的其他功能集。如果应用程序仅使用特定标准(如 POSIX 或 SUSv4)定义的接口和头,则仅需要定义该标准指定的相应功能测试宏。如果应用程序要使用该标准未定义的接口和头,则除了定义相应的标准功能测试宏之外,还必须定义 __EXTENSIONS__。通过定义 __EXTENSIONS__,应用程序便可以访问与指定的标准不冲突的所有接口和头。应用程序必须在编译命令行或应用程序源文件中定义 __EXTENSIONS__

POSIX.1-2008

要符合 POSIX.1-2008 的应用程序必须在加入任何头之前定义功能测试宏 _POSIX_C_SOURCE=200809L。应用程序编写者必须在标准中查找其他可查询的宏,以确定实现是否支持所需的选项。

SUSv4

要构建或编译符合 SUSv4 规范的应用程序,该应用程序必须定义 _XOPEN_SOURCE=700。如果应用程序同时需要 SUS 和 POSIX 功能,则不需要设置 POSIX.1-2008 功能测试宏。

1989 ANSI C、1990 ISO C、1999 ISO C、2011 ISO C

无需定义功能测试宏来指示应用程序符合 C 标准。

ANSI/ISO C++

ANSI/ISO C++ 未定义任何功能测试宏。如果编译器根据编译器缺省值和命令行选项预定义的标准 C++ 声明宏 __cplusplus 设置为 199711 或更大值,则编译器会以符合标准的模式运行,并指示符合 C++ 标准。有关此宏可以具有的值和受支持的 C++ 标准版本的说明,请参阅 C++ 编译器文档。

未针对 POSIX 或 SUSv4 定义 C++ 绑定,因此指定功能测试宏(如 _POSIX_SOURCE_POSIX_C_SOURCE_XOPEN_SOURCE)会由于与 C++ 标准和这些规范的要求冲突而导致编译错误。

使用 Oracle Developer Studio 12.5 编译器编译

缺省情况下,Oracle Developer Studio 12.5 C 编译器提供符合 INCITS/ISO/IEC9899:2011(2011 ISO C 语言)标准的编译系统。此外,还提供符合 INCITS/ISO/IEC 9899:1999(1999 ISO C 语言)标准的编译系统。

符合 XNS5 的应用程序必须在任何 link/load 命令行中包含 –l xnet XNS

如果编译器支持 redefine_extname pragma 功能,Oracle Developer Studio 12.5 C 编译器和 Oracle Solaris Studio 12.5 C++ 编译器了宏 __PRAGMA_REDEFINE_EXTNAME 来指示它们支持此功能。如果不满足前面的条件,则标准头会使用 #pragma redefine_extname 指令将函数名称正确映射到库入口点名称。此映射完全支持 ISO C、POSIX 和 X/Open 名称空间保留项。

使用 Oracle Developer Studio 12.5 C 编译器时,对于符合 POSIX.1-2008 的应用程序,应使用下表中指出的实用程序和标志进行编译:

Specification    Compiler/Flags    Feature Test Macros
----------------------------------------------------------
POSIX.1-2008     c99               _POSIX_C_SOURCE=200809L
----------------------------------------------------------
SUSv4            c99               _XOPEN_SOURCE=700

历史:POSIX 标准

Oracle Solaris 曾支持 IEEE Std 1003.1 和 IEEE Std 1003.2(通常分别称为 POSIX.1 和 POSIX.2)。下表列出了这些标准的每个版本及其简要说明,以及最先遵从这些标准的 SunOS 或 Solaris 发行版。

POSIX                            Standard                            Description Release
-----------------------------------------------------------------------------------------
POSIX.1-1988                 system interfaces and headers           SunOS 4.1
-----------------------------------------------------------------------------------------
POSIX.1-1990                 POSIX.1-1988 update                     Solaris 2.0
-----------------------------------------------------------------------------------------
POSIX.1b-1993                realtime extensions                     Solaris 2.4
-----------------------------------------------------------------------------------------
POSIX.1c-1996                threads extensions                      Solaris 2.6
-----------------------------------------------------------------------------------------
POSIX.2-1992                 shell and utilities                     Solaris 2.5
-----------------------------------------------------------------------------------------
POSIX.2a-1992                interactive shell and utilities         Solaris 2.5
-----------------------------------------------------------------------------------------
POSIX.1-2001                 POSIX.1-1990, POSIX.1b-1993, 
                             POSIX.1c-1996, POSIX.2-1992,
                             and POSIX.2a-1992 updates               Solaris 10

-----------------------------------------------------------------------------------------
POSIX.1-2004                 POSIX.1-2001 update                     Oracle Solaris 11

历史:X/Open Common Applications Environment (CAE)

Oracle Solaris 还曾支持 X/Open Common Applications Environment (CAE) Portability Guide Issue 3 (XPG3) 和 Issue 4 (XPG4)、单一 UNIX 规范(Single UNIX Specification,SUS,亦称为 XPG4v2)、单一 UNIX 规范版本 2 (Single UNIX Specification Version 2, SUSv2)、单一 UNIX 规范版本 3 (Single UNIX Specification Version 3, SUSv3) 以及单一 UNIX 规范版本 4 (Single UNIX Specification Version 4, SUSv4)。XPG4 和 SUS 均包括 Networking Services Issue 4 (XNS4)。SUSv2 包括 Networking Services Issue 5 (XNS5)。

下表列出了每个 X/Open 规范及其简要说明,以及最先遵从这些标准的 SunOS 或 Solaris 发行版。

X/Open                          Specification                            Description Release
----------------------------------------------------------------------------------------------
XPG3                            superset of POSIX.1-1988 contain-        SunOS 4.1
                                ing utilities from SVID3
----------------------------------------------------------------------------------------------
XPG4                            superset of POSIX.1-1990,                Solaris 2.4
                                POSIX.2-1992, and POSIX.2a-1992
                                containing extensions to POSIX
                                standards from XPG3
----------------------------------------------------------------------------------------------
SUS (XPG4v2)                    superset of XPG4 containing his-         Solaris 2.6
                                torical BSD interfaces widely
                                used by common application packages
----------------------------------------------------------------------------------------------
XNS4                            sockets and XTI interfaces               Solaris 2.6
----------------------------------------------------------------------------------------------
SUSv2                           superset of SUS extended to sup-         Solaris 7
                                port POSIX.1b-1993,
                                POSIX.1c-1996, and ISO/IEC 9899
                                (C Standard) Amendment 1
----------------------------------------------------------------------------------------------
XNS5                            superset and LP64-clean deriva-          Solaris 7
                                tive of XNS4.
----------------------------------------------------------------------------------------------
SUSv3                           same as POSIX.1-2001                     Solaris 10

历史:其他

Solaris 发行版 7 到 SunOS 5.12 支持 ILP32 和 LP64 两种环境。Oracle Solaris 的未来发行版可能只支持 LP64 环境。

Solaris 发行版 2.0 到 SunOS 5.12 支持 System V 接口定义第 3 版的卷 1 至卷 4 (SVID3) 指定的接口。请注意,由于此规范的开发者 (UNIX Systems Laboratories) 已不再运营并且此规范遵从 POSIX 和 X/Open CAE 规范,因此对符合此规范当前所要达到的要求有一些分歧。

Solaris 发行版 7 到 10 标为符合 The Open Group 的 UNIX 98 产品标准。Solaris 10 到 Oracle Solaris 11 标为符合 The Open Group 的 UNIX 03 产品标准。

历史:实用程序

如果 POSIX.2、POSIX.2a、XPG4、SUS 或 SUSv2 要求的行为与历史 Solaris 实用程序行为冲突,则该实用程序的原始 Solaris 版本保持不变,并在 /usr/xpg4/bin 中提供该实用程序的符合标准的版本。如果 POSIX.1-2001 或 SUSv3 要求的行为与历史 Solaris 实用程序行为冲突,则在 /usr/xpg4/bin/usr/xpg6/bin 中提供符合标准的版本。如果 POSIX.1-2001 或 SUSv3 要求的行为与 POSIX.2、POSIX.2a、SUS 或 SUSv2 冲突,则在 /usr/xpg6/bin 中提供符合标准的版本。

如果应用程序要使用符合标准的实用程序,则必须设置 PATHsh(1)ksh(1))或者 path (csh(1)) 环境变量,以指定顺序指定下列目录来获取相应的实用程序:

SVID3、XPG3
  1. /usr/bin

  2. 包含编译器的二进制文件的目录

  3. 包含应用程序所需的二进制文件的其他目录

POSIX.2、POSIX.2a、SUS、SUSv2、XPG4
  1. /usr/xpg4/bin

  2. /usr/bin

  3. 包含编译器的二进制文件的目录

  4. 包含应用程序所需的二进制文件的其他目录

POSIX.1–2001、SUSv3
  1. /usr/xpg6/bin

  2. /usr/xpg4/bin

  3. /usr/bin

  4. 包含编译器的二进制文件的目录

  5. 包含应用程序所需的二进制文件的其他目录

应用程序使用 execlp() 函数或 execvp() 函数执行 shell 文件或者使用 system(3C) 函数时,用于解释 shell 文件的 shell 取决于调用者遵循的标准。有关更多信息,请参见 exec(2) 手册页。

标准
使用的 Shell
POSIX.1 (1990-2008)、SUS、SUSv2、SUSv3、SUSv4、XPG4、XPG5、XPG6POSIX.1 (1988)、SVID3、XPG3、
/usr/xpg4/bin/sh

历史:功能测试宏

如上所述,功能测试宏供应用程序用来指示用户需要的 C 标准指定的那些功能之外的其他功能集。下文概述了 POSIX.1-2008 之前的 POSIX 版本、SUSv4 之前的 X/Open CAE 以及 SVID3 的历史信息。

POSIX

下表列出了适用于早期版本的 POSIX 的功能测试宏:

POSIX 标准
功能测试宏
POSIX.1-1990
_POSIX_SOURCE
POSIX.1-1990 和 POSIX.2-1992 C 语言绑定选项
_POSIX_SOURCE_POSIX_C_SOURCE=2
POSIX.1b-1993
_POSIX_C_SOURCE=199309L
POSIX.1c-1996
_POSIX_C_SOURCE=199506L
POSIX.1-2001
_POSIX_C_SOURCE=200112L
X/Open CAE

下表列出了适用于早期版本的 X/Open CAE 规范的准则:

规范
说明
XPG3
应用程序必须定义 _XOPEN_SOURCE。如果 _XOPEN_SOURCE 定义了值,该值必须小于 500
XPG4
应用程序必须定义 _XOPEN_SOURCE 并设置 _XOPEN_VERSION=4。如果 _XOPEN_SOURCE 定义了值,该值必须小于 500
SUS (XPG4v2)
应用程序必须定义 _XOPEN_SOURCE 并设置 _XOPEN_SOURCE_EXTENDED=1。如果 _XOPEN_SOURCE 定义了值,该值必须小于 500
SUSv2
应用程序必须定义 _XOPEN_SOURCE=500
SUSv3
应用程序必须定义 _XOPEN_SOURCE=600
SVID3

SVID3 规范未指定任何功能测试宏用于指示编写的应用程序符合 SVID3 要求。SVID3 规范是在 C 标准完成之前编写的。

另请参见

csh(1)ksh(1)sh(1)exec(2)sysconf(3C)system(3C)environ(7)lf64(7)