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 - Oracle Solaris 11.4 でサポートされている標準および仕様
Oracle Solaris 11.4 は、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 でコンパイルされたコードを実行するとどうなるかの履歴情報については、このマニュアルページの最後のセクションを参照してください。
When using the Oracle Developer Studio 12.5 or 12.6 C compiler or the latest version of GCC or LLVM/Clang found in Oracle Solaris 11.4, Oracle Solaris 11.4 supports:
The ANSI X3.159-1989 Programming Language - C (C89) and ISO/IEC 9899:1990 Programming Language - C (C90) interfaces
ISO/IEC 9899:1990 Amendment 1:1995: C Integrity (C95)
ISO/IEC 9899:1999 Programming Languages - C (C99)
INCITS/ISO/IEC 9899:2011 Programming Languages - C (C11)
See the documentation for each compiler to learn how to use the –std option to control which standard is followed when compiling C code.
If a C++ compiler such as Oracle Developer Studio, Oracle Solaris Studio, g++, or clang++ is installed, refer to its documentation for a discussion of which C++ standards are supported.
ネットワークについては、XNS4 仕様は ILP32 (32 ビット) 環境での使用に関してのみ安全であり、LP64 (64 ビット) アプリケーション環境で使用するべきではありません。LP64 (64 ビット) アプリケーション環境では XNS5 または SUSv3 を使用してください。これらの標準には、ILP32 環境と LP64 環境にわたって移植可能な、クリーンな LP64 インタフェースが含まれているからです。Oracle Solaris 11.4 は ILP32 環境と LP64 環境の両方をサポートします。Oracle Solaris の将来のリリースでは LP64 環境のみがサポートされる可能性があります。
デフォルトの Oracle Solaris インストールを SUSv4 に完全に準拠させるには、追加のステップが必要になる場合があります。
PackagesThe XPG7 Conformance group package and Oracle Developer Studio must be installed.
|
デフォルトのルートファイルシステムである ZFS は通常、SUSv4 に準拠します。ただし次の特殊な場合には、ZFS は準拠要件を満たしません。
Updating ZFS file system capacity statistics.
ほぼいっぱいになっているファイルシステムでの既存データの変更または削除。
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 コマンドを使ってその設定を確認できます。
When an application uses the execlp() function, execvp() function or execvpe() function to execute a shell file, or uses the system(3C) function, the shell used to interpret the shell file depends on the standard to which the calling program conforms.詳細は、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++ とこれらの仕様の競合する要件のためにコンパイルエラーになる場合があります。
The Oracle Developer Studio 12.5 and 12.6 C Compilers provide the INCITS/ISO/IEC 9899:2011 (C11) standard-conforming compilation system by default.They also provide the ISO/IEC 9899:1999 (C99) standard-conforming compilation system.
If the compiler supports the redefine_extname pragma feature, the Oracle Developer Studio C Compiler and C++ Compiler define the macro __PRAGMA_REDEFINE_EXTNAME to indicate that they support this feature.前述の条件が満たされた場合、標準ヘッダーは #pragma redefine_extname ディレクティブを使って関数名をライブラリエントリポイント名に適切にマッピングします。このマッピングによって、ISO C、POSIX、および X/Open の名前空間予約に対する完全なサポートが提供されます。
When using the Oracle Developer Studio 12.5 or 12.6 C Compiler, applications conforming to POSIX.1-2008 should be compiled using the utilities and flags indicated in the following table:
|
Oracle Solaris は以前、IEEE Std 1003.1 と IEEE Std 1003.2 (一般にはそれぞれ POSIX.1 と POSIX.2 と呼ばれている) をサポートしていました。次の表は、これらの標準の各バージョンと簡単な説明、およびそれに最初に準拠した SunOS または Solaris リリースを示しています。
|
Oracle Solaris also has a history of supporting the X/Open Common Applications Environment (CAE) Portability Guide Issue 3 (XPG3) and Issue 4 (XPG4); Single UNIX Specification (SUS, also known as XPG4v2); Single UNIX Specification, Version 2 (SUSv2); Single UNIX Specification, Version 3 (SUSv3); and Single UNIX Specification, Version 4 (SUSv4).XPG4 と SUS のどちらにも、Networking Services Issue 4 (XNS4) が含まれています。SUSv2 には、Networking Services Issue 5 (XNS5) が含まれています。
次の表は、各 X/Open 仕様と簡単な説明、およびそれに最初に準拠した SunOS または Solaris リリースを示しています。
|
Solaris リリース 7 から Oracle Solaris 11.4 までは、ILP32 環境と LP64 環境の両方をサポートしています。Oracle Solaris の将来のリリースでは LP64 環境のみがサポートされる可能性があります。
Solaris リリース 2.0 から Oracle Solaris 11.4 までは、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
使用しているコンパイラのバイナリを含むディレクトリ
アプリケーションで必要なバイナリを含むほかのディレクトリ
When an application uses the execlp() function or execvp() function to execute a shell file, or uses the system(3C) function, the shell used to interpret the shell file depends on the standard to which the calling program conforms.詳細は、exec(2) のマニュアルページを参照してください。
|
前述したように、機能テストマクロは、C 標準で指定されている機能セット以外で求められる追加の機能セットを示すために、アプリケーションによって使用されます。The following sections outline historical information about POSIX versions prior to POSIX.1-2008, X/Open CAE prior to SUSv4, and 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)