マニュアルページセク ション 5: 標準、環境、マクロ

印刷ビューの終了

更新: 2014 年 7 月
 
 

SUSv2(5)

名前

標準 , ANSI , C , C++ , ISO , POSIX , POSIX.1 , POSIX.2 , SUS , SUSv2 , SUSv3 , SVID , SVID3 , XNS , XNS4 , XNS5 , XPG , XPG3 , XPG4 , XPG4v2 - Oracle Solaris でサポートされている標準および仕様

説明

Oracle Solaris は、IEEE Std 1003.1 および IEEE Std 1003.2 (一般には、それぞれ POSIX.1 および POSIX.2 と呼ばれます) をサポートしています。次の表は、これらの標準の各バージョンと簡単な説明、およびそれに最初に準拠した SunOS または Solaris リリースを示しています。

POSIX 標準
説明
解放
POSIX.1-1988
システムインタフェースおよびヘッダー
SunOS 4.1
POSIX.1-1990
POSIX.1-1988 更新
Solaris 2.0
POSIX.1b-1993
リアルタイム拡張
Solaris 2.4
POSIX.1c-1996
スレッド拡張
Solaris 2.6
POSIX.2-1992
シェルおよびユーティリティー
Solaris 2.5
POSIX.2a-1992
対話型シェルおよびユーティリティー
Solaris 2.5
POSIX.1–2001
POSIX.1-1990、POSIX.1b-1993、POSIX.1c-1996、POSIX.2-1992、および POSIX.2a-1992 更新
Solaris 10
POSIX.1-2004
POSIX.1-2001 更新
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) もサポートしています。XPG4 と SUS のどちらにも、Networking Services Issue 4 (XNS4) が含まれています。SUSv2 には、Networking Services Issue 5 (XNS5) が含まれています。

次の表は、各 X/Open 仕様と簡単な説明、およびそれに最初に準拠した SunOS または Solaris リリースを示しています。

X/Open CAE
仕様
説明
解放
XPG3
SVID3 のユーティリティーを含む POSIX.1-1988 のスーパーセット
SunOS 4.1
XPG4
XPG3 からの POSIX 標準の拡張を含む POSIX.1-1990、POSIX.2-1992、および POSIX.2a-1992 のスーパーセット
Solaris 2.4
SUS (XPG4v2)
一般的なアプリケーションパッケージで広範に使用されている履歴 BSD インタフェースを含む XPG4 のスーパーセット
Solaris 2.6
XNS4
ソケットおよび XTI インタフェース
Solaris 2.6
SUSv2
POSIX.1b-1993、POSIX.1c-1996、および ISO/IEC 9899 (C Standard) Amendment 1 をサポートするために拡張された SUS のスーパーセット
Solaris 7
XNS5
XNS4 のスーパーセットおよび LP64 クリーンの派生型。
Solaris 7
SUSv3
POSIX.1–2001 と同じ
Solaris 10

XNS4 仕様は ILP32 (32 ビット) 環境での使用に関してのみ安全であり、LP64 (64 ビット) アプリケーション環境で使用すべきではありません。ILP32 および LP64 環境にわたって移植可能な LP64 クリーンのインタフェースを備えた XNS5 または SUSv3 を使用してください。Solaris リリース 7 から Oracle Solaris 11 までは、ILP32 環境と LP64 環境の両方をサポートしています。

Solaris リリース 7 - 10 は、The Open Group の UNIX 98 Product Standard に準拠するようにブランド化されています。Solaris 10 から Oracle Solaris 11 までは、The Open Group の UNIX 03 Product Standard に準拠するようにブランド化されています。

Solaris リリース 2.0 から Oracle Solaris 11 までは、System V Interface Definition, Third Edition, Volumes 1 - 4 (SVID3) で指定されたインタフェースをサポートしています。ただし、この仕様 (UNIX Systems Laboratories) の開発者はすでに活動しておらず、またこの仕様は POSIX および X/Open CAE 仕様に従っているため、現在この仕様に準拠するには何が必要かについてはなんらかの意見の不一致があることに注意してください。

Oracle Solaris Studio 12.3 C コンパイラがインストールされている場合、Oracle Solaris 11 は ANSI X3.159-1989 Programming Language - C および ISO/IEC 9899:1990 Programming Language - C (C) インタフェースをサポートします。

Oracle Solaris Studio 12.3 C コンパイラがインストールされている場合、Oracle Solaris 11 は ISO/IEC 9899:1990 Amendment 1:1995: C Integrity をサポートします。

Oracle Solaris Studio 12.3 C コンパイラがインストールされている場合、Oracle Solaris 11 は ISO/IEC 9899:1999 Programming Language - C をサポートします。

Oracle Solaris Studio 12.3 C++ コンパイラがインストールされている場合、Oracle Solaris 11 は ISO/IEC 14882:1998 Programming Language - C++ をサポートします。その標準のサポートされていない機能は、コンパイラの README ファイルで説明されています。

ユーティリティー

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 と競合する場合、SUSv3 標準に準拠した新しいバージョンは /usr/xpg6/bin で提供されています。

標準に準拠したユーティリティーを使用するアプリケーションは、適切なユーティリティーを取得するために、PATH ( sh (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() (exec(2) を参照) を使用してシェルファイルを実行するか、または system(3C) を使用する場合、そのシェルファイルを解釈するために使用されるシェルは呼び出し元が準拠する標準によって異なります:

標準
使用されるシェル
1989 ANSI C、1990 ISO C、1999 ISO C、POSIX.1 (1990?2001)、SUS、SUSv2、SUSv3、XPG4
/usr/xpg4/bin/sh
POSIX.1 (1988)、SVID3、XPG3 (標準が指定されていない)
/usr/bin/sh

機能テストマクロ

機能テストマクロは、C 標準で指定されている機能セット以外で求められる追加の機能セットを示すために、アプリケーションによって使用されます。アプリケーションが特定の標準 (POSIX や X/Open CAE など) で定義されているインタフェースおよびヘッダーのみを使用する場合、そのアプリケーションは、その標準で指定されている適切な機能テストマクロを定義するだけで済みます。アプリケーションがその標準で定義されていないインタフェースおよびヘッダーを使用している場合は、適切な標準の機能テストマクロの定義に加えて、__EXTENSIONS__ も定義する必要があります。__EXTENSIONS__ を定義すると、アプリケーションには、指定された標準と競合していないすべてのインタフェースおよびヘッダーへのアクセスが提供されます。アプリケーションは、__EXTENSIONS__ をコンパイルのコマンド行か、またはアプリケーションのソースファイル内のどちらかで定義する必要があります。

1989 ANSI C、1990 ISO C、1999 ISO C

アプリケーションが C アプリケーションに準拠していることを示すためにどの機能テストマクロも定義する必要はありません。

ANSI/ISO C++

ANSI/ISO C++ では、機能テストマクロが定義されていません。コンパイラのデフォルト設定とコマンド行オプションに基づいてコンパイラによって事前に定義されている標準 C++ の通知マクロ __cplusplus が 199711 以上の値に設定されている場合、コンパイラは標準に準拠したモードで動作し、C++ 標準への準拠を示します。199711 の値は ISO/IEC 14882:1998 への準拠を示します (その標準に必要です)。(上で説明したように、この標準への準拠は不完全です。)

POSIX や X/Open CAE では C++ バインディングが定義されていないため、_POSIX_SOURCE_POSIX_C_SOURCE_XOPEN_SOURCE などの機能テストマクロを指定すると、標準 C++ とこれらの仕様の競合する要件のためにコンパイルエラーになる場合があります。

POSIX

POSIX.1 アプリケーションに準拠するように設計されたアプリケーションは、いずれかのヘッダーをインクルードする前に、この標準で指定されている機能テストマクロを定義する必要があります。次に示されている標準の場合、アプリケーションは示されている機能テストマクロを定義する必要があります。アプリケーション作成者は、対応する標準を確認して、目的のオプションが実装によってサポートされているかどうかを確認するために照会できるほかのマクロを探す必要があります。

POSIX 標準
機能テストマクロ
POSIX.1-1990
_POSIX_SOURCE
POSIX.1-1990 および POSIX.2-1992 C-Language Bindings Option
_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
SVID3

SVID3 仕様は、アプリケーションが SVID3 の要件を満たすように記述されていることを示すためにどの機能テストマクロも指定しません。SVID3 仕様は、C 標準が完成する前に記述されました。

X/Open CAE

いずれかの X/Open CAE 仕様に準拠するアプリケーションを構築またはコンパイルするには、次のガイドラインに従ってください。アプリケーションに CAE 機能と POSIX 機能の両方が必要な場合、そのアプリケーションは POSIX 機能テストマクロを設定する必要はありません。

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 を定義する必要があります。

コンパイル

Oracle Solaris Studio 12.3 C コンパイラは、ISO/IEC 99899:1999 (1999 ISO C Language) 標準に準拠したコンパイルシステムと c99 ユーティリティーを提供します。

アプリケーションをリンクするために ld が直接使用されている場合は、そのアプリケーションが POSIX.1–2001 または SUSv3 に準拠していないかぎり、いずれかの link/load コマンド行で /usr/lib/values-xpg4.o を指定する必要があります。準拠している場合は、いずれかの link/load コンパイル行で /usr/lib/values-xpg6.o を指定する必要があります。アプリケーションをリンクするために cc または CC が使用されている場合、コンパイラは適切なファイルを自動的に追加します。ただし、次の表で説明されている方法でアプリケーションを構築することをお勧めします。

XNS4 または XNS5 に準拠したアプリケーションは、それぞれ SUS または SUSv2 に対して指定された機能テストマクロの定義に加えて、いずれかの link/load コマンド行で –l XNS をインクルードする必要があります。

コンパイラが redefine_extname プラグマ機能をサポートしている場合 (Oracle Solaris Studio 12.3 C コンパイラおよび Oracle Solaris Studio 12.3 C++ コンパイラは、この機能をサポートしていることを示すためにマクロ __PRAGMA_REDEFINE_EXTNAME を定義しています)、標準ヘッダーは、関数名をライブラリのエントリポイント名に正しくマップするために #pragma redefine_extname 指令を使用します。このマッピングによって、ISO C、POSIX、および X/Open の名前空間予約に対する完全なサポートが提供されます。

このプラグマ機能がコンパイラでサポートされていない場合、ヘッダーは、内部の関数名を適切なライブラリのエントリポイント名にマップするために #define 指令を使用します。この例では、lf64(5) のマニュアルページに示されている明示的な 64 ビットファイルオフセットシンボルは、代わりのエントリポイントを指定するために実装で使用されるため、アプリケーションではこれらの名前の使用を避けるようにしてください。

Oracle Solaris Studio 12.3 C コンパイラを使用している場合は、上に示されている仕様に準拠するアプリケーションを、次の表に示されているユーティリティーとフラグを使用してコンパイルするようにしてください:

Specification            Compiler/Flags         Feature Test Macros
_________________________________________________________________________
1989 ANSI C and 1990 ISO C    c89                none
_________________________________________________________________________
1999 ISO C                    c99                none
_________________________________________________________________________
SVID3                         cc -Xt -xc99=none  none
_________________________________________________________________________
POSIX.1-1990                  c89                _POSIX_SOURCE
_________________________________________________________________________
POSIX.1-1990 and POSIX.2-1992 c89                _POSIX_SOURCE  and
  C-Language Bindings Option                     POSIX_C_SOURCE=2
_________________________________________________________________________
POSIX.1b-1993                 c89                _POSIX_C_SOURCE=199309L
_________________________________________________________________________
POSIX.1c-1996                 c89                _POSIX_C_SOURCE=199506L
_________________________________________________________________________
POSIX.1-2001                  c99                _POSIX_C_SOURCE=200112L
_________________________________________________________________________
POSIX.1c-1996                 c89                _POSIX_C_SOURCE=199506L
_________________________________________________________________________
CAE XPG3                      cc -Xa -xc99=none  _XOPEN_SOURCE
_________________________________________________________________________
CAE XPG4                      c89                _XOPEN_SOURCE and
                                                 _XOPEN_VERSION=4
_________________________________________________________________________
SUS (CAE XPG4v2)              c89                _XOPEN_SOURCE and
  (includes XNS4)                                 _XOPEN_SOURCE_EXTENDED=1
_________________________________________________________________________
SUSv2 (includes XNS5)         c89                _XOPEN_SOURCE=500
_________________________________________________________________________
SUSv3                         c99                _XOPEN_SOURCE=600

LP64 (64 ビット) プログラミング環境をサポートしているプラットフォームの場合は、XNS5 ライブラリコールを使用している SUSv2 に準拠した LP64 アプリケーションを、次の形式のコマンド行で構築するようにしてください:

c89 $(getconf XBS5_LP64_OFF64_CFLAGS) -D_XOPEN_SOURCE=500 \
    $(getconf XBS5_LP64_OFF64_LDFLAGS) foo.c -o foo \
    $(getconf XBS5_LP64_OFF64_LIBS) -lxnet

同様の SUSv3 に準拠した LP64 アプリケーションを、次の形式のコマンド行で構築するようにしてください:

c99 $(getconf POSIX_V6_LP64_OFF64_CFLAGS) -D_XOPEN_SOURCE=600 \
    $(getconf POSIX_V6_LP64_OFF64_LDFLAGS) foo.c -o foo \
    $(getconf POSIX_V6_LP64_OFF64_LIBS) -lxnet
SUSv3
c99

_XOPEN_SOURCE=600

関連項目

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