.\" 2007-07-10, mtk, Added an example program.
.\" 2008-11-18, mtk, document MAP_STACK
.\"
-.TH MMAP 2 2013-02-25 "Linux" "Linux Programmer's Manual"
+.TH MMAP 2 2015-01-22 "Linux" "Linux Programmer's Manual"
.SH NAME
mmap, munmap \- map or unmap files or devices into memory
.SH SYNOPSIS
.TP
.BR MAP_32BIT " (since Linux 2.4.20, 2.6)"
Put the mapping into the first 2 Gigabytes of the process address space.
-This flag is only supported on x86-64, for 64-bit programs.
+This flag is supported only on x86-64, for 64-bit programs.
It was added to allow thread stacks to be allocated somewhere
in the first 2GB of memory,
so as to improve context-switch performance on some early
.B MAP_ANONYMOUS
in conjunction with
.B MAP_SHARED
-is only supported on Linux since kernel 2.4.
+is supported on Linux only since kernel 2.4.
.TP
.B MAP_DENYWRITE
This flag is ignored.
Only meaningful in conjunction with
.BR MAP_POPULATE .
Don't perform read-ahead:
-only create page tables entries for pages
+create page tables entries only for pages
that are already present in RAM.
Since Linux 2.6.23, this flag causes
.BR MAP_POPULATE
.I /proc/sys/vm/overcommit_memory
in
.BR proc (5).
-In kernels before 2.6, this flag only had effect for
+In kernels before 2.6, this flag had effect only for
private writable mappings.
.TP
.BR MAP_POPULATE " (since Linux 2.5.46)"
For a file mapping, this causes read-ahead on the file.
Later accesses to the mapping will not be blocked by page faults.
.BR MAP_POPULATE
-is only supported for private mappings since Linux 2.6.23.
+is supported for private mappings only since Linux 2.6.23.
.TP
.BR MAP_STACK " (since Linux 2.6.27)"
Allocate the mapping at an address suitable for a process
.BR MAP_UNINITIALIZED " (since Linux 2.6.33)"
Don't clear anonymous pages.
This flag is intended to improve performance on embedded devices.
-This flag is only honored if the kernel was configured with the
+This flag is honored only if the kernel was configured with the
.B CONFIG_MMAP_ALLOW_UNINITIALIZED
option.
Because of the security implications,
.TP
.B EACCES
A file descriptor refers to a non-regular file.
-Or
-.B MAP_PRIVATE
-was requested, but
+Or a file mapping was requested, but
.I fd
is not open for reading.
Or
.\" A file could not be mapped for reading.
.TP
.B ENODEV
-The underlying file system of the specified file does not support
+The underlying filesystem of the specified file does not support
memory mapping.
.TP
.B ENOMEM
.I prot
argument asks for
.B PROT_EXEC
-but the mapped area belongs to a file on a file system that
+but the mapped area belongs to a file on a filesystem that
was mounted no-exec.
.\" (Since 2.4.25 / 2.6.0.)
.TP
+.B EPERM
+The operation was prevented by a file seal; see
+.BR fcntl (2).
+.TP
.B ETXTBSY
.B MAP_DENYWRITE
was set but the object specified by
.SH AVAILABILITY
On POSIX systems on which
.BR mmap (),
-.BR msync (2)
+.BR msync (2),
and
.BR munmap ()
are available,
.\" -1: unavailable, 0: ask using sysconf().
.\" glibc defines it to 1.
.SH NOTES
-This page describes the interface provided by the glibc
-.BR mmap ()
-wrapper function.
-Originally, this function invoked a system call of the same name.
-Since kernel 2.4, that system call has been superseded by
-.BR mmap2 (2),
-and nowadays
-.\" Since around glibc 2.1/2.2, depending on the platform.
-the glibc
-.BR mmap ()
-wrapper function invokes
-.BR mmap2 (2)
-with a suitably adjusted value for
-.IR offset .
-
On some hardware architectures (e.g., i386),
.B PROT_WRITE
implies
.BR _GNU_SOURCE
also suffices,
and requiring that macro specifically would have been more logical,
-since these flags are all Linux specific.)
+since these flags are all Linux-specific.)
The relevant flags are:
.BR MAP_32BIT ,
.BR MAP_ANONYMOUS
.BR MAP_POPULATE ,
and
.BR MAP_STACK .
+.\"
+.SS C library/kernel ABI differences
+This page describes the interface provided by the glibc
+.BR mmap ()
+wrapper function.
+Originally, this function invoked a system call of the same name.
+Since kernel 2.4, that system call has been superseded by
+.BR mmap2 (2),
+and nowadays
+.\" Since around glibc 2.1/2.2, depending on the platform.
+the glibc
+.BR mmap ()
+wrapper function invokes
+.BR mmap2 (2)
+with a suitably adjusted value for
+.IR offset .
.SH BUGS
On Linux there are no guarantees like those suggested above under
.BR MAP_NORESERVE .
In kernels before 2.6.7, the
.B MAP_POPULATE
-flag only has effect if
+flag has effect only if
.I prot
is specified as
.BR PROT_NONE .
pages of the file and then uses
.BR write (2)
to output the desired bytes.
+.SS Program source
.nf
-
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
.fi
.SH SEE ALSO
.BR getpagesize (2),
+.BR memfd_create (2),
.BR mincore (2),
.BR mlock (2),
.BR mmap2 (2),
.BR shm_open (3),
.BR shm_overview (7)
+The descriptions of the following files in
+.BR proc (5):
+.IR /proc/[pid]/maps ,
+.IR /proc/[pid]/map_files ,
+and
+.IR /proc/[pid]/smaps .
+
B.O. Gallmeister, POSIX.4, O'Reilly, pp. 128-129 and 389-391.
.\"
.\" Repeat after me: private read-only mappings are 100% equivalent to
.\" shared read-only mappings. No ifs, buts, or maybes. -- Linus
+.SH COLOPHON
+This page is part of release 3.79 of the Linux
+.I man-pages
+project.
+A description of the project,
+information about reporting bugs,
+and the latest version of this page,
+can be found at
+\%http://www.kernel.org/doc/man\-pages/.