#include <errno.h>
このセクションでは、全システムコールについて説明します。大多数のシステムコールには、エラー条件が返される可能性があります。通常はありえない値が返されることによって、エラー条件の発生が示されます。その値には -1 または NULL ポインタが使われるのが一般的です。 詳細については個々のシステムコールの説明文を参照してください。 またエラー発生時には、外部変数 errno にエラー番号が与えられます。なおシステムコールが正常に終了しても errno はクリアされないので、この変数はエラーが返されたときにだけ確認してください。
マルチスレッドアプリケーションの場合、_REENTRANT フラグを コンパイル時 のコマンド行 (-D_REENTRANT) で定義してください。_REENTRANT フラグを定義すると、errno はマクロになり、スレッド毎に個別の errno を保持できるようになります。また、この errno は代入文の左辺、右辺のどちらにも使用できるので、 変数と同様に扱えます。
アプリケーションとしては、_lwp_*() 関数ではなく 結合スレッドを使用してください (thr_create(3T) 参照)。LWP (軽量プロセス) を直接使用することはお勧めできません。ライブラリは、LWP ではなくスレッドで使用した場合にのみ 安全であるためです。
本セクション中の各システムコールの説明では、そのコールが返す可能性があるエラー番号をすべて記述しています。各エラー番号に対応するエラー名 (<errno.h> 中に定義) とその意味を以下に説明します。
スーパーユーザーではありません。通常このエラーが返されるのは、ファイルに対してその所有者 またはスーパーユーザーだけに許されている更新処理を 他のユーザーが行おうとした場合です。またスーパーユーザーだけに許されている何らかの処理を 一般のユーザーが実施しようとした場合にも、このエラーが返されます。
ファイルまたはディレクトリが存在しません。指定された名前を持つファイルが存在すべきなのに存在しない、またはパス名中のいずれかのディレクトリが存在しません。
プロセス、LWP、あるいはスレッドが存在しません。指定された PID、LWPID_t、あるいは thread_t に該当するプロセスがシステム上に存在しません。
システムコールに割り込みがかかりました。システムサービス関数の実行中に、ユーザーがキャッチするよう指定した 非同期シグナル (割り込みや終了など) が発生しました。シグナルの処理が終了した後に、システム関数の実行が再開されると、あたかもその関数へのコールがこのエラーを返したかのように見えます。
マルチスレッドアプリケーションでは、他のスレッドまたは LWP が fork(2) を呼び出すと、EINTR が返されることがあります。
I/O エラー。物理的な I/O エラーが発生しました。場合によっては、I/O エラーを実際に起こしたコールの直後のコールに対してこのエラーが返されることがあります。
デバイスまたはアドレスが存在しません。特殊ファイルへの I/O を指定したが、該当するサブデバイスが存在しない、または該当するサブデバイスがデバイスの限度を超えて存在します。またこのエラーは、たとえばテープデバイスがオンライン状態にない、あるいはディスクデバイスにディスクパックがロードされていないような場合にも返されます。
引数リストが長すぎます。exec ファミリの関数に対して、ARG_MAX が示すバイト数より長い引数リストが渡されました (exec(2) 参照)。引数リストの最大長は、実際の引数リストの長さと環境がエクスポートしたシェル変数の長さの合計値です。
exec フォーマットエラー。ファイル実行要求が出され、アクセス権は適切ですが、 ファイルのフォーマットが正しくありません (a.out(4) 参照)。
ファイル番号が間違っています。ファイル記述子が示すファイルがオープンされていません。あるいは書き込み専用にオープンされたファイルへ読み取り要求 (read(2)) が 発行されました (または逆に、読み取り専用にオープンされたファイルへの書き込み要求 ( write(2)) が発行されました)。
子プロセスができていません。プロセスが wait(2) 関数を実行しましたが、存在するあるいは待つべき子プロセスがありませんでした。
プロセス数、あるいは LWP が限界です。たとえばシステムのプロセステーブルが満杯またはユーザーがこれ以上のプロセスを生成することを許されていないなどの理由で fork(2) 関数の実行が失敗しました。またはメモリー不足あるいはスワップ領域不足のためコールが失敗しました。
領域が足りません。brk()、sbrk() (brk(2) 参照)、または exec ファミリの関数のどれか 1 つを実行中に、システムが 割り当て可能な限度を超えた領域をプログラムが要求しました。 割り当て可能領域の最大値は一時的な値ではなく、システムパラメータとして定義されています。一部のアーキテクチャでは、テキストセグメント、データセグメント、またはスタックセグメントを構築するのに必要なセグメンテーションレジスタが多すぎる場合、および fork(2) 関数の実行中にスワップ領域が不足した 場合にも、このエラーが発生します。 リモート ファイルシェアリング (RFS) に関連したリソース上でこのエラーが発生した場合、一時的なメモリー不足を表す場合もあります (システムコールが発行されたときのシステムの動作により異なります)。
アクセス権が与えられていません。ファイル保護システムで許可されていない方法でファイルをアクセスしようとしました。
アドレスが間違っています。ルーチンの引数を使おうとしたときハードウェアのエラーを検出しました。たとえば、ポインタ引数を用いるルーチンに不当なアドレスが与えられたとき、(その状態をシステムが検出できるなら) errno は EFAULT に設定される可能性があります。不当なアドレスをどのように検出するかは システムにより異なります。したがってあるシステムにおいては、誤ったアドレスをルーチンに渡した場合の結果は予測できない場合があります。
ブロック型デバイスを指定しなくてはなりません。ブロック型デバイスを指定すべきところ (たとえば mount(2) 関数の呼び出し) に、非ブロック型デバイスまたはファイルが記述されていました。
デバイスは使われています。すでにマウントされているデバイスをマウントしようとしました。または現在稼動中のファイル (オープンされているファイル、現在のディレクトリ、マウントされているファイル、使用中のテキストセグメントなど) が存在しているデバイスをアンマウントしようとしました。 現在すでに使用可能なアカウンティングを さらに使用可能にしようとした場合にも このエラーが発生します。このエラーが発生したときは、該当するデバイスやリソースは使用不可です。 すでにロックされていることを示す場合に、ミューテックス (mutex)、セマフォ、条件付き変数、および読み取り / 書き込みロックによって、EBUSY が 使用されます。また、プロセッサ制御関数、P_ONLINE も EBUSY を 使用します。
ファイルが存在します。存在しないファイル名を記述すべきところ (たとえば link(2) 関数の呼び出し) に、既存のファイル名を指定しました。
デバイスにまたがるリンクになります。別のデバイス上のファイルへのハードリンクを試みました。
デバイスが存在しません。あるデバイスに対して不当な操作を試みました (たとえば 書き込み専用デバイスへの読み取り要求など)。
ディレクトリではありません。ディレクトリ名を指定すべきところ (たとえば chdir(2) 関数への引数やパスの接頭辞) に、ディレクトリ でない名前を指定しました。
ディレクトリです。ディレクトリに書き込もうとしました。
引数が正しくありません。signal(3C) または kill(2) 関数の呼び出しに未定義のシグナルが指定されるような 不当な引数が指定されました ( たとえばマウントされていないデバイスを アンマウントしようとした場合など)。
ファイルテーブルがオーバフローしました。システムのファイルテーブルが満杯、つまり SYS_OPEN が示す個数のファイルがオープンされていて、現在はこれ以上のファイルはオープンできません。
オープンされたファイルが多すぎます。あるプロセスが、一度に OPEN_MAX の値を超える数のファイル記述子をオープンしようとしました。
デバイスへの ioctl が正しくありません。特殊文字デバイス以外のファイルを指定して ioctl(2) 関数を呼び出しました。
テキストファイルは使われています (旧仕様)。現在書き込み用にオープンされています。あるいはプロシージャのみからなるプログラムを 実行しようとしました。あるいは現在実行中のプロシージャのみからなるプログラムを 書き込み用にオープンまたは削除しようとしました (このエラーは旧仕様です)。
ファイルが大きすぎます。ファイルのサイズが RLIMIT_FSIZE が示す値を超えました。 つまり、ファイルシステムがサポートするファイルサイズを超えているか、または、ファイル記述子のオフセット最大値を超えています。 後述の「定義」の「ファイル記述子」の項を参照してください。
デバイス上の容量が足りません。通常ファイルへの書き込みまたは ディレクトリエントリの生成を試みましたが、デバイス上の使用可能な容量が十分ではありませんでした。 システム上にレコードエントリが残っていないので、fcntl(2) 関数実行時に レコードロックの設定または削除ができませんでした。
シークが正しくありません。lseek(2) 関数の呼び出しがパイプに対して発行されました。
読み取り専用のファイルシステムです。読み取り専用でマウントされたデバイス上で、ファイルまたはディレクトリを更新しようとしました。
リンクが多すぎます。LINK_MAX が示す値を超える数のリンクを生成しようとしました。
パイプが中断されました。データを読み込むプロセスが存在しない パイプで書き込みを行おうとしました。この状態が発生すると通常はシグナルが発行され、そのシグナルが無視されるとこのエラーが返されます。
数学引数が関数の領域外です。数学パッケージ (3M) 中の関数の引数が、その関数の領域外でした。
数学関数結果が表示不可能です。数学パッケージ (3M) 中の関数の結果の値を、当該マシンの精度では表すことができませんでした。
要求されたタイプのメッセージがありません。指定されたメッセージ待ち行列に存在しない種類のメッセージを受信しようとしました (msgrcv(2) 参照)。
識別子が取り去られています。このエラーは、ファイルシステムの名前スペースから 識別子が削除されたために実行を再開するプロセスに対して返されます (msgctl(2)、 semctl(2)、および shmctl(2) 参照)。
チャネル番号が範囲外です。
レベル 2 が同期していません。
レベル 3 停止
レベル 3 リセット
リンク番号が範囲外です。
プロトコルドライバが装備されていません。
構造体がありません。
レベル 2 停止
デッドロック状態。デッドロック状態を検出したので回避しました。このエラーは、ファイルおよびレコードのロック処理 に対して発生します。また、 ミューテックス、セマフォ、条件付き変数、および読み取り / 書き込みロック についても、このエラーは発生します。
レコードロックが使用できません。使用可能なロックが存在しません。システムのロックテーブルが満杯です (fcntl(2) 参照)。
命令が取り消されました。関連する非同期 命令が終了前に取り消されました。
サポートしません。このバージョンのシステムではこの機能をサポートしません。将来のバージョンでサポートします。
ディスクの制限を超えました。ユーザーに配分されたディスクブロックを使い果たしたため、通常ファイルへの write(2)、またはディレクトリやシンボリックリンクの作成、またはディレクトリエントリの作成に失敗しました。あるいは ユーザーに配分された i ノードを使い果たしたため、新しくファイルを作成するための i ノードの割り当てに失敗しました。
予約領域
ストリームデバイスではありません。STREAMS デバイスではないファイル記述子に対して putmsg(2) または getmsg(2) システムコールを試みました。
データがありません。
タイマーが終了しました。STREAMS ioctl(2) コール用にタイマーに設定した時間が経過しました。このエラーの原因はデバイスにより異なり、ハードウェア上のエラー、ソフトウェア上のエラーのどちらも考えられます。 また、設定した時間が 要求した動作に対して短すぎた、という場合も考えられます。ioctl() 動作の状態は確定できません。これは _lwp_cond_timedwait(2) あるいは cond_timedwait(3t) の場合にも返されます。
ストリーム資源が使い尽くされました。STREAMSの open(2) 処理において、STREAMS 待ち行列または STREAMS ヘッドのデータ構造体が使用不可能でした。このエラー状態は一時的なもので、他のプロセスがリソースを解放すれば回復できる場合があります。
マシンがネットワーク上にありません。リモートファイルシェアリング (RFS) 固有のエラーです。立ち上げ時にネットワークに接続するよう操作しなかったマシン上で、リモートリソースのアドバタイズ、アンアドバタイズ、マウント、またはアンマウントを試みました。
パッケージがインストールされていません。インストールされていないパッケージからのコールを使おうとしました。
オブジェクトがリモート側にあります。リモートファイルシェアリング (RFS) 固有のエラーです。ローカルマシン上にないリソースをアドバタイズしようとしました。あるいはリモートマシン上のデバイス (またはパス名) をマウントまたはアンマウントしようとしました。
リンクが切断されました。リモートファイルシェアリング (RFS) 固有のエラーです。リモートマシンと接続していたリンク (仮想回線) が切断されてしまいました。
アドバタイズエラー。リモートファイルシェアリング (RFS) 固有のエラーです。すでにアドバタイズ済みのリソースをアドバタイズしようとしました。あるいはアドバタイズ中のリソースが存在しているのに RFS を停止しようとしました。あるいは アドバタイズ中のリソースを強制的にアンマウントしようとしました。
Srmount エラー。リモートファイルシェアリング (RFS) 固有のエラーです。リモートマシンがマウントしたリソースが存在しているのに RFS を停止しようとしました。または、現在リソースをマウントしているリモートマシンが含まれていない クライアントリストを使って、リソースを再アドバタイズしようとしました。
送信時に通信エラーが発生しました。リモートファイルシェアリング (RFS) 固有のエラーです。現プロセスがリモートマシンからのメッセージを待っているときに、仮想回線が異常終了しました。
プロトコルエラー。何らかのプロトコルエラーが発生しました。このエラーはデバイス固有のものですが、 通常はハードウェアのエラーには起因しません。
エラー 76。リモートファイルシェアリング (RFS) 固有のエラーです。プロセスがマウントポイントから転送し直したことを、サーバーがクライアントに伝える手段として用います。
データメッセージではありません。STREAMS デバイスに対する read(2)、 getmsg(2)、または ioctl(2) I_RECVFD コール中に、処理できない何かが待ち行列の先頭に置かれました。その何かとは、以下に示すようにコールによって異なります。
制御情報、または渡されたファイル記述子
渡されたファイル記述子
制御情報またはデータ情報
ファイル名が長すぎます。パス名引数の長さが PATH_MAX が示す最大長を超えていました。あるいは _POSIX_NO_TRUNC が有効なときにパス名を構成する名前の 1 つが NAME_MAX が示す値より長すぎました。最大長に関しては limits(4) を参照してください。
定義されたデータ形式に関して、値が大きすぎます。
名前 (name) がネットワーク上に複数存在します。指定された名前がネットワーク上で一意ではありませんでした。
ファイル記述子が正しくありません。ファイル記述子がオープン済みのファイルを示していません。または 書き込み専用にオープンされたファイルに 対して読み取り要求を発行しました。
リモート側のアドレスが変更されています。
必要な共有ライブラリが見つかりません。共有スタティックライブラリを必要とする a.out を実行しようとしましたが、ライブラリが 存在しませんでした。あるいはユーザーが そのライブラリを使うための正しいアクセス権を 持っていませんでした。
共有ライブラリが壊れています。共有スタティックライブラリを必要 (リンク対象) とする a.out を実行しようとしましたが、exec がそのライブラリをロードできませんでした。 原因としては、ライブラリが壊れている可能性があります。
a.out ファイルの .lib 部分が壊れています。共有スタティックライブラリを必要 (リンク対象) とする a.out を実行しようとしましたが、 a.out 中の .lib セクションに不当なデータを検出しました。 .lib セクションは、どの共有ライブラリが必要かを exec に伝える役割を果たします。エラーの原因としては、a.out が壊れている可能性があります。
システム限界数以上の共有ライブラリをリンクしようとしています。現在システムに定義されている許容最大値を超える数の 共有ライブラリを必要とする a.out を実行しようとしました。詳細は、「NFS の管理」を参照してください。
共有ライブラリは直接実行 (exec) できません。共有ライブラリを直接実行しようとしました。
エラー 88。不当なバイトシーケンスを検出しました。複数の文字を 1 文字として扱ってください。
動作を適用できません。
パス名の確認中に見つかったシンボリックリンクの数が MAXSYMLINKS を超えました。
システムコールは再開できます。割り込みを受けたシステムコールは再起動する必要があります。
パイプ/FIFO の場合、ストリームヘッドで休止できません。ストリームのパイプエラー (外部からは見えません)。
ディレクトリが空ではありません。
ユーザーが多すぎます。
ソケットに対する操作がソケット以外に適用されました。
宛先のアドレスが必要です。トランスポートの終端における動作で、必要な宛先アドレスが省略されていました。
メッセージが長すぎます。トランスポートプロバイダに送信されたメッセージの長さが、内部メッセージバッファのサイズまたはネットワーク上の制限値を超えていました。
プロトコルの型がソケット用ではありません。指定されたプロトコルは、要求されたソケットのタイプのセマンティクスをサポートしていません。
プロトコル使用不可能。プロトコル用オプションの獲得または設定時に、不当なオプションまたはレベルが指定されました。
プロトコルがサポートされていません。指定されたプロトコルはシステム中に定義されていません。またはそのプロトコル用のバージョンが導入されていません。
ソケットの型がサポートされていません。指定されたソケットはシステム中に定義されていません。またはそのソケット用のバージョンが導入されていません。
動作がトランスポートの終端でサポートされていません。たとえばデータグラムのトランスポートの 終端で、接続を受け付けようとしました。
プロトコルファミリがサポートされていません。指定されたプロトコルファミリはシステム中に定義されていません。またはそのプロトコルファミリ用のバージョンが導入されていません。この状態はインターネットプロトコルに適用されます。
プロトコルファミリがアドレスファミリをサポートしていません。要求されたプロトコルと互換性のないアドレスが使用されました。
アドレスがすでに使われています。現在使用中のアドレスを使おうとしましたが、プロトコルはこのような指定を許していません。
要求されたアドレスを割り当てられません。現在のマシン上に存在しないアドレスを使ってトランスポートの終端を生成しようとしました。
ネットワークがダウンしています。指定動作実行中にネットワークのダウンを検出しました。
ネットワークに到達できません。到達できないネットワークに対する動作を試みました。
リセットによりネットワーク接続が中断されました。接続先のホストがクラッシュしてリブートされました。
ソフトウェアによって接続が中断されました。ホストマシン内部で接続を異常終了しました。
接続が相手側によってリセットされました。相手側により接続が強制的に切断されました。通常この状態は、タイムアウトまたはリブートによりリモートホストとの接続が失われたときに発生します。
バッファ領域がありません。バッファの領域が不十分または待ち行列が満杯のため、トランスポート終端またはパイプにおける動作が実行されませんでした。
トランスポートの終端は接続されています。すでに接続されているトランスポート終端 に対して接続要求が発行されました。または接続されているトランスポート終端上で、接続済みの宛先が指定された sendto(3N) または sendmsg(3N) 要求が発行されました。
トランスポートの終端が接続されていません。トランスポート終端が接続されていません。さらに (データグラム送信の場合) アドレスが指定されていないので、データの送信要求または受信要求は受け付けられません。
ソケットのシャットダウン後で送信できません。トランスポート終端がシャットダウン済みなので、データ送信要求は受け付けられません。
参照が多すぎます。つなぎ合わせられません。
接続が時間切れです。相手側が一定時間内に正しい応答を返さなかったので、connect(3N) 要求、または send(3N) 要求は 実行できませんでした。 あるいは、ファイルが soft オプションでマウントされた NFS ファイルシステム上に存在するため、 write(2) 要求、または fsync(3C) 要求に失敗しました。
接続が拒否されました。相手側マシンにより拒否されたので、接続要求は実行できませんでした。 通常この状態は、リモートホストでは稼動していない サービスへ接続しようとした場合に発生します。
ホストがダウンしています。宛先ホストがダウンしたため、トランスポートプロバイダの処理が失敗しました。
ホストへの経路がありません。到達不可能なホストに対して、トランスポートプロバイダの処理を試みました。
すでに動作中です。非ブロック型オブジェクトに対して処理を試みましたが、そのオブジェクトはすでに何らかの動作を実行中でした。
動作続行中です。非ブロック型オブジェクトに対して、長時間を要する処理 (たとえば connect()) を試みました。
NFS のファイルハンドルが無効です。
制御端末との接続を確立したセッションにおける、フォアグラウンドプロセスグループを除くすべてのプロセスグループ。
制御端末との接続を確立したセッションのリーダープロセス。
セッションに対応している端末。各セッションは制御端末を 1 つだけ 持つことができ、また 1 つの制御端末は 1 つのセッションにだけ対応できます。制御端末から入力されるある種のシーケンスは、その制御端末に対応するセッション中の プロセスグループへのシグナル送信を伴います。詳細は termio(7I) を参照してください。
ファイルを階層構造システムに組織化するためのもので、ファイル階層構造における分岐点となります。ディレクトリもファイルの一種であり、一群のファイルや、 階層構造のすぐ下の階層にある一群の他のディレクトリ (サブディレクトリ という) をまとめています。ディレクトリファイル中の項目はリンクと呼ばれ、リンクはファイル記述子とファイル名とを対応付けます。 通常、各ディレクトリには最低 2 つのリンクが含まれます。それは . (ドット) と .. (ドットドット) です。ドットはそのディレクトリ自身を指すリンクで、ドットドットは 自身のすぐ上の階層のディレクトリ (親ディレクトリ) を表すリンクです。 階層構造の頂点にあるルートディレクトリにとっては、 自身が親ディレクトリとなります。ルートディレクトリのパス名は / で、その親ディレクトリのパス名も / となります。
ストリームにおける、ストリームヘッドからドライバへの方向を指します。
1 つのストリームでは、ドライバが周辺ハードウェア機器と ストリームとのインタフェースを提供します。ドライバは、マルチプレクサやログドライバ (log(7D) 参照) のような擬似ドライバの形をとることもあります。この場合ハードウェアデバイスは無関係です。
稼動中の各プロセスは実効ユーザー ID と実効グループ ID を 1 つずつ持っていて、これらはファイルへの アクセス権 (後述) を検査する際に使用されます。これら 2 つの ID はそれぞれ、当該プロセスの実ユーザー ID および実グループ ID と同一です。ただし、当該プロセスまたはその祖先が ユーザー ID セットのビットまたは グループ ID セットのビットが設定されたファイル (exec(2) 参照) から生成されている場合を除きます。
以下のいずれかの条件が満たされる場合に、ファイルに対する読み取り権、書き込み権、実行権/検索権が、プロセスに与えられます。
そのプロセスの実効ユーザー ID がスーパーユーザーである
そのプロセスの実効ユーザー ID が当該ファイルの所有者のユーザー ID と一致していて、かつ当該ファイルのモードの 「所有者」部分 (0700) のアクセスビットが設定されている
そのプロセスの実効ユーザー ID が当該ファイルの所有者のユーザー ID とは一致しないが、プロセスの実効グループ ID または補助グループ ID のいずれかが当該ファイルのグループ ID と一致していて、かつ当該ファイルのモードの 「グループ」部分 (0070) のアクセスビットが設定されている
そのプロセスの実効ユーザー ID が当該ファイルの所有者のユーザー ID とは一致せず、かつプロセスの実効グループ ID や補助グループ ID のいずれもが当該ファイルのグループ ID とは一致しないが、当該ファイルのモードの 「その他」部分 (0007) のアクセスビットが設定されている
上記の条件がいずれもあてはまらない場合、 プロセスが要求する種類のアクセス権は拒否されます。
ファイルへの入出力を実行するのに使用される小さな整数値。最小値は 0 で、最大値は NOFILES の値から 1 を引いた値です。各プロセスは、NOFILES 値を超える数のファイル記述子を同時にオープンすることはできません。 ファイル記述子は open(2) や pipe(2) などのコールにより返されます。 また read(2)、write(2)、ioctl(2)、 close(2) などのコールの引数として使用されます。
各ファイル記述子には対応するオフセット最大値が決まっています。O_LARGEFILE フラグを設定しないでオープンする通常ファイルでは、オフセット最大値は 2 G バイトより 1 バイト小さい値 (231 -1 バイト) です。O_LARGEFILE フラグを設定してオープンする通常ファイルでは、オフセット最大値は 263 バイトよりも 1 バイト小さい値です。
通常ファイル、特殊ファイル、およびディレクトリに与えられる名前。名前を構成する文字数の最小値は 1 で、最大値は NAME_MAX の値です。
ファイル名には、¥0 (NULL) および / (スラッシュ) の ASCII コードを除くすべての文字が使用できます。
ただし、*、?、[、] の 4 文字はシェル sh(1)、csh(1)、ksh(1) 参照) に対して特別な意味を持つので、(通常は使用しないでください。また印刷できない文字は、使用することは 許されていますが、避けてください。
ファイル名は、パス名を構成する 1 つの項目としても考えられます。パス名の各項目の解釈は、その項目の接頭辞に対応した NAME_MAX および _POSIX_NO_TRUNC の値により異なります。 つまりパス名中のある項目の長さが NAME_MAX 値を超えていて、かつその項目のパス接頭辞に対して _POSIX_NO_TRUNC が有効な場合 ( fpathconf(2) および limits(4) 参照)、 その環境ではその項目はエラーとなります。_POSIX_NO_TRUNC が有効でなければ、その項目の先頭部分 (バイト数は NAME_MAX 値に等しい) が項目名として用いられます。
制御端末と接続を確立したセッションは、そのセッションのプロセスグループ群のうちの 1 つを 制御端末のフォアグラウンドプロセスグループとして識別します。このプロセスグループは、他のグループ (バックグラウンドプロセスグループ) には 許されないような特別なアクセスを制御端末に対して行うことができます。
struct iovec 配列の項目の最大数。
中括弧 {LIMIT} は、実装状態ごとに決められた大きさの制限を表示するのに使われます。これは、ヘッダーファイル ({ } はなし) によって決定できる値、または 構成調査 ( 引数 _PC_LIMIT を使った pathconf(2) ) を呼び出すことによって実行時に得ることができる 実際の値を示しています。
指定された mode 引数中のアクセス権ビットをクリアするための生成関数コールの 呼び出し時に使用される、プロセスのファイルモード生成マスク。umask( cmask) 中に設定されていたビットは、生成されるファイルのモードではクリアされています。
ストリーム中におけるデータまたは情報の何ブロックかの集まりで、STREAMS 制御構造体を伴います。メッセージにはいくつかの形式が定義されていて、形式によりメッセージの内容の種類が表されます。ストリーム中においては、メッセージがデータ送信および通信の唯一の手段です。
ストリーム中において、モジュールまたは ドライバによる処理を待っているリンクされたメッセージ群。
msgget(2) コールにより生成される一意な正の整数で、メッセージを識別します。msqid とも表されます。各 msqid は、メッセージ待ち行列とそれに対応したデータ構造体を含んでいます。データ構造体は msqid_ds と表され、以下のメンバーからなります。
struct ipc_perm msg_perm; struct msg *msg_first; struct msg *msg_last; ulong_t msg_cbytes; ulong_t msg_qnum; ulong_t msg_qbytes; pid_t msg_lspid; pid_t msg_lrpid; time_t msg_stime; time_t msg_rtime; time_t msg_ctime;
msqid_ds 構造体のメンバーを以下に説明します。
msg_perm メンバーは ipc_perm 構造体の 1 つで、メッセージ操作用のアクセス権を指定する (後述) 。 この構造体には以下のメンバーが含まれる
uid_t cuid; /* creator user id */ gid_t cgid; /* creator group id */ uid_t uid; /* user id */ gid_t gid; /* group id */ mode_t mode; /* r/w permission */ ulong_t seq; /* slot usage sequence # */ key_t key; /* key */
*msg_first メンバーは、待ち行列内の先頭のメッセージへのポインタ
*msg_last メンバーは、待ち行列内の最後のメッセージへのポインタ
msg_cbytes メンバーは、現在の待ち行列の内容の総バイト数
msg_qnum メンバーは、現在待ち行列にあるメッセージの数
msg_qbytes メンバーは、待ち行列に置くことのできる最大バイト数
msg_lspid メンバーは、最後に msgsnd() 動作を実行したプロセスのプロセス ID
msg_lrpid メンバーは、最後に msgrcv() 動作を実行したプロセスのプロセス ID
msg_stime メンバーは、最後に msgsnd() 動作を実行した時刻
msg_rtime メンバーは、最後に msgrcv() 動作を実行した時刻
msg_ctime メンバーは、上記構造体のメンバーを変更する msgctl() 動作を最後に実行した時刻
msgctl(2) msgget(2) msgrcv(2) と msgsnd(2) の関数の説明では、操作に必要なアクセス権を {token} で表していて、この token はアクセス権の種類で以下のように解釈されます。
00400 ユーザーによる読み取り 00200 ユーザーによる変更 00040 グループによる読み取り 00020 グループによる変更 00004 その他による読み取り 00002 その他による変更
以下のいずれかの条件が満たされるとき、msqid への読み取りおよび書き込み権がプロセスに対して与えられます。
そのプロセスの実効ユーザー ID がスーパーユーザーである
そのプロセスの実効ユーザー ID が msqid に対応するデータ構造体中の msg_perm.cuid または msg_perm.uid と一致していて、かつ msg_perm.mode の「ユーザー」部分 (0600) の正しいビットが設定されている
cr_gid および cr_groups の有効プロセスの グループ ID が msg_perm.cgid または msg_perm.gid と一致していて、かつ msg_perm.mode の「グループ」部分 (060) の正しいビットが設定されている
msg_perm.mode の「その他」部分 (006) の正しいビットが設定されている
上記の条件がいずれもあてはまらない場合、プロセスが要求する種類のアクセス権は拒否されます。
データの入出力用の処理ルーチンの集まり。常にストリームの中間、つまりストリームヘッドからドライバまでの間に存在します。ストリームにおけるモジュールは、シェルパイプラインにおけるコマンドと似ています。ただしモジュールには、双方向 (ダウンストリームと アップストリーム) データ送信と処理を独立して 実施することを可能にするための 2 つの関数が含まれています。
複数のユーザープロセスに対応したストリーム群を 1 つのドライバに接続したり、複数のドライバを 1 つのユーザープロセスに接続することを可能にするドライバ。STREAMS は一般的な多重化用ドライバを備えてはいませんが、ストリームを構築したり多重化されたストリーム群を接続したりする機能は提供します。
オフセット最大値は、オープンファイルの記述の属性で、ファイルオフセットとして使用できる最大値を表します。
グループ内の全メンバーの親が、そのグループのメンバーか、 あるいはグループのセッションのメンバーではないようなプロセスグループ。オーファンとは「親がない」という意味です。
スラッシュ (/) で区切られたディレクトリ名の集まりで、NULL 文字で終わる文字列。先頭がスラッシュの場合や、最後がファイル名の場合もあります。
パス名の先頭がスラッシュの場合、パスの検索は ルートディレクトリから始まります。先頭がスラッシュでなければ、 検索は現在の作業ディレクトリから始まります。
スラッシュ 1 つだけからなるパス名はルートディレクトリを指します。
特に断わりのない限り、NULL のパス名は「存在しないファイルを表す」ものと解釈されます。
各プロセスは、システム中に存在している間つまり寿命が終わるまで、プロセス ID と呼ばれる一意な正の整数で認識されます。あるプロセス ID を割り当てた後、その ID を持つプロセス、プロセスグループ、およびセッションの寿命がすべて終わるまで、システムはその ID を再使用しません。プロセス中には thread_t および LWPID_t と呼ばれている スレッド ID を持つスレッドがあります。これらのスレッドは 外のプロセスからは見えません。
現在動作中のプロセスが新たなプロセスを生成した場合 (fork(2) 参照)、現プロセスが新プロセスの親プロセスとなり、現プロセスのプロセス ID が親プロセス ID となります。
特権を持つということは、システムによる制限を受けずに動作する権利を持つことです。
システム中の各プロセスは、必ずあるプロセスグループのメンバーです。各グループはプロセスグループ ID により認識されます。現在プロセスグループリーダーではないプロセスは、新たなグループを生成してそのグループのリーダーとなることができます。さらに現在プロセスグループリーダーではないプロセスは、 同じセッション中の他の既存のプロセスグループに加わることができます。新たに生成されたプロセスは、その親プロセスが属するプロセスグループのメンバーとなります。
プロセスグループ ID と同一のプロセス ID を持つプロセス。
動作中の各プロセスは、必ずあるプロセスグループのメンバーであり、プロセスグループはプロセスグループ ID と呼ばれる正の整数により認識されます。プロセスグループ ID は、そのグループのリーダーのプロセスのプロセス ID です。プロセスをグループ化することにより、 関連したプロセス群に一括してシグナルを送信できます (kill(2) 参照)。
プロセスの寿命とは、フォークされたときから、終了したことを親プロセスが認識するまでの間を指します。 wait(2) を参照してください。
プロセスグループの寿命は、プロセスグループリーダーによりグループが生成されたときから、そのグループの最後のプロセスの寿命が終わるときまたは最後のプロセスがグループから離れるときまでを指します。
システムのプロセッサは、プロセッサセットとして知られるサブセットに分割できます。ある 1 つのプロセッサセットに結合されたプロセスは、そのプロセッサセット内のプロセッサ上でのみ動作し、またセット内のプロセッサは、通常、そのセットに結合されたプロセスだけを実行します。有効な各プロセッサセットは正の整数によって識別されます ( pset_create(2) 参照)。
ストリームにおけるモジュールまたはドライバ中のメッセージ待ち行列で、アップストリーム方向のメッセージを含んでいます。
システム上に存在することを許されたユーザーは、実ユーザー ID と呼ばれる正の整数 (範囲は 0 から MAXUID の値まで) により認識されます。
各ユーザーはグループのメンバーでもあります。各グループは、実グループ ID と呼ばれる正の整数により認識されます。
動作中のプロセスの実ユーザー ID と実グループ ID は、そのプロセスを生成したユーザーの実ユーザー ID と実グループ ID に設定されています。
パス名を検索するために、各プロセスには ルートディレクトリと 現在の作業ディレクトリが対応付けられています。 プロセスのルートディレクトリは、ルートファイルシステムのルートディレクトリと同じである必要はありません。
保存されたリソース制限はプロセスの属性で、exec 関数群や setrlimit(2) で記述されるように、現在有効でないリソース制限の処理を適用できるようにします。
保存されたユーザー ID と保存されたグループ ID の値は、ユーザーセットまたはグループセットファイルモードビットが設定されたファイルを実行する前の実効ユーザー ID および実効グループ ID の値です (exec(2) 参照)。
セマフォ識別子 (semid) は、semget(2) コールにより生成される一意な正の整数です。各 semid は、一群のセマフォとそれに関連付けられたデータ構造体を持ちます。このデータ構造体は semid_ds と呼ばれ、次のメンバーから構成されます。
struct ipc_perm sem_perm; /* operation permission struct */ struct sem *sem_base; /* ptr to first semaphore in set */ ushort_t sem_nsems; /* number of sems in set */ time_t sem_otime; /* last operation time */ time_t sem_ctime; /* last change time */ /* Times measured in secs since */ /* 00:00:00 GMT, Jan. 1, 1970 */
semid_ds 構造体のメンバーを以下に説明します。
sem_perm メンバーは、セマフォ操作用アクセス権 (後述) を指定する ipc_perm 構造体であり、以下のメンバーを含む
uid_t uid; /* user id */ gid_t gid; /* group id */ uid_t cuid; /* creator user id */ gid_t cgid; /* creator group id */ mode_t mode; /* r/a permission */ ulong_t seq; /* slot usage sequence number */ key_t key; /* key */
sem_nsems メンバーは、そのセマフォ群に含まれている セマフォの数。各セマフォは、sem_num と呼ばれる負ではない整数により参照される。sem_num の値の最小値は 0 で、最大値は sem_nsems の値から 1 を引いた値
sem_otime メンバーは、最後に semop(2) 動作を実行した時刻
sem_ctime メンバーは、上記構造体のメンバーを変更する semctl(2) 動作を最後に実行した時刻
セマフォは、次のメンバーからなる sem という名のデータ構造体です。
ushort_t semval; /* semaphore value */ pid_t sempid; /* pid of last operation */ ushort_t semncnt; /* # awaiting semval > cval */ ushort_t semzcnt; /* # awaiting semval = 0 */
sem 構造体のメンバーを以下に説明します。
semval メンバーは、セマフォの実の値に等しい 0 以上の整数
sempid メンバーは、このセマフォに対する セマフォ操作を最後に実行したプロセスのプロセス ID
semncnt メンバーは、このセマフォの semval 値が現在の値より大きくなるまで待つように 中断状態に置かれているプロセス数
semzcnt メンバーは、このセマフォの semval 値が 0 になるまで待つように中断状態に置かれているプロセス数
00400 ユーザーによる読み取り 00200 ユーザーによる変更 00040 グループによる読み取り 00020 グループによる変更 00004 その他による読み取り 00002 その他による変更
以下のいずれかの条件が満たされるとき、 semid への読み取りおよび変更権がプロセスに対して与えられます。
そのプロセスの実効ユーザー ID がスーパーユーザーである
そのプロセスの実効ユーザー ID が semid に対応するデータ構造体中の sem_perm.cuid または sem_perm.uid と一致していて、かつ sem_perm.mode の「ユーザー」部分 (0600) の正しいビットが設定されている
そのプロセスの実効グループ ID が sem_perm.cgid または sem_perm.gid と一致していて、かつ sem_perm.mode の「グループ」部分 (060) の正しいビットが設定されている
sem_perm.mode の「その他」部分 (06) の正しいビットが設定されている
上記の条件がいずれもあてはまらない場合、プロセスが要求する種類のアクセス権は拒否されます。
セッション ID と呼ばれる識別子によって認識される一群のプロセスで、 制御端末との接続を確立する機能を持っています。 現在プロセスグループリーダーではないプロセスは、 新たなセッションとプロセスグループを生成することができます。そのときそのプロセスは、新セッションのセッションリーダーとなり、さらに新プロセスグループのプロセスグループリーダーとなります。新たに生成されたプロセスは、それを生成したセッションに属することになります。
システム中の各セッションは、その寿命が終わるまで、セッション ID という正の整数値により一意に認識されます。このセッション ID は、セッションリーダーとなっているプロセスのプロセス ID です。
セッション ID と同一のプロセス ID およびプロセスグループ ID を持つプロセス。
セッションの寿命は、セッションリーダーによりセッションが 生成されたときから、そのセッションの最後のプロセスの寿命が終わるとき または最後のプロセスがセッションから離れるときまでを指します。
共有メモリー識別子 ( shmid ) は、semget(2) コールにより生成される一意な正の整数です。各 shmid は、共有メモリーセグメントと呼ばれるメモリー領域と、 それに対応したデータ構造体を持っています (ユーザーは、共有メモリーセグメントへの参照が終わったら、必ずそのセグメントを削除する必要があります)。 データ構造体は shmid_ds と呼ばれ、以下のメンバーで構成されます。
struct ipc_perm shm_perm; /* operation permission struct */ int shm_segsz; /* size of segment */ struct region *shm_reg; /* ptr to region structure */ char pad[4]; /* for swap compatibility */ pid_t shm_lpid; /* pid of last operation */ pid_t shm_cpid; /* creator pid */ ushort shm_nattch; /* number of current attaches */ ushort shm_cnattch; /* used only for shminfo */ time_t shm_atime; /* last attach time */ time_t shm_dtime; /* last detach time */ time_t shm_ctime; /* last change time */ /* Times measured in secs since */ /* 00:00:00 GMT, Jan. 1, 1970 */
shmid_ds 構造体のメンバーを以下に説明します。
shm_perm メンバーは、共有メモリー操作用アクセス権 (後述) を指定する ipc_perm 構造体であり、以下のメンバーを含む
uid_t cuid; /* creator user id */ gid_t cgid; /* creator group id */ uid_t uid; /* user id */ gid_t gid; /* group id */ mode_t mode; /* r/w permission */ ulong seq; /* slot usage sequence # */ key_t key; /* key */
shm_segsz メンバーは、共有メモリーセグメントのサイズをバイト単位で表す
shm_cpid メンバーは、この共有メモリー識別子を生成したプロセスのプロセス ID
shm_lpid メンバーは、最後に shmat() と shmdt() 動作を実行したプロセスのプロセス ID (shmop(2) 参照)
shm_nattch メンバーはこのセグメントが現在アタッチされているプロセス数
shm_atime メンバーは、最後に shmat() 動作を実行した時刻 ( shmop(2) 参照)
shm_dtime メンバーは、最後に shmdt() 動作を実行した時刻 ( shmop(2) 参照)
shm_ctime メンバーは、上記構造体のメンバーを変更する shmctl(2) 動作を最後に実行した時刻
shmctl(2) 、 shmat() と shmdt() ( shmop(2) 参照) の関数の説明では、操作に必要なアクセス権を {token} で表していて、この token はアクセス権の種類で以下のように解釈されます。
00400 ユーザーによる読み取り 00200 ユーザーによる書き込み 00040 グループによる読み取り 00020 グループによる書き込み 00004 その他による読み取り 00002 その他による書き込み
以下のいずれかの条件が満たされるとき、 shmid への読み取りおよび書き込み権がプロセスに対して与えられます。
そのプロセスの実効ユーザー ID がスーパーユーザーである
そのプロセスの実効ユーザー ID が shmid に対応するデータ構造体中の shm_perm.cuid または shm_perm.uid と一致していて、かつ shm_perm.mode の「ユーザー」部分 (0600) の正しいビットが設定されている
そのプロセスの実効グループ ID が shm_perm.cgid または shm_perm.gid と一致していて、かつ shm_perm.mode の「グループ」部分 (060) の正しいビットが設定されている
shm_perm.mode の「その他」部分 (06) の正しいビットが設定されている
上記の条件がいずれもあてはまらない場合、プロセスが要求する種類のアクセス権は拒否されます。
プロセス ID の値が 0 または 1 のプロセス (kill(2) 参照)。ID が 0 のプロセスは proc0 と呼ばれるプロセススケジューラです。ID が 1 のプロセスは proc1 と呼ばれる初期化プロセス (init) で、システム中の他のすべての プロセスの祖先であり、プロセス構造体を制御するために使用されます。
カーネルメカニズムの集合体で、ネットワークドライバおよび通信ドライバの開発をサポートする機能を持っています。 STREAMS はカーネル内部およびカーネルとユーザーレベルのプロセスとの間での、文字の入出力に関するインタフェース基準を定義します。STREAMS メカニズムは、各種のユーティリティルーチン、カーネル機能、およびデータ構造体から構成されます。
カーネル内におけるユーザープロセスとドライバルーチンとの間の 全二重データパス。主な内容は、1 つのストリームヘッド、1 つのドライバ、そして その両者の間に位置するいくつか (0 個の場合もある) のモジュールです。ストリームはシェルのパイプラインと似ていますが、データの流れと処理が双方向に行われる点が異なります。
ストリームの両端のうち、ストリームとユーザープロセスとの インタフェースを提供する端。ストリームヘッドの主要な機能は、 STREAMS に関連したシステムコールを処理すること、およびストリームとユーザープロセス間でデータや情報を送信することです。
実効ユーザー ID の値が 0 のプロセス (スーパーユーザープロセス) に対応するユーザー。スーパーユーザープロセスには、ファイルがアクセス権で保護されていてもアクセスできるなどの特権が与えられています。
ストリームにおける、ドライバからストリームヘッドへの方向を指します。
ストリームにおけるモジュールまたはドライバ中のメッセージ待ち行列で、 ダウンストリーム方向のメッセージを含んでいます。