MINHERIT(2) BSD System Calls Manual MINHERIT(2)
minherit -- control the inheritance of pages
Standard C Library (libc, -lc)
minherit(void *addr, size_t len, int inherit);
The minherit() system call changes the specified range of virtual addresses to have the
specified fork-time inheritance characteristic inherit, which can be set to
MAP_INHERIT_NONE, MAP_INHERIT_COPY, or MAP_INHERIT_SHARE. Also possible is
MAP_INHERIT_DEFAULT, which defaults to MAP_INHERIT_COPY. Not all implementations will guar-
antee that the inheritance characteristic can be set on a page basis; the granularity of
changes may be as large as an entire region.
Normally, the entire address space is marked MAP_INHERIT_COPY; when the process calls
fork(), the child receives a (virtual) copy of the entire address space. Pages or regions
marked MAP_INHERIT_SHARE are shared between the address spaces, while pages or regions
marked MAP_INHERIT_NONE will be unmapped in the child.
The minherit() function returns the value 0 if successful; otherwise the value -1 is
returned and the global variable errno is set to indicate the error.
minherit() will fail if:
[EINVAL] An invalid region or invalid parameters were specified.
fork(2), madvise(2), mincore(2), mprotect(2), msync(2), munmap(2)
The minherit() function first appeared in OpenBSD.
If a particular port does not support page-granularity inheritance, there's no way to figure
out how large a region is actually affected by minherit().
BSD October 7, 2006 BSD