Contained WithinFind More DocumentationFeatured Support Resources | Descargar este libro en PDF (585 KB)
Intro(2)名前
形式#include <errno.h> 機能説明
このセクションでは、全システムコールについて説明します。大多数のシステムコールは、通常はあり得ない値を返すことによってエラー条件を示します。エラー条件を示す一般的な値は、–1 または NULL ポインタです。詳細については、個々のシステムコールの説明を参照してください。エラー発生時には、外部変数 errno にエラー番号が与えられます。システムコールが正常に終了しても errno はクリアされないので、この変数はエラーが返されたときにだけ確認してください。 マルチスレッドアプリケーションを使用する場合は、コンパイル時に -mt オプションをコマンド行に指定する必要があります (threads(5) のマニュアルページを参照)。-mt オプションを指定すると、errno はマクロになり、各スレッドが独自の errno を持つことができるようになります。この errno マクロは、変数と同様に、代入文の左辺と右辺のどちらにも使用できます。 アプリケーションは、_lwp_*() 関数ではなく結合スレッドを使用する必要があります。ライブラリはスレッドで使用した場合に限り安全なので、LWP (軽量プロセス) を直接使用することはお勧めできません。 このセクションでは、各システムコールによって生成される可能性があるエラー番号をすべて紹介します。次に、全エラー番号と、そのエラー名 (<errno.h> 中に定義) を示します。 定義
バックグラウンドプロセスグループ制御端末との接続を確立したセッションのフォアグラウンドプロセスグループを除くすべてのプロセスグループ。 制御プロセス制御端末との接続を確立したセッションリーダープロセス。 制御端末セッションで使用している端末。各セッションでは制御端末を 1 台だけ使用でき、制御端末 1 台で 1 つのセッションを確立できます。制御端末から入力されるある種のシーケンスは、その制御端末を使用しているセッション中のプロセスグループにシグナルを送信します。詳細については termio(7I) を参照してください。 ディレクトリファイルを階層構造システムに組織化する働きを持つ、ファイル階層構造におけるノードです。ディレクトリもファイルの一種であり、一群のファイルや、すぐ下の階層にある他のディレクトリ (サブディレクトリ) をまとめています。また、ディレクトリファイル内の項目はリンクと呼ばれ、ファイル記述子とファイル名を対応付ける役割を果たしています。通常、各ディレクトリには 2 つのリンク、. (ドット) と .. (ドットドット) が含まれています。ドットはそのディレクトリ自体を指すリンクで、ドットドットはすぐ上の階層のディレクトリ (親ディレクトリ) を指すリンクです。階層構造の頂点にあるルートディレクトリの親ディレクトリは、そのディレクトリ自体です。ルートディレクトリのパス名は / で、親ディレクトリのパス名も / です。 ダウンストリームストリームの方向を表します。ストリームヘッドからドライバへの方向を、ダウンストリームと呼びます。 ドライバ1 つのストリームでは、ドライバが周辺ハードウェア機器とストリームとのインタフェースを提供します。ドライバは、マルチプレクサやログドライバ (log(7D) を参照) のような擬似ドライバの形をとることもあります。疑似ドライバは、ハードウェアデバイスとは無関係です。 実効ユーザー ID と実効グループ IDアクティブなプロセスは、実効ユーザー ID と実効グループ ID を 1 つずつ持っています。プロセスは、この 2 つの ID を使用して、ファイルへの アクセス権 (後述) を検査します。実効ユーザー ID と実効グループ ID は、それぞれ、プロセスの実ユーザー ID および実グループ ID と同一です。ただし、プロセスまたはその祖先がセットユーザー ID またはセットグループ ID のビットが設定されたファイル (exec(2) を参照) から生成されている場合を除きます。 ファイルのアクセス権次のいずれかの条件が満たされる場合、プロセスに、ファイルに対する読み取り権、書き込み権、実行権 / 検索権が付与されます。 上記の条件のいずれもあてはまらない場合、アクセスは拒否されます。 ファイル記述子ファイルへの入出力の実行に使用する小さな整数値。最小値は 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.h(3HEAD) を参照)、この項目はエラーとみなされます。それ以外の場合、項目の先頭部分 (バイト数は NAME_MAX 値に等しい) が項目名として使用されます。 フォアグラウンドプロセスグループ制御端末と接続を確立したセッションは、そのセッションのプロセスグループ群のうちの 1 つを制御端末のフォアグラウンドプロセスグループとして識別します。このプロセスグループは、制御端末にアクセスする際、他のグループ (バックグラウンドプロセスグループ) には許可されない特権を付与されています。 {IOV_MAX}struct iovec 配列内の項目の最大数。 {LIMIT}中括弧 {LIMIT} は、実装ごとに決められた大きさの制限を示すために使用されます。これは、{ } を使用せず、ヘッダーファイルによって定義される値、または、pathconf(2) に引数 _PC_LIMIT を指定して構成の照会を行うことによって実行時に得ることができる実際の値を示しています。 マスクプロセスのファイルモード生成マスク。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 への読み取りおよび書き込み権が付与されます。
上記の条件がいずれもあてはまらない場合、アクセスは拒否されます。 モジュールデータの入出力用の処理ルーチンの集まり。常にストリームの中間、つまりストリームヘッドからドライバまでの間に存在します。ストリームにおけるモジュールは、シェルのパイプラインにおけるコマンドと似ています。ただしモジュールには、双方向 (ダウンストリームとアップストリーム) のデータのフローと処理を独立して実施することを可能にするための 2 つの関数が含まれています。 マルチプレクサ複数のユーザープロセスに対応したストリーム群を 1 つのドライバに接続したり、複数のドライバを 1 つのユーザープロセスに接続することを可能にするドライバ。STREAMS は一般的な多重化用ドライバを備えてはいませんが、ストリームを構築したり多重化されたストリーム群を接続したりする機能は提供します。 オフセット最大値オフセット最大値は、開いたファイルの記述の属性で、ファイルオフセットとして使用できる最大値を表します。 親のないプロセスグループグループ内の全メンバーの親が、そのグループのメンバーか、グループのセッションのメンバーではないようなプロセスグループ。 パス名スラッシュ (/) で区切られたディレクトリ名の集まりで、NULL 文字で終わる文字列。先頭がスラッシュの場合や、最後がファイル名の場合もあります。 パス名の先頭がスラッシュの場合、パスの検索はルートディレクトリから始まります。先頭がスラッシュでなければ、検索は現在の作業ディレクトリから始まります。 スラッシュ 1 つだけからなるパス名はルートディレクトリを指します。 特に指定されていない場合、NULL のパス名は、存在しないファイルを表すものと解釈されます。 特権付きユーザーSolaris ソフトウェアが実装する特権は、プロセスのアクションをきめ細やかに制御できます。ある特権を持っているプロセスは、特定の制限された操作を実行できます。Solaris 10 リリースより前までは、UID 0 で動作するプロセスには、すべての特権が付与されていました。実効 UID 0 を持つプロセスに付与される下位互換性の意味論と範囲については、privileges(5) を参照してください。 プロセス ID各プロセスは、存在している間 (寿命が終わるまで)、プロセス ID と呼ばれる一意の正の整数で認識されます。あるプロセス ID を割り当てた後、その ID を持つプロセス、プロセスグループ、セッションの寿命がすべて終わるまで、システムはその ID を再使用できません。プロセス内には thread_t、LWPID_t と呼ばれているスレッド ID を持つスレッドがあります。これらのスレッドは外部のプロセスからは見えません。 親プロセス ID現在アクティブなプロセスが新しいプロセスを生成した場合 (fork(2) を参照)、現プロセスが新プロセスの親プロセスとなり、現プロセスのプロセス ID が親プロセス ID になります。 特権特権を持つということは、システムによる制限を受けずに操作する権利を持つことです。 プロセスグループシステム中の各プロセスは、必ずあるプロセスグループのメンバーになっています。各グループはプロセスグループ ID によって認識されます。現在プロセスグループリーダーではないプロセスは、新しいグループを生成してそのグループのリーダーになることができます。また、現在プロセスグループリーダーではないプロセスは、同じセッション中の他の既存のプロセスグループに加わることができます。新しく生成されたプロセスは、その親プロセスが属するプロセスグループのメンバーになります。 プロセスグループリーダープロセスグループ ID は、プロセスグループリーダーの ID と同一になります。 プロセスグループ IDアクティブな各プロセスは、必ずあるプロセスグループのメンバーになっています。また、プロセスグループはプロセスグループ ID と呼ばれる正の整数によって認識されます。プロセスグループ ID は、そのグループのリーダーのプロセスのプロセス ID と同一になります。プロセスをグループ化することにより、関連したプロセス群に一括してシグナルを送信できます (kill(2) を参照)。 プロセスの寿命プロセスの寿命とは、フォークされたときから、終了したことを親プロセスが認識するまでの間を指します。wait(3C) を参照してください。 プロセスグループの寿命プロセスグループの寿命は、プロセスグループリーダーによってグループが生成されたときから、そのグループの最後のプロセスの寿命が終わるとき、または最後のプロセスがグループから離れるときまでを指します。 プロセッサセット IDシステムのプロセッサは、プロセッサセットとして知られるサブセットに分割できます。ある 1 つのプロセッサセットに結合されたプロセスは、そのプロセッサセット内のプロセッサ上でのみ動作し、またセット内のプロセッサは、通常、そのセットに結合されたプロセスだけを実行します。有効な各プロセッサセットは正の整数によって識別されます (pset_create(2) を参照)。 読み込み待ち行列ストリーム内のモジュールまたはドライバ中のメッセージ待ち行列で、アップストリーム方向のメッセージを含んでいます。 実ユーザー ID と実グループ IDシステム上に存在することを許可されたユーザーは、実ユーザー ID と呼ばれる正の整数 (範囲は 0 から MAXUID の値まで) によって認識されます。 各ユーザーはグループのメンバーでもあります。各グループは、実グループ ID と呼ばれる正の整数によって認識されます。 アクティブなプロセスの実ユーザー ID と実グループ ID は、そのプロセスを生成したユーザーの実ユーザー ID と実グループ ID に設定されています。 ルートディレクトリと現在の作業ディレクトリパス名を検索するために、各プロセスにはルートディレクトリと現在の作業ディレクトリが対応付けられています。プロセスのルートディレクトリは、ルートファイルシステムのルートディレクトリと一致していなくてもかまいません。 保存されたリソース制限保存されたリソース制限はプロセスの属性で、exec 関数群や setrlimit(2) で記述されるように、現在は有効でないリソース制限の処理を適用できるようにします。 保存されたユーザー ID と保存されたグループ ID保存されたユーザー ID と保存されたグループ ID の値は、セットユーザーまたはセットグループのファイルモードビットが設定されたファイルを実行した直後の実効ユーザー ID および実効グループ ID の値です (exec(2) を参照)。 セマフォ識別子セマフォ識別子 (semid) は、semget(2) コールによって生成される一意の正の整数です。各 semid は、一群のセマフォとそれに関連付けられたデータ構造体を持ちます。このデータ構造体は semid_ds と呼ばれ、次のメンバーから構成されます。 structipc_perm sem_perm; /* operation permission struct */
structsem *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システム中の各セッションは、その寿命が終わるまで、セッション ID という一意の正の整数値によって認識されます。セッションリーダーのプロセス ID が、セッション ID になります。 セッションリーダープロセス ID、プロセスグループ ID は、セッションリーダーのセッション ID と同一になります。 セッションの寿命セッションの寿命は、セッションリーダーによってセッションが開始されたときから、そのセッションの最後のプロセスの寿命が終わるとき、または最後のプロセスがセッションから離れるときまでを指します。 共有メモリー識別子共有メモリー識別子 (shmid) は、shmget(2) コールによって生成される一意の正の整数です。各 shmid は、共有メモリーセグメントと呼ばれるメモリー領域と、対応するデータ構造体を持っています (ユーザーは、共有メモリーセグメントへの参照が終わったら、必ずそのセグメントを削除しなければなりません)。データ構造体は shmid_ds と呼ばれ、次のメンバーで構成されます。 struct ipc_perm shm_perm; /* operation permission struct */
size_t shm_segsz; /* size of segment */
struct anon_map *shm_amp; /* ptr to region structure */
char pad[4]; /* for swap compatibility */
pid_t shm_lpid; /* pid of last operation */
pid_t shm_cpid; /* creator pid */
shmatt_t shm_nattch; /* number of current attaches */
ulong_t 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_tcuid;/* creator user id */ gid_tcgid;/* creator group id */ uid_tuid;/* user id */ gid_tgid;/* group id */ mode_tmode;/* r/w permission */ ulongseq;/* slot usage sequence # */ key_tkey;/* 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 の値が 0 または 1 のプロセスです (kill(2) を参照)。ID が 0 のプロセスは proc0 と呼ばれるプロセススケジューラです。ID が 1 のプロセスは proc1 と呼ばれる初期化プロセス (init) で、システム中の他のすべての プロセスの祖先であり、プロセス構造体の制御に使用されます。 STREAMSカーネルメカニズムの集合体で、ネットワークドライバおよび通信ドライバの開発を支援します。STREAMS はカーネル内部と、カーネルおよびユーザーレベルのプロセスとの間で、文字の入出力に関するインタフェース基準を定義します。STREAMS メカニズムは、各種ユーティリティルーチン、カーネル機能、データ構造体から構成されます。 ストリームカーネル内におけるユーザープロセスとドライバルーチン間での全二重データパス。主な内容は、1 つのストリームヘッド、1 つのドライバ、そしてその両者の間に位置するいくつか (0 個の場合もある) のモジュールです。ストリームはシェルのパイプラインと似ていますが、データフローと処理が双方向に行われる点が異なります。 ストリームヘッドストリームの両端のうち、ストリームとユーザープロセスとのインタフェースを提供する終端です。ストリームヘッドの主要な機能は、STREAMS に関連したシステムコールを処理することと、ストリームとユーザープロセス間でデータや情報を送信することです。 スーパーユーザー実効ユーザー ID の値が 0 のプロセス (スーパーユーザープロセス) に対応するユーザーです。スーパーユーザープロセスには、ファイルがアクセス権で保護されていてもアクセスできるなどの特権が与えられています。 アップストリームストリームの方向を表します。ドライバからストリームヘッドへの方向を、アップストリームと呼びます。 書き込み待ち行列ストリーム内のモジュールまたはドライバ中のメッセージ待ち行列で、ダウンストリーム方向のメッセージを含んでいます。 |