システムインタフェース

IPC 機能、キー引数、および作成フラグ

IPC 機能へのアクセスを要求するプロセスは、識別できなければなりません。これを行うために、IPC 機能を初期化する関数または IPC 機能へのアクセスを提供する関数は、key_t キー引数を使用します。キーは、任意の値または実行時に共通の元になる値から導き出すことができる値です。1 つの方法は、ftok(3C) を使用することです。ftok(3C) は、ファイル名をシステムで固有のキー値に変換します。

メッセージ、セマフォ、および共用メモリの初期化やアクセスを行う関数は、int 型の ID 番号を戻します。IPC 機能の読み取り、書き込み、および制御操作を行う関数は、この ID を使用します。

キー引数に IPC_PRIVATE を指定して関数を呼び出すと、作成プロセス専用の IPC 機能のインスタンスが新しく初期化されます。

フラグ引数として IPC_CREAT フラグを指定すると、関数はその IPC 機能が存在していない場合は新しく作成しようとします。

IPC_CREATIPC_EXCL の両方のフラグを指定して関数を呼び出した場合、その関数は IPC 機能がすでに存在していると失敗します。これは 2 つ以上のプロセスが IPC 機能を初期化する可能性がある場合に便利です。たとえば、複数のサーバプロセスが同じ IPC 機能にアクセスしようとする場合です。サーバプロセスがすべて IPC_EXCL を指定して IPC 機能を作成しようとすると、最初のプロセスだけが成功します。

この 2 つのフラグをどちらも指定しない場合、IPC 機能がすでに存在していれば、アクセスした関数はその機能の ID を戻します。IPC_CREAT を指定しない場合、該当する機能がまだ初期化されていなければ、呼び出しは失敗します。

これらの制御フラグは、論理 (ビット単位) OR を使用して 8 進数値アクセス権モードと組み合わせるとフラグ引数を作成できます。たとえば、次の例では、メッセージ待ち行列が存在していない場合は新しい待ち行列を初期化します。


msqid = msgget(ftok("/tmp", 'A'), (IPC_CREAT | IPC_EXCL | 0400)); 

最初の引数は、文字列 ("/tmp") に基づいてキー (次の 'A') と評価されます。2 番目の引数は、アクセス権と制御フラグが組み合わされたものと評価されます。