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