MINHERIT(2) FreeBSD システムコールマニュアル MINHERIT(2)
名称
minherit − ページの継承を制御する |
ライブラリ
標準 C ライブラリ (libc, −lc) |
書式
#include <sys/mman.h> int |
minherit(void *addr, size_t len, int inherit); |
解説 |
minherit() システムコールは、指定のページが継承の際の特性として inherit を持つように変更します。すべての実装において、継承の際の特性がページ単位 で設定できることが保証されるているわけではありません。変更の単位はリー ジョン全体かもしれません。 FreeBSD は、ページ毎に継承特性を調整する機能を 持ちます。継承は、 fork() で作成された子供に対してのみ影響します。 exec() には影響ありません。 exec されたプロセスは、アドレス空間全体を置き換えま す。このシステムコールは親のアドレス空間に対してもまた影響ありません (親 子によるアドレス空間の共有は潜在的にあり得ますが、これは除外します)。 継承は難解な機能であり、ほとんどが mmap() の MAP_SHARED 機能で置き換えら れています。しかしながら、 minherit() を使用して、 MAP_PRIVATE でマップさ れたメモリブロックを親子間で共有可能です。これにより、親もしくは子による 修正は共有されますが、元々下層にあるファイルは変更されません。 |
INHERIT_SHARE
本オプションは、対象のアドレス空間を親子間で共有させます。 本オプションは、元々下層にあるバッキングストアがどのように マップされるかには、影響しません。 INHERIT_NONE INHERIT_COPY 戻り値 |
関数 minherit() は、処理が成功すると値 0 を返します。そうでない場合、値 -1 が返され、グローバル変数 errno が設定されてエラーを示します。 |
エラー
minherit() システムコールは次の場合に処理を失敗します: |
[EINVAL]
addr 引数と len 引数によって指定される仮想アドレス範囲 が有効ではありません。 [EACCES] バグ |
一度 MAP_PRIVATE もしくは MAP_SHARED しているものに継承を設定すると、領域 をアンマップして再マップする以外にもともとのコピーオンライトの意味を回復 させることはできません。 |
関連項目
fork(2), madvise(2), mincore(2), mprotect(2), msync(2), munmap(2), rfork(2) |
歴史
minherit() システムコールは OpenBSD ではじめて登場しました。 FreeBSD 10.0 February 17, 1996 FreeBSD 10.0 |