名前 | 機能説明 | セキュリティポリシー | 定義 | MT レベルのライブラリ | ファイル | 関連項目 | 診断 | マルチスレッドアプリケーションに関する注意事項 | リアルタイムアプリケーション | 注意事項
本セクションでは、Trusted Solaris 環境においてさまざまなライブラリにある関数のうち、直接 UNIX システムのプリミティブを呼び出す関数 (セクション 2 で説明 ) 以外の関数について説明します。
Trusted Solaris 環境に固有で、ここから派生した関数 (たとえば、labelinfo(3) など)。labelinfo() は label_encodings(4) ファイルからセキュリティラベルに関する情報を取り出します。
Trusted Solaris のセキュリティポリシーに従って動作するように変更された SunOS 5.7 関数と X Window 関数 (たとえば、accept(3N) など)。変更された関数のマニュアルページは書き直され、Trusted Solaris 環境での関数の動作が当てはまらない情報は削除されました。accept() などの変更されたマニュアルページには、ベースに追加された新しい機能や引数などの説明も追加されています。
Solaris 7 リリースから変更されていない SunOS
5.7 関数 (たとえば、connect(3N) など)。
印刷版マニュアルには、Trusted Solaris 環境で変更されたか、または Trusted Solaris 環境から派生した関数だけが含まれます。また、/usr/openwin/man/man3x11tsol にある X Window ライブラリマニュアルページが含まれます。変更のない Sun OS 5.7 マニュアルページの印刷版は、SunOS 5.7 リファレンスマニュアル にあります。
関数宣言は、各マニュアルページに示してある #include ファイルから取り込むことができます。いくつかの代表的な関数またはライブラリについては、セクション番号の後の文字で識別できます。
これらの関数は (BSD 関数との) ソース互換性ライブラリです。 このライブラリは、共有オブジェクトとしては libucb.so が、アーカイブとしては libucb.a が実装されています。ただし、C コンパイラシステムによって自動的にリンクはされません。 /usr/ucb サブディレクトリにある このライブラリをリンクする場合、cc のコマンド行上で -lucb を指定します。このライブラリ用のヘッダーファイルは /usr/ucbinclude にあります。
これらの関数、セクション 2 で説明する関数、および (3S) の関数は、標準 C ライブラリ libc です。これらは、C コンパイラシステムによって自動的にリンクされます。標準 C ライブラリは、共有オブジェクトとしては libc.so が、アーカイブとしては libc.a が実装されています。 デフォルトでは、C のプログラムは、C の標準ライブラリの共有オブジェクトのバージョンとリンクされることになっています。cc のコマンド行上で -dn を指定すると、 アーカイブのパージョンとリンクできます。その他の機能については、libc(4)、cc(1B) および「ANSI C Programmer's Guide」の「 C Compilation System 」の章を参照してください。 関数によっては、標準に適合した環境における動作が異なる場合があります。これは個々のマニュアルページに記述されています。standards(5) を参照してください。
libc 内のいくつかの関数は、Trusted Solaris に対応するように変更されました。ベース用の関数との動作や条件の違いについては、個々のマニュアルページに説明されています。
これらの関数は ELF (Extensible Linking Formats) アクセスライブラリ libelf です。このライブラリは、elf ファイル (実行可能ファイル、オブジェクトファイル、共有オブジェクトファイル) の作成および解析を行うためのインタフェースを提供しています。 libelf は、共有オブジェクトとしては libelf.so が、アーカイブとしては libelf.a が実装されています。ただし、 C コンパイラシステムによって 自動的にリンクはされません。このライブラリをリンクする場合、cc のコマンド行上で -lelf を指定します。libelf(4) を参照してください。
これらの関数は libgen という文字列パターンマッチングおよびパス名操作 ライブラリです。このライブラリはアーカイブとしては libgen.a が実装されています。ただし、共有オブジェクトとしては実装されておらず、C コンパイラシステムによっても自動的にリンクされません。このライブラリをリンクする場合、cc のコマンド行上で -lgen を指定します。
これらの関数はカーネルの仮想記憶ライブラリへアクセスすることができ、共有オブジェクトとしては libkvm.so が、アーカイブとしては libkvm.a が実装されています。 ただし、C コンパイラシステムによって 自動的にリンクはされません。このライブラリをリンクする場合、cc のコマンド行上で -lkvm を指定します。libkvm(4) を参照してください。
libkvm 内の kstat_write() 関数は、Trusted Solaris 環境用に変更されました。動作または必要条件の変更については、マニュアルページに記載されています。
これらの関数は数学ライブラリ libm です。このライブラリは 共有オブジェクトとしては libm.so が、アーカイブとしては libm.a が実装されています。 ただし、C コンパイラシステムによって自動的にリンクはされません。このライブラリをリンクする場合、cc のコマンド行上で -lm を指定します。libmp(4) を参照してください。
これらの関数はネットワークサービスライブラリ libnsl です。libnsl(3) を参照してください。Trusted Solaris 環境では、いくつかのネットワークサービスライブラリ関数を変更し、Trusted Systems Interoperability Group (TSIG) TSIX [RE] 1.1 ライブラリ、libt6(3) をセクションに追加しています。このライブラリは 共有オブジェクトとしては libnsl.so が、アーカイブとしては libnsl.a が実装されています。ただし、C コンパイラシステムによって自動的にリンクはされません。このライブラリをリンクする場合、cc のコマンド行上で -lnsl を指定します。
libnsl.so と libt6.so は共有オブジェクトとして実装され、libnsl.aはアーカイブとしても指定されます。C コンパイラシステムでは、どちらのライブラリも自動的にはリンクされません。libnsl とリンクするには、cc コマンド行で -lnsl を指定してください。libt6 ライブラリとリンクするには、cc コマンド行で -lt6 を指定してください。
man3n に含まれる関数の中には、以下のような他のネットワークライブラリを 組み込んでいるものもあります。
libsocket (libsocket(4)を参照)
libresolv (libresolv(4)を参照)
librpcsvc (librpcsvc(4)を参照)
libnisdb (libnisdb(4)を参照)
librac (librac(4)を参照)
libxfn (libxfn(4)を参照)
libkrb (libkrb(4)を参照)
基本ネットワーク関数の多くは、X/Open ネットワークインタフェースライブラリの libxnet でも利用できます。libxnet インタフェースについての詳細は、後述の (3XN) を参照してください。
すべての場合において、XTI や TLI API より API ソケットを使用されることをお勧めします。XPGV4v2 システムへの互換性が必要な場合は、アプリケーションには必ず libxnet インタフェースを使用してください。互換性が必要でない場合は libxnet よりも libsocket と libnsl のソケットインタフェースを使用することをお勧めします。XTI と TLI API 間では、TLI インタフェース (libnsl で利用可能) よりも XTI インタフェース (libxnet で利用可能) を使用することをお勧めします。
これらの関数は POSIX.4 リアルタイムライブラリの libposix4 です。このライブラリは共有オブジェクトとしては libposix4.so だけが実装されています。 C コンパイラシステムによって 自動的にリンクはされません。 このライブラリをリンクする場合、cc のコマンド行上で libposix4 を指定します。librt(4) を参照してください。
librt 内の clock_settime() 関数は、Trusted Solaris 環境用に変更されました。動作または必要条件の変更については、マニュアルページに記載されています。
これらの関数は標準 I/O パッケージです (stdio(3S) を参照 ) 。標準 C ライブラリ libc を使って、 コンパイルされ、C コンパイラシステムによって自動的にリンクされます。標準 C ライブラリは、共有オブジェクトとしては libc.so が、アーカイブとしては libc.a が実装されています。libc(4) を参照してください。
これらの関数はスレッドライブラリ libpthread と libthread を構成します。これらのライブラリは、 マルチスレッドのアプリケーションを作成するために使われます。 libpthread が POSIX (standards(5) を参照) スレッドインタフェースを実装しているのに対し、libthread は Solaris スレッドインタフェースを実装しています。
POSIX と Solaris の両スレッドを同じアプリケーション内で使うこともできます。 両者の実装形態には互換性があります。ただし POSIX スレッドだけが、POSIX に適合した他の環境への移植性を保証します。
POSIX と Solaris の両スレッドを同一アプリケーション内で使用したとき、名前は同じでもセマンティクス (意味論) が異なる複数の呼び出しが存在していれば、Solaris スレッドよりも POSIX のセマンティクスの方が優先されます。たとえば fork() の呼び出しには、POSIX スレッドライブラリにリンクされたプログラム中の fork1() セマンティクスが、プログラムが Solaris スレッドである -lthread にもリンクされているか否かに関わらず暗黙のうちに含まれています。
libpthread と libthread ライブラリには共有オブジェクトとして libpthread.so と libthread.so がそれぞれ実装されています。 ただし、アーカイブライブラリとしては 実装されておらず、C コンパイラシステムによっても自動的にリンクされません。 これらのライブラリをリンクする場合、cc のコマンド行上で -lpthread または -lthread を指定します。 libpthread(4) と libthread(4) を参照してください。
以下の関数は、 POSIX ではオプションであり、現在の Solaris のリリースではサポートされていません。
int pthread_mutexattr_setprotocol(pthread_mutexattr_t *attr, int protocol);
int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *attr, int *protocol);
int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *attr, int prioceiling);
int pthread_mutexattr_getprioceiling(const pthread_mutexattr_t *attr, int *prioceiling);
これらの関数は、Trusted Solaris ライブラリ libtsol です。libtsol.so は共有オブジェクトとして実装されていますが、C コンパイルシステムにより自動的にはリンクされません。libtsol ライブラリとリンクさせるには、cc コマンド行で -ltsol を指定します。
特殊ライブラリ。 これらの関数はたとえば以下のライブラリに含まれています。
libadm (libadm(4)を参照)
libbsdmalloc (libbsdmalloc(4) を参照)
libcrypt (libcrypt(4) を参照)
libcurses (libcurses(4) を参照)
libdl (libdl(4) を参照)
libform (libform(4) を参照)
libmail ,
libmalloc (libmalloc(4) を参照)
libmapmalloc (libmapmalloc(4) を参照)
libmenu (libmenu(4) を参照)
libpanel (libpanel(4) を参照)
これらの関数は X Window ライブラリへの Trusted Solaris 拡張です。 libXtsolは共有オブジェクトとして実装されています。しかし、C コンパイラシステムによって自動的にリンクはされません。libXtsolライブラリをリンクする場合、cc コマンド行上で -lX11 の後に -lXtsolを指定します (cc -lX11 -lXtsol)。
これらの関数は /usr/xpg4/lib/libcurses.so.1 にある X/Open Curses ライブラリです。このライブラリは端末画面への入出力を作成したり、修正したりするための 国際化関数とマクロを提供します。このライブラリに含まれる関数は、ウィンドウの作成、テキストの強調、画面への書き込み、ユーザー入力の読み込み、カーソルの移動を行います。X/Open Curses は画面を更新する際の動作を最適化するように設計されています。X/Open Curses ライブラリは X/Open 拡張 Curses 仕様 Issue 4 に基づいています。
これらの関数は、X/Open CAE 仕様書の「 Networking Services, Issue 4 」(1994 年 9 月発行) に従っている X/Open ネットワークインタフェースを構成しており、/usr/lib/libxnet.so.1 にあります。コンパイルの詳細については、libxnet(4) と standards(5) を参照してください。
システムコールはライブラリルーチン用のポリシーを実施します。したがって、通常、システムコールのマニュアルページで、どのようなポリシーがシステムコールに対して実施されるかを調べておく必要があります。ただし、ポリシーは、次のようなガイドラインに従ってライブラリルーチンのマニュアルページに説明されていることがあります。
ライブラリルーチンとそのルーチンが使用するシステムコールとの関係が直感的に明らかである場合たとえば、fopen(3) と open(2)の関係、関連するシステムコールは「関連項目」で説明されます。そのポリシーは、ライブラリルーチンのマニュアルページでは繰り返し説明されません。
ライブラリルーチンとそのルーチンが使用するシステムコールとの関係が明らかでない場合たとえば、t6sendto(3N) と putpmsgattr(2) の関係、そのポリシーは、ライブラリルーチンのマニュアルページで説明されます。
システムコールのマニュアルページの情報が多すぎて見つけるのが困難である場合、関連する情報は、ライブラリルーチンのマニュアルページで繰り返し説明されます。たとえば、t6peek_attr(3N) は streamio(7I) に関連しますが、このマニュアルページは 21 ページもの長さになるため、t6peek_attr(3N) と streamio(7I) の両方に記載されます。
ライブラリが公開されたインタフェースであり、システムコールが文書化されていない場合、そのポリシーは、ライブラリのマニュアルページで説明されます。たとえば、いくつかの TSIX ライブラリルーチンと文書化されていないシステムコールとの関係を示す情報が、これに該当します。
文字とは、 マシンのバイトに適合できるビットパターンを指します。例外 : ある種の外国語では、"文字" は 1 バイト以上を必要とし、複数バイトで表現されます。
NULL 文字とは、値が 0 の文字を指し、C言語では便宜上 ¥ 0と表されます。 文字配列とは、文字の並び (シーケンス) を指します。NULL 終了文字配列 (文字列) とは、最後の文字が NULL 文字である文字の並びを指します。NULL 文字列とは、終了 NULL 文字だけを含む文字配列を指します。NULL ポインタとは、0 をポインタにキャストすることによって得られる値を指します。 C言語では、NULL の値は絶対にどのような合法的なポインタとも一致しません。ですから、ポインタを返す関数のほとんどはポインタを使ってエラーを示すため NULL を返します。NULL マクロは <stdio.h> の中で定義されています。size_t の型は適切なヘッダの中に定義されています。
MT レベルのライブラリの詳細については attributes(5) を参照してください。
通常、/usr/include
通常、/usr/ccs/lib
Trusted Solaris ライブラリに固有の内容については、intro(2) のマニュアルページの、特に 定義 項と Trusted Solaris 開発ガイド を参照してください。
ar(1), cc(1B), ld(1), nm(1), , stdio(3S), pthread_atfork(3T), libadm(4), libbsdmalloc(4), libc(4), libcrypt(4), libcurses(4), libdl(4), libdrb(4), libelf( 4), libform( 4), libkvm(4), libmalloc(4)libmapmalloc(4), libmenu(4), libmp(4), libnisdb(4), libnsl(4), libpanel(4), librac(4), libresolv(4), librpcsvc(4), libsocket(4), libpthread(4), libthread(4), libxfn(4), libxnet(4), attributes (5), standards(5)
プロファイリングツール
ANSI C Programmer's Guide
浮動小数点の値を返す関数の場合、エラー処理はコンパイルのモードによって変わります。cc に -Xt オプションを指定した場合 (デフォルト)、指定された引数を定義していないとき、または、 値を表現できないとき、これらの関数は 0、+-HUGE、または NaN という決まった値を返します。-Xa および -Xc コンパイルモードでは、+-HUGE の代わりに +-HUGE_VAL が返されます (HUGE_VAL および HUGE は <math.h> の中で定義されています。HUGE_VAL は無限を表し、 HUGE は単精度小数点の最大値を表します) 。
マルチスレッドアプリケーションをコンパイルする際、_POSIX_C_SOURCE フラグ、_POSIX_PTHREAD_SEMANTICS フラグ、REENTRANT フラグのいずれかのフラグを、 コマンド行 に定義する必要があります。これにより、マルチスレッドのアプリケーションだけに適用される関数の定義が特別に有効になります。 POSIX.1003.1c に適合するアプリケーションに対しては、_POSIX_C_SOURCE フラグに >= 199506L 以上の値を定義してください。
cc [flags] file. . . -D_POSIX_C_SOURCE=199506L -lpthread
Solaris の fork() と fork1() 関数を使用した POSIX では、 次のようにコンパイルしてください。
cc [flags] file... -D_POSIX_PTHREAD_SEMANTICS -lthread
Solaris スレッドでは、 次のようにコンパイルしてください。
cc [flags] file... -D_REENTRANT -lthread
シングルスレッドのアプリケーションを作成する際、 上記のフラグを定義してはいけません。定義しないことにより、マルチスレッドをサポートしていない旧リリースの Solaris 上で実行可能なバイナリが生成されます。
Unsafe インタフェースは、メインスレッド以外からは 呼び出さないでください。これはアプリケーションの安全な実行を保証するためです。
MT-Safe インタフェースは、各関数やライブラリのマニュアルページの 「属性」の項に記述されています ( attributes(5) を参照)。インタフェースが MT-Safe であることが マニュアルページ中に明示されていないときは、そのインタフェースは Unsafe であるとみなしてください。
早期のバインディングを可能にするための非 NULL 値に対して、環境変数 LD_BIND_NOW を設定してください。詳細については「 リンカーとライブラリ」中の再配置に関する説明を参照してください。
ここで説明する関数、外部変数、またマクロをユーザーのプログラムの中で再定義してはいけません。他の名前を再定義してもこれらのライブラリの動作に影響を与えませんが、同じ名前を再定義すると、インクルードヘッダーの宣言と衝突してしまいます。
INCDIR の中にあるヘッダーは、本マニュアルで説明するほとんどの関数のプロトタイプを提供します (関数のプロトタイプとは、引数の型を含む関数宣言のことです) 。 関数のプロトタイプを使用すると、ユーザーのプログラムの中で使用されている 上記関数の使用法が間違っていないか、コンパイラがチェックすることができます。lint プログラムチェッカを使用すると、ヘッダーが #include 文によってインクルードされていないという矛盾をチェックすることができます。 セクション 2、 3C、 3S の定義は自動的にチェックされます。 その他の定義をチェックする場合、lint に -l オプションを指定します (たとえば、 libm の定義をチェックするには -lm を指定します) 。できるだけ lint を使用されることを強くお勧めします。「 プロファイリングツール 」の lint に関する章を参照してください。
STREAMS と stream の違いには十分気を付けてください。STREAMS とは、カーネルの機構の一種を指し、ネットワークサービスとデータ通信ドライバの開発をサポートします。STREAMS は、 ユーティリティルーチン、カーネル機能、そしてデータ構造体から構成されます。stream とは、 STREAMS に関連するバッファリングで使用されるファイルを指します。stream は <stdio.h> の中で FILE 型へのポインタとして定義されています。
各要素の詳細な定義では、実装に特有なシンボリック名を参照する必要がある場合があります。ただし、アプリケーションプログラムで使用できるかどうか 期待するのは必須ではありません。これらのシンボリック名の多くは、境界の条件やシステムの制限を記述するものです。
本セクションでは、分かりやすくするために、このような実装に特有な値をシンボリック名にしています。このようなシンボリック名は必ず中括弧 ( { } ) で囲まれ、他の実装に特有な定数のシンボリック名と区別されます。 後者のシンボリック名には、アプリケーションはヘッダーを使ってアクセスできます。 前者のシンボリック名にアクセスするためには、アプリケーションプログラムはヘッダーを使う必要はありません。ただし、このようなシンボリック名は特定のシステムの文書中で定義できます (定義していることもある)。
一般には、移植可能なアプリケーションプログラムは、コードの中で、このようなシンボリック名を参照してはいけません。たとえば、あるアプリケーションプログラムは、あるルーチンに提供された引数リストの長さが ARG_MAX より大きいかどうかをテストしてはなりません。
名前 | 機能説明 | セキュリティポリシー | 定義 | MT レベルのライブラリ | ファイル | 関連項目 | 診断 | マルチスレッドアプリケーションに関する注意事項 | リアルタイムアプリケーション | 注意事項