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 Product Standard に準拠しているので、POSIX.1-2008、UNIX V7、XPG7、または SUSv4 (Single UNIX Specification, Version 4) と一般に呼ばれる IEEE Std 1003.1-2008 をサポートしています。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 Programming Language - C および ISO/IEC 9899:1990Programming Language - C (C) interfaces
ISO/IEC 9899:1990 Amendment 1:1995: C Integrity
ISO/IEC 9899:1999 Programming Languages – C
INCITS/ISO/IEC 9899:2011 Programming Languages – 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 標準に準拠したユーティリティーを使用するアプリケーションは、適切なユーティリティーを取得するために、PATH (sh(1) または ksh(1)) または path (csh(1)) 環境変数を設定して、次に示されているディレクトリを指定されている順序で指定する必要があります。以前のバージョン向けにディレクトリを指定する方法についての詳細な履歴情報については、このマニュアルページの最後を参照してください。
/usr/xpg7/bin
/usr/xpg6/bin
/usr/xpg4/bin
/usr/bin
使用しているコンパイラのバイナリを含むディレクトリ
アプリケーションで必要なバイナリを含むほかのディレクトリ
PATH/path 変数の設定が完了したら、getconf コマンドを使ってその設定を確認できます。
アプリケーションが execlp() 関数、execvp() 関数、または execvpe() 関数を使用してシェルファイルを実行したり、system(3C) 関数を使用したりする場合に、シェルファイルの解釈に使用されるシェルは、呼び出し元が準拠する標準に応じて変わります。詳細は、exec(2) のマニュアルページを参照してください。
|
機能テストマクロは、C 標準で指定されている機能セット以外で求められる追加の機能セットを示すために、アプリケーションによって使用されます。アプリケーションが特定の標準 (POSIX や SUSv4 など) で定義されているインタフェースおよびヘッダーのみを使用する場合、そのアプリケーションは、その標準で指定されている適切な機能テストマクロを定義するだけで済みます。アプリケーションがその標準で定義されていないインタフェースおよびヘッダーを使用している場合は、適切な標準の機能テストマクロの定義に加えて、__EXTENSIONS__ も定義する必要があります。__EXTENSIONS__ を定義すると、アプリケーションには、指定された標準と競合していないすべてのインタフェースおよびヘッダーへのアクセスが提供されます。アプリケーションは、__EXTENSIONS__ をコンパイルのコマンド行か、またはアプリケーションのソースファイル内のどちらかで定義する必要があります。
POSIX.1-2008POSIX.1-2008 準拠アプリケーションとして設計されたアプリケーションは、いずれかのヘッダーをインクルードする前に、機能テストマクロ _POSIX_C_SOURCE=200809L を定義する必要があります。アプリケーション作成者は、標準を確認して、目的のオプションが実装によってサポートされているかどうかを確認するために照会できるほかのマクロを探す必要があります。
SUSv4SUSv4 仕様に準拠するアプリケーションをビルドまたはコンパイルするには、そのアプリケーションに _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 C コンパイラではデフォルトで、INCITS/ISO/IEC9899:2011 (2011 ISO C Language) 標準に準拠したコンパイルシステムが提供されます。また、INCITS/ISO/IEC 9899:1999 (1999 ISO C Language) 標準に準拠したコンパイルシステムも提供されます。
XNS5 に準拠するアプリケーションでは、すべてのリンク/ロードコマンド行に –l xnet XNS を含める必要があります。
コンパイラが redefine_extname プラグマ機能をサポートする場合、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
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
Oracle Solaris はまた、X/Open Common Applications Environment (CAE) Portability Guide Issue 3 (XPG3) および Issue 4 (XPG4)、Single UNIX Specification (SUS、XPG4v2 とも言う)、Single UNIX Specification, Version 2 (SUSv2)、Single UNIX Specification, Version 3 (SUSv3)、および 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 Interface Definition, Third Edition, Volumes 1 - 4 (SVID3) で指定されたインタフェースをサポートしています。この仕様 (UNIX Systems Laboratories) の開発者はすでに活動しておらず、またこの仕様は POSIX および X/Open CAE 仕様に従っているため、現在この仕様に準拠するには何が必要かについてはなんらかの意見の不一致があることに注意してください。
Solaris リリース 7 - 10 は、The Open Group の UNIX 98 Product Standard に準拠するようにブランド化されました。Solaris 10 から Oracle Solaris 11 までは、The Open Group の UNIX 03 Product Standard に準拠するようにブランド化されました。
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 で提供されました。
標準に準拠したユーティリティーを使用するアプリケーションは、適切なユーティリティーを取得するために、PATH (sh(1) または ksh(1)) または path (csh(1)) 環境変数を設定して、次に示されているディレクトリを指定されている順序で指定する必要があります。
/usr/bin
使用しているコンパイラのバイナリを含むディレクトリ
アプリケーションで必要なバイナリを含むほかのディレクトリ
/usr/xpg4/bin
/usr/bin
使用しているコンパイラのバイナリを含むディレクトリ
アプリケーションで必要なバイナリを含むほかのディレクトリ
/usr/xpg6/bin
/usr/xpg4/bin
/usr/bin
使用しているコンパイラのバイナリを含むディレクトリ
アプリケーションで必要なバイナリを含むほかのディレクトリ
アプリケーションが execlp() 関数または execvp() 関数を使用してシェルファイルを実行したり、system(3C) 関数を使用したりする場合に、シェルファイルの解釈に使用されるシェルは、呼び出し元が準拠する標準に応じて変わります。詳細は、exec(2) のマニュアルページを参照してください。
|
前述したように、機能テストマクロは、C 標準で指定されている機能セット以外で求められる追加の機能セットを示すために、アプリケーションによって使用されます。POSIX.1-2008 より前のバージョンの POSIX、SUSv4 より前の X/Open CAE、および SVID3 に関する履歴情報の概要を、次に示します。
POSIX次の表に、以前のバージョンの POSIX に対する機能テストマクロの一覧を示します。
|
次の表に、以前のバージョンの X/Open CAE 仕様に対するガイドラインの一覧を示します。
|
SVID3 仕様は、アプリケーションが SVID3 の要件を満たすように記述されていることを示すためにどの機能テストマクロも指定しません。SVID3 仕様は、C 標準が完成する前に記述されました。
csh(1)、ksh(1)、sh(1)、exec(2)、sysconf(3C)、system(3C)、environ(7)、lf64(7)