説明
POSIX 共有メモリ API を使用すると、メモリのある領域を共有して、 プロセス間で情報をやり取りすることができる。この API では以下のインターフェースが採用されている。
- shm_open(3)
- 新しいオブジェクトを生成しオープンする、もしくは 既存のオブジェクトをオープンする。これは open(2) と同じである。下記にある他のインターフェースで使用する ファイルディスクリプタを返す。
- ftruncate(2)
- 共有メモリオブジェクトの大きさを設定する。
- mmap(2)
- 呼び出したプロセスの仮想アドレス空間に共有メモリオブジェクトを マップする。
- munmap(2)
- 呼び出したプロセスの仮想アドレス空間から 共有メモリオブジェクトをアンマップする。
- shm_unlink(3)
- 共有メモリオブジェクト名を削除する。
- close(2)
- shm_open(3) で割り当てられたファイルディスクリプタが不要になった際に、 そのファイルディスクリプタをクローズする。
- fstat(2)
- その共有メモリオブジェクトについての情報が入った stat 構造体を取得する。 このシステムコールが返す情報には、オブジェクトのサイズ (st_size)、 許可属性 (st_mode)、 所有者 (st_uid)、 グループ (st_gid) がある。
- fchown(2)
- 共有メモリオブジェクトの所有権を変更する。
- fchmod(2)
- 共有メモリオブジェクトの許可属性を変更する。
Versions
POSIX 共有メモリは Linux 2.4 と glibc 2.2 以降でサポートされている。持続性
POSIX 共有メモリオブジェクトはカーネル内で保持される。 共有メモリオブジェクトは、システムがシャットダウンされるか、 全てのプロセスがそのオブジェクトをアンマップし、 shm_unlink(3) で削除されるまで、存在し続ける。リンク
POSIX 共有メモリ API を使用したプログラムは cc -lrt でコンパイルし、リアルタイムライブラリ librt とリンクしなければならない。ファイルシステム経由での共有メモリオブジェクトへのアクセス
Linux では、共有メモリオブジェクトは通常 /dev/shm 以下にマウントされる仮想ファイルシステム (tmpfs) 内に作成される。 カーネル 2.6.19 以降の Linux では、 仮想ファイルシステム内のオブジェクトの許可属性の制御に、 アクセス制御リスト (ACL; access control lists) を使うことができる。準拠
POSIX.1-2001.注意
通常は、共有メモリオブジェクトにアクセスするプロセスは、 POSIX セマフォなどを使ってプロセス間で同期をとらなければならない。System V 共有メモリ (shmget(2), shmop(2) など) は古い共有メモリ API である。 POSIX 共有メモリは、より簡単で、うまく設計されたインタフェースを提供している。 一方で、POSIX 共有メモリは System V 共有メモリと比べると 利用できるシステムが少ない (特に、古いシステムでは少ない)。
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.65 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。