MINHERIT(2)               NetBSD System Calls Manual               MINHERIT(2)

NAME
     minherit -- control the inheritance of pages

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <sys/mman.h>

     int
     minherit(void *addr, size_t len, int inherit);

DESCRIPTION
     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 guarantee 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.

RETURN VALUES
     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.

ERRORS
     minherit() will fail if:

     [EINVAL]           An invalid region or invalid parameters were speci-
                        fied.

SEE ALSO
     fork(2), madvise(2), mincore(2), mprotect(2), msync(2), munmap(2)

HISTORY
     The minherit() function first appeared in OpenBSD.

BUGS
     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().

NetBSD 5.0_STABLE               October 7, 2006              NetBSD 5.0_STABLE
