.\" %FreeBSD: src/lib/libc/sys/minherit.2,v 1.19 2002/12/18 09:22:31 ru Exp % .\" .\" Copyright (c) 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)minherit.2 8.1 (Berkeley) 6/9/93 .\" .\" $FreeBSD$ .Dd February 17, 1996 .Dt MINHERIT 2 .Os .Sh 名称 .Nm minherit .Nd ページの継承を制御する .Sh ライブラリ .Lb libc .Sh 書式 .In sys/mman.h .Ft int .Fn minherit "void *addr" "size_t len" "int inherit" .Sh 解説 .Fn minherit システムコールは、指定のページが継承の際の特性として .Fa inherit を持つように変更します。 すべての実装において、継承の際の特性がページ単位で設定できることが 保証されるているわけではありません。 変更の単位はリージョン全体かもしれません。 .Fx は、ページ毎に継承特性を調整する機能を持ちます。 継承は、 .Fn fork で作成された子供に対してのみ影響します。 .Fn exec には影響ありません。 exec されたプロセスは、アドレス空間全体を置き換えます。 このシステムコールは親のアドレス空間に対してもまた影響ありません (親子によるアドレス空間の共有は潜在的にあり得ますが、これは除外します)。 .Pp 継承は難解な機能であり、ほとんどが .Fn mmap の .Dv MAP_SHARED 機能で置き換えられています。 しかしながら、 .Fn minherit を使用して、 .Dv MAP_PRIVATE でマップされたメモリブロックを親子間で共有可能です。 これにより、親もしくは子による修正は共有されますが、 元々下層にあるファイルは変更されません。 .Bl -tag -width ".Dv INHERIT_SHARE" .It Dv INHERIT_SHARE 本オプションは、対象のアドレス空間を親子間で共有させます。 本オプションは、 元々下層にあるバッキングストアがどのようにマップされるかには、影響しません。 .It Dv INHERIT_NONE 本オプションは、対象のアドレス空間の継承を完全に防止します。 当該アドレス空間は子の中ではアンマップされます。 .It Dv INHERIT_COPY 本オプションは、アドレス空間を子に対しコピーオンライトで継承させます。 本オプションには不幸な副作用があり、 親が fork するときにアドレス空間がコピーオンライトになってしまいます。 元々のマッピングが .Dv MAP_SHARED の場合、 親が fork した後にはこれは親においては共有されません。 また、元の共有バッキングストアマッピングは、 親においてアンマップして再マップする以外に回復しようがありません。 .El .Sh 戻り値 .Rv -std minherit .Sh エラー .Fn minherit システムコールは次の場合に処理を失敗します: .Bl -tag -width Er .It Bq Er EINVAL .Fa addr 引数と .Fa len 引数によって指定される仮想アドレス範囲が有効ではありません。 .It Bq Er EACCES .Fa inherit 引数によって指定されるフラグが、 .Fa addr 引数と .Fa len 引数によって指定されたページに対して適切ではありませんでした。 .El .Sh バグ 一度 .Dv MAP_PRIVATE もしくは .Dv MAP_SHARED しているものに継承を設定すると、領域をアンマップして再マップする以外に もともとのコピーオンライトの意味を回復させることはできません。 .Sh 関連項目 .Xr fork 2 , .Xr madvise 2 , .Xr mincore 2 , .Xr mprotect 2 , .Xr msync 2 , .Xr munmap 2 , .Xr rfork 2 .Sh 歴史 .Fn minherit システムコールは .Ox ではじめて登場しました。