October 7, 2006 MINHERIT 2

### NAME

minherit - control the inheritance of pages

### LIBRARY

Standard C Library (libc, -lc)

### SYNOPSIS

```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

### ERRORS

minherit(``) will fail if:

[```EINVAL`]
  An invalid region or invalid parameters were specified.

### 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(``).