| MMAP(2) | System Calls Manual | MMAP(2) | 
mmap —
#include <sys/mman.h>
void *
  
  mmap(void
    *addr, size_t len,
    int prot,
    int flags,
    int fd,
    off_t offset);
mmap function causes the pages starting at
  addr and continuing for at most
  len bytes to be mapped from the object described by
  fd, starting at byte offset
  offset. If len is not a multiple
  of the pagesize, the mapped region may extend past the specified range. Any
  such extension beyond the end of the mapped object will be zero-filled.
If addr is non-zero, it is used as a hint to
    the system. (As a convenience to the system, the actual address of the
    region may differ from the address supplied.) If addr
    is zero, an address will be selected by the system. The actual starting
    address of the region is returned. A successful mmap
    deletes any previous mapping in the allocated address range.
The protections (region accessibility) are specified in the prot argument by OR'ing the following values:
PROT_EXECPROT_READPROT_WRITEPROT_NONEAs a NetBSD extension, the
    PROT_MPROTECT macro can be used to request
    additional permissions for later use with
    mprotect(2). For example
    PROT_MPROTECT(PROT_READ) requests that future
    PROT_READ mappings are allowed and can be enabled
    using mprotect(2), but does
    not currently grant read mappings to the returned memory segment. This is
    necessary for switching pages between writable and executable when PaX
    MPROTECT restrictions are in place. See
    mremap(2) for a sample use
    case.
PROT_WRITE may imply
  PROT_READ, and PROT_READ may
  imply PROT_EXEC. Portable programs should not rely on
  these flags being separately enforceable.The flags parameter specifies the type of
    the mapped object, mapping options and whether modifications made to the
    mapped copy of the page are private to the process or are to be shared with
    other references. Note that either MAP_SHARED or
    MAP_PRIVATE must be specified. Sharing, mapping type
    and options are specified in the flags argument by
    OR'ing the following values:
MAP_ALIGNED(n)_SC_PAGESIZE request. The following constants are
      defined for convenience:
    
  MAP_ANONMAP_ANON
      regions, and must be specified as -1. The mapped memory will be zero
      filled.MAP_FILESIGBUS
    signal.MAP_FIXEDmmap will fail. If
      MAP_FIXED is specified, addr
      must be a multiple of the pagesize. Use of this option is
    discouraged.MAP_HASSEMAPHOREMAP_INHERITMAP_NORESERVEMAP_REMAPDUPMAP_RENAMEMAP_STACKMAP_TRYFIXEDMAP_TRYFIXED had not been specified. If
      addr is NULL, this flag is
      ignored and the system will select a mapping address.MAP_WIREDMAP_PRIVATEMAP_SHARED will be
    seen.MAP_SHAREDThe close(2) function does not unmap pages, see munmap(2) for further information.
The current design does not allow a process to specify the
    location of swap space. In the future we may define an additional mapping
    type, MAP_SWAP, in which the file descriptor
    argument specifies a file or device to which swapping should be done.
If MAP_FIXED is not specified, the system
    will attempt to place the mapping in an unused portion of the address space
    chosen to minimize possible collision between mapped regions and the
  heap.
mmap returns a pointer to
  the mapped region. Otherwise, a value of MAP_FAILED is
  returned and errno is set to indicate the error. The
  symbol MAP_FAILED is defined in the header
  <sys/mman.h>. No successful
  return from mmap() will return the value
  MAP_FAILED.
mmap() will fail if:
EACCES]PROT_READ was specified as part of the
      prot parameter and fd was not
      open for reading.
    The flags MAP_SHARED and
        PROT_WRITE were specified as part of the
        flags and prot parameters
        and fd was not open for writing.
PaX mprotect restrictions prohibit the requested protection.
EBADF]EINVAL]MAP_FIXED
      was specified and the addr parameter was not page
      aligned or was outside of the valid address range for a process.
    MAP_ANON was specified and
        fd was not -1.
ENODEV]ENOMEM]MAP_FIXED
      was specified and the addr parameter wasn't
      available.
    MAP_ANON was specified and
        insufficient memory was available.
EOVERFLOW]mmap() function conforms to IEEE
  Std 1003.1b-1993 (“POSIX.1b”).
mmap() interface was first designed in
  4.2BSD.
| May 2, 2018 | NetBSD 9.4 |