日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.3-RELEASE-K, 13.0-RELEASE-K から 13.2-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
SHM_OPEN(2) FreeBSD システムコールマニュアル SHM_OPEN(2) 名称 shm_open, shm_unlink -- 共有メモリオブジェクト操作 ライブラリ 標準 C ライブラリ (libc, -lc) 書式 #include <sys/types.h> #include <sys/mman.h> #include <fcntl.h> int shm_open(const char *path, int flags, mode_t mode); int shm_unlink(const char *path); 解説 shm_open() システムコールは、path で指定された POSIX 共有メモリオブジェク トをオープン (するか、オプションで作成) します。flags 引数は、open(2) に よって使用されるフラグのサブセット (部分集合) を含んでいます。O_RDONLY ま たは O_RDWR のいずれかのアクセスモードが、flags に含まれなければなりませ ん。また、オプションのフラグ O_CREAT, O_EXCL と O_TRUNC も指定できます。 O_CREAT が指定されるなら、path で指定される共有メモリオブジェクトは、存在 していないなら、作成されます。この場合、共有メモリオブジェクトは、プロセ スの umask 値に従ってモード mode で作成されます。O_CREAT と O_EXCL フラグ の両方が指定されて、path で指定された共有メモリオブジェクトが既に存在して いるなら、shm_open() は、EEXIST で失敗します。 新しく作成されたオブジェクトは、0 のサイズで始めます。既存の共有メモリオ ブジェクトが O_RDWR でオープンされ、O_TRUNC フラグが指定されているなら、 共有メモリオブジェクトは、0 のサイズに切り詰められます。オブジェクトのサ イズを ftruncate(2) を通して調整でき、fstat(2) を通して問い合わせすること ができます。 新しい記述子は、execve(2) システムコールの間にクローズするように設定され ます。close(2) と fcntl(2) を参照してください。 FreeBSD の拡張として、定数 SHM_ANON は、shm_open() への path 引数に使用さ れます。この場合、匿名で、無名の共有メモリオブジェクトが、作成されます。 オブジェクトには名前がないので、shm_unlink() へのその後の呼び出しでそれを 削除することはできません。代わりに、共有メモリオブジェクトは、共有メモリ オブジェクトの最後の参照が削除されるとき、集められたゴミになります。共有 メモリオブジェクトは、fork(2) または sendmsg(2) を通してファイル記述子を 共有することによって、他のプロセスと共有されます。O_RDONLY をつけて匿名の 共有メモリオブジェクトをオープンを試みることは、EINVAL で失敗します。他の すべてのフラグは、無視されます。 shm_unlink() システムコールは、path で指定された共有メモリオブジェクトを 削除します。 戻り値 成功するなら、shm_open() は、負でない整数を返し、shm_unlink() は、0 を返 します。両方の関数は、失敗すれば -1 を返し、errno にエラーを示す値が設定 されます。 互換性 path 引数は、(ほとんどの他の実装ではそうしますが) 必ずしもパス名を表すと いうわけではありません。同じ path をオープンする 2 つのプロセスは、path が、スラッシュ (`/') 文字で始まる時かつその時に限り、同じ共有メモリオブ ジェクトにアクセスすることが保証されます。 O_RDONLY, O_RDWR, O_CREAT, O_EXCL と O_TRUNC フラグのみ、移植性のあるプロ グラムで使用されます。 POSIX 仕様書は、共用メモリオブジェクト、または shm_open() によって返され た記述子で open(2), read(2), または write(2) を使用することの結果が未定義 であることを述べています。しかしながら、FreeBSD カーネルの実装は、read(2) と write(2) のためのサポートを明示的に含んでいます。 また、FreeBSD は、sendfile(2) で共用メモリオブジェクトからデータの 0 コ ピー (zero-copy) 転送をサポートしています。 共用メモリオブジェクトとそれらの内容のいずれも、リブートに渡って持続しま せん。 拡張されていない共用メモリオブジェクトを書き込むので、ftruncate(2) は、あ らゆるデータを書き込むことができる前に、呼び出されなければなりません。 「使用例」を参照。 使用例 この使用例は、ftruncate(2) への呼び出しなしで失敗します: uint8_t buffer[getpagesize()]; ssize_t len; int fd; fd = shm_open(SHM_ANON, O_RDWR | O_CREAT, 0600); if (fd < 0) err(EX_OSERR, "%s: shm_open", __func__); if (ftruncate(fd, getpagesize()) < 0) err(EX_IOERR, "%s: ftruncate", __func__); len = pwrite(fd, buffer, getpagesize(), 0); if (len < 0) err(EX_IOERR, "%s: pwrite", __func__); if (len != getpagesize()) errx(EX_IOERR, "%s: pwrite length mismatch", __func__); エラー shm_open() は、次の条件のために、次のエラーコードで失敗します: [EINVAL] O_RDONLY, O_RDWR, O_CREAT, O_EXCL または O_TRUNC 以外 のフラグが、flags に含まれていました。 [EMFILE] プロセスが、オープンファイル記述子のための制限にとっく に到達しました。 [ENFILE] システムファイルテーブルが、満杯です。 [EINVAL] O_RDONLY が、SHM_ANON を通して匿名の共有メモリオブジェ クトを作成している間に指定されました。 [EFAULT] path 引数が、プロセスの割り付けられたアドレス空間の外 側を指しています。 [ENAMETOOLONG] 全体のパス名が、1023 文字を超えました。 [EINVAL] path が、スラッシュ (`/') 文字で始まっていません。 [ENOENT] O_CREAT が、指定され、名前のある共有メモリオブジェクト が、存在していません。 [EEXIST] O_CREAT と O_EXCL が、指定され、名前のある共有メモリオ ブジェクトが、存在してます。 [EACCES] (読み込み、または読み込み書き込みのための) 要求された パーミッションが、拒否されました。 shm_unlink() は、次の条件のために、次のエラーコードで失敗します: [EFAULT] path 引数が、プロセスの割り付けられたアドレス空間の外 側を指しています。 [ENAMETOOLONG] 全体のパス名が、1023 文字を超えました。 [ENOENT] 名前のある共有メモリオブジェクトが、存在していません。 [EACCES] 要求されたパーミッションが、拒否されました。 shm_unlink() が、共有メモリオブジェクトへの書き込み パーミッションを要求しました。 関連項目 close(2), fstat(2), ftruncate(2), mmap(2), munmap(2), sendfile(2) 規格 shm_open() と shm_unlink() 関数は、IEEE Std 1003.1b-1993 (``POSIX.1'') に 適合すると確信しています。 歴史 shm_open() と shm_unlink() 関数は、FreeBSD 4.3 ではじめて登場しました。関 数は、FreeBSD 8.0 のファイルよりむしろ直接共有メモリオブジェクトを使用す るシステムコールとして再実装されました。 作者 Garrett A. Wollman <wollman@FreeBSD.org> (C ライブラリサポートとこのマ ニュアルページ) Matthew Dillon <dillon@FreeBSD.org> (MAP_NOSYNC) FreeBSD 11.2 January 20, 2017 FreeBSD 11.2