Go to main content

マニュアルページ セクション 7: 標準、環境、マクロ、文字セット、その他

印刷ビューの終了

更新: 2022年7月27日
 
 

C (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 - 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 環境のみがサポートされる可能性があります。

Conformance

デフォルトの Oracle Solaris インストールを SUSv4 に完全に準拠させるには、追加のステップが必要になる場合があります。

Packages

The XPG7 Conformance group package and Oracle Developer Studio must be installed.

Package
Publisher
pkg:/group/feature/xpg7
solaris
pkg:/developer/developerstudio-126/cc
solarisstudio
File systems

デフォルトのルートファイルシステムである ZFS は通常、SUSv4 に準拠します。ただし次の特殊な場合には、ZFS は準拠要件を満たしません。

  • Updating ZFS file system capacity statistics.

  • ほぼいっぱいになっているファイルシステムでの既存データの変更または削除。

SUSv4 への厳格な準拠を期待するアプリケーションの場合、UFS 上でアプリケーションを実行する必要があるほか、ZFS zvol デバイス上に UFS ファイルシステムを設定する必要もあります。

Utilities

POSIX.1-2008 に必要な動作が Solaris ユーティリティーの履歴動作と競合した場合、そのユーティリティーの元の Solaris バージョンは変更されず、標準に準拠したバージョンが /usr/xpg7/bin で提供されます。標準の以前のバージョンに関する詳細な履歴情報については、このマニュアルページの最後を参照してください。

POSIX.1-2008 標準に準拠したユーティリティーを使用するアプリケーションは、適切なユーティリティーを取得するために、PATH (sh(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 コマンドを使ってその設定を確認できます。

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) のマニュアルページを参照してください。

標準
Shell Used
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 コンパイラでのコンパイル

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:

Specification
Compiler/Flags
機能テストマクロ
POSIX.1-2008
c99
_POSIX_C_SOURCE=200809L
SUSv4
c99
_XOPEN_SOURCE=700

History

History: POSIX Standards

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

POSIX Standard
説明
リリース
POSIX.1-1988
システムインタフェースおよびヘッダー
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
対話型シェルおよびユーティリティー
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 update
Oracle Solaris 11
POSIX.1-2008
POSIX.1-2004 update
Oracle Solaris 11.4

History: X/Open and The Open Group Standards

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 リリースを示しています。

Specification
説明
リリース
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 (XPG6)
same as POSIX.1-2001
Solaris 10
SUSv4 (XPG7)
same as POSIX.1-2008
Solaris 11.4

History: Other

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)) 環境変数を設定して、次に示されているディレクトリを指定されている順序で指定する必要があります。

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, XPG6
  1. /usr/xpg6/bin

  2. /usr/xpg4/bin

  3. /usr/bin

  4. 使用しているコンパイラのバイナリを含むディレクトリ

  5. アプリケーションで必要なバイナリを含むほかのディレクトリ

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) のマニュアルページを参照してください。

標準
Shell Used
POSIX.1 (1990-2008), SUS, SUSv2, SUSv3, SUSv4, XPG4, XPG5, XPG6
/usr/xpg4/bin/sh
POSIX.1 (1988), SVID3, XPG3
/usr/bin/sh

履歴: 機能テストマクロ

前述したように、機能テストマクロは、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 に対する機能テストマクロの一覧を示します。

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
X/Open CAE

次の表に、以前のバージョンの X/Open CAE 仕様に対するガイドラインの一覧を示します。

Specification
Instructions
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)