POSIX プロセス間通信 (IPC) は System V プロセス間通信の変形です。POSIX プロセス間通信は Solaris 7 で導入されました。System V オブジェクトと同様に、POSIX IPC オブジェクトは、所有者、所有者のグループ、およびその他に読み取り権と書き込み権がありますが、実行権はありません。POSIX IPC オブジェクトの所有者が、そのオブジェクトの所有者を変更する方法はありません。POSIX IPC には、次のような機能が含まれます。
プロセスが書式付きデータを任意のプロセスに送信できるメッセージ。
プロセスが実行の同期を取ることができるセマフォー。
複数のプロセスがそれぞれの仮想アドレス空間の一部を共有できる共有メモリー。
System V IPC インタフェースとは異なり、POSIX IPC インタフェースはすべてマルチスレッドに対して安全です。
次の表に、POSIX メッセージ待ち行列インタフェースの一覧を示します。
表 7–2 POSIX メッセージ待ち行列インタフェース
インタフェース名 |
目的 |
---|---|
名前付きメッセージ待ち行列に接続します。指定によっては作成します |
|
開いているメッセージ待ち行列への接続を終了します |
|
開いているメッセージ待ち行列への接続を終了し、最後のプロセスが待ち行列を閉じるときに待ち行列を削除します |
|
メッセージを待ち行列に入れます |
|
もっとも古い最高優先順位メッセージを待ち行列から受け取るか、削除します |
|
メッセージが待ち行列で使用できることをプロセスまたはスレッドに通知します |
|
メッセージ待ち行列属性を設定または取得します |
POSIX セマフォーは、System V セマフォーより軽量です。POSIX セマフォー構造体は 25 個までのセマフォーの配列ではなく、1 つのセマフォーだけを定義します。
次の表に、POSIX セマフォーインタフェースの一覧を示します。
名前付きセマフォーに接続する。指定によっては作成します
名前なしセマフォー構造体を初期化します (呼び出し元プログラムの内部で行われるのため、名前付きセマフォーではない)
開いているセマフォーへの接続を終了します
開いているセマフォーへの接続を終了し、最後のプロセスがセマフォーを閉じるときにセマフォーを削除します
名前なしセマフォー構造体を初期化します (呼び出し元プログラムの内部で行われるのため、名前付きセマフォーではない)
セマフォーの値を指定された整数にコピーします
セマフォーがほかのプロセスによって保持されている場合に、ブロックするかエラーを返します
セマフォーの数を増やします
POSIX 共有メモリーは、実際にマッピングされているメモリーの変形です (「マッピングの作成と使用」を参照)。主な違いは、以下のとおりです。
共有メモリーオブジェクトを開くには、open(2) を呼び出すのではなく、shm_open(3RT) を使用します。
オブジェクトを閉じるか削除するには、オブジェクトを削除しない close(2) を呼び出す代わりに、shm_unlink(3RT) を使用します。
shm_open(3RT) のオプションは、open(2) で提供されているオプションの数よりかなり少なくなっています。