]> git.saurik.com Git - apple/xnu.git/blame - bsd/man/man2/mmap.2
xnu-6153.121.1.tar.gz
[apple/xnu.git] / bsd / man / man2 / mmap.2
CommitLineData
9bccf70c
A
1.\" Copyright (c) 1991, 1993
2.\" The Regents of the University of California. All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\" notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\" notice, this list of conditions and the following disclaimer in the
11.\" documentation and/or other materials provided with the distribution.
9bccf70c
A
12.\" 4. Neither the name of the University nor the names of its contributors
13.\" may be used to endorse or promote products derived from this software
14.\" without specific prior written permission.
15.\"
16.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26.\" SUCH DAMAGE.
27.\"
b0d623f7
A
28.\" @(#)mmap.2 8.4 (Berkeley) 5/11/95
29.\" $FreeBSD: src/lib/libc/sys/mmap.2,v 1.56 2007/01/09 00:28:15 imp Exp $
9bccf70c 30.\"
b0d623f7 31.Dd April 21, 2006
9bccf70c 32.Dt MMAP 2
b0d623f7 33.Os
9bccf70c
A
34.Sh NAME
35.Nm mmap
b0d623f7
A
36.Nd allocate memory, or map files or devices into memory
37.Sh LIBRARY
38.Lb libc
9bccf70c 39.Sh SYNOPSIS
b0d623f7 40.In sys/mman.h
9bccf70c 41.Ft void *
b0d623f7 42.Fn mmap "void *addr" "size_t len" "int prot" "int flags" "int fd" "off_t offset"
9bccf70c
A
43.Sh DESCRIPTION
44The
b0d623f7
A
45.Fn mmap
46system call causes the pages starting at
9bccf70c
A
47.Fa addr
48and continuing for at most
49.Fa len
50bytes to be mapped from the object described by
b0d623f7 51.Fa fd ,
9bccf70c
A
52starting at byte offset
53.Fa offset .
54If
55.Fa offset
56or
57.Fa len
58is not a multiple of the pagesize, the mapped region may extend past the
59specified range.
b0d623f7 60Any extension beyond the end of the mapped object will be zero-filled.
9bccf70c 61.Pp
b0d623f7
A
62The
63.Fa addr
64argument is used by the system to determine the starting address of the mapping,
65and its interpretation is dependent on the setting of the MAP_FIXED flag.
66If MAP_FIXED is specified in
67.Fa flags ,
68the system will try to place the mapping at the specified address,
69possibly removing a
70mapping that already exists at that location.
71If MAP_FIXED is not specified,
72then the system will attempt to use the range of addresses starting at
9bccf70c 73.Fa addr
b0d623f7
A
74if they do not overlap any existing mappings,
75including memory allocated by malloc(3) and other such allocators.
76Otherwise,
77the system will choose an alternate address for the mapping (using an implementation
78dependent algorithm)
79that does not overlap any existing
80mappings.
81In other words,
82without MAP_FIXED the system will attempt to find an empty location in the address space if the specified address
83range has already been mapped by something else.
9bccf70c
A
84If
85.Fa addr
b0d623f7
A
86is zero and MAP_FIXED is not specified,
87then an address will be selected by the system so as not to overlap
88any existing mappings in the address space.
89In all cases,
90the actual starting address of the region is returned.
91If MAP_FIXED is specified,
92a successful
9bccf70c
A
93.Fa mmap
94deletes any previous mapping in the allocated address range.
b0d623f7 95Previous mappings are never deleted if MAP_FIXED is not specified.
9bccf70c
A
96.Pp
97The protections (region accessibility) are specified in the
98.Fa prot
99argument by
100.Em or Ns 'ing
101the following values:
102.Pp
b0d623f7
A
103.Bl -tag -width PROT_WRITE -compact
104.It Dv PROT_NONE
105Pages may not be accessed.
9bccf70c
A
106.It Dv PROT_READ
107Pages may be read.
108.It Dv PROT_WRITE
109Pages may be written.
b0d623f7
A
110.It Dv PROT_EXEC
111Pages may be executed.
9bccf70c
A
112.El
113.Pp
b0d623f7
A
114Note that, due to hardware limitations, on some platforms PROT_WRITE may
115imply PROT_READ, and PROT_READ may imply PROT_EXEC. Portable programs
116should not rely on these flags being separately enforcable.
117.Pp
9bccf70c
A
118The
119.Fa flags
b0d623f7
A
120argument specifies the type of the mapped object, mapping options and
121whether modifications made to the mapped copy of the page are private
122to the process (copy-on-write) or are to be shared with other references.
123Sharing, mapping type and options are specified in the
9bccf70c
A
124.Fa flags
125argument by
126.Em or Ns 'ing
127the following values:
b0d623f7 128.Bl -tag -width MAP_HASSEMAPHORE
3e170ce0
A
129.It Dv MAP_ANONYMOUS
130Synonym for
131.Dv MAP_ANON.
9bccf70c
A
132.It Dv MAP_ANON
133Map anonymous memory not associated with any specific file.
b0d623f7
A
134The
135.Fa offset
136argument is ignored.
2d21ac55 137Mac OS X specific: the file descriptor used for creating
9bccf70c 138.Dv MAP_ANON
2d21ac55
A
139regions can be used to pass some Mach VM flags, and can
140be specified as \-1 if no such flags are associated with
141the region. Mach VM flags are defined in
142<mach/vm_statistics.h> and the ones that currently apply
143to
144.Nm mmap
145are:
146.Pp
39037602 147VM_FLAGS_PURGABLE to create Mach purgable (i.e. volatile) memory.
2d21ac55 148.Pp
39037602 149VM_MAKE_TAG(tag) to associate an 8-bit tag with the region.
b0d623f7 150.br
2d21ac55
A
151<mach/vm_statistics.h> defines some preset tags (with a VM_MEMORY_ prefix).
152Users are encouraged to use tags between 240 and 255.
153Tags are used by tools such as vmmap(1) to help identify specific memory regions.
6d2010ae 154.Pp
9bccf70c 155.It Dv MAP_FILE
b0d623f7 156Mapped from a regular file. (This is
9bccf70c
A
157the default mapping type, and need not be specified.)
158.It Dv MAP_FIXED
159Do not permit the system to select a different address than the one
160specified.
161If the specified address cannot be used,
b0d623f7 162.Fn mmap
9bccf70c 163will fail.
b0d623f7
A
164If
165.Dv MAP_FIXED
166is specified,
9bccf70c
A
167.Fa addr
168must be a multiple of the pagesize.
b0d623f7
A
169If a
170.Dv MAP_FIXED
171request is successful, the mapping established by
172.Fn mmap
173replaces any previous mappings for the process' pages in the range from
174.Fa addr
175to
176.Fa addr
177+
178.Fa len .
9bccf70c
A
179Use of this option is discouraged.
180.It Dv MAP_HASSEMAPHORE
181Notify the kernel that the region may contain semaphores and that special
182handling may be necessary.
9bccf70c 183.It Dv MAP_PRIVATE
2d21ac55 184Modifications are private (copy-on-write).
9bccf70c
A
185.It Dv MAP_SHARED
186Modifications are shared.
2d21ac55
A
187.It Dv MAP_NOCACHE
188Pages in this mapping are not retained in the kernel's memory cache.
189If the system runs low on memory, pages in MAP_NOCACHE mappings will be among
190the first to be reclaimed.
191This flag is intended for mappings that have little locality and
192provides a hint to the kernel that pages in this mapping are unlikely to be needed
193again in the near future.
9bccf70c
A
194.El
195.Pp
2d21ac55
A
196Conforming applications must specify either MAP_PRIVATE or MAP_SHARED.
197.Pp
b0d623f7 198The
9bccf70c 199.Xr close 2
b0d623f7 200system call does not unmap pages, see
9bccf70c
A
201.Xr munmap 2
202for further information.
203.Pp
204The current design does not allow a process to specify the location of
205swap space.
206In the future we may define an additional mapping type,
207.Dv MAP_SWAP ,
208in which
209the file descriptor argument specifies a file or device to which swapping
210should be done.
211.Sh RETURN VALUES
212Upon successful completion,
b0d623f7 213.Fn mmap
9bccf70c 214returns a pointer to the mapped region.
b0d623f7
A
215Otherwise, a value of
216.Dv MAP_FAILED
217is returned and
9bccf70c
A
218.Va errno
219is set to indicate the error.
220.Sh ERRORS
b0d623f7
A
221The
222.Fn mmap
223system call
9bccf70c
A
224will fail if:
225.Bl -tag -width Er
226.It Bq Er EACCES
b0d623f7
A
227The flag
228.Dv PROT_READ
229was specified as part of the
230.Fa prot
231argument and
232.Fa fd
233was not open for reading.
9bccf70c 234The flags
9bccf70c 235.Dv MAP_SHARED
b0d623f7
A
236and
237.Dv PROT_WRITE
238were specified as part of the
9bccf70c
A
239.Fa flags
240and
241.Fa prot
b0d623f7
A
242argument and
243.Fa fd
244was not open for writing.
9bccf70c 245.It Bq Er EBADF
b0d623f7
A
246The
247.Fa fd
248argument
249is not a valid open file descriptor.
9bccf70c
A
250.It Bq Er EINVAL
251.Dv MAP_FIXED
b0d623f7
A
252was specified and the
253.Fa addr
254argument was not page aligned, or part of the desired address space
255resides out of the valid address space for a user process.
2d21ac55
A
256.It Bq Er EINVAL
257.Fa flags
258does not include either MAP_PRIVATE or MAP_SHARED.
2d21ac55 259.It Bq Er EINVAL
b0d623f7 260The
2d21ac55 261.Fa len
b0d623f7 262argument
3e170ce0
A
263was negative or zero. Historically, the system call would not return an error if the argument was zero.
264See other potential additional restrictions in the
265COMPATIBILITY section below.
2d21ac55 266.It Bq Er EINVAL
b0d623f7 267The
2d21ac55 268.Fa offset
b0d623f7
A
269argument
270was not page-aligned based on the page size as returned by getpagesize(3).
2d21ac55 271.It Bq Er ENODEV
b0d623f7
A
272.Dv MAP_ANON
273has not been specified and the file
274.Fa fd
275refers to does not support mapping.
9bccf70c
A
276.It Bq Er ENOMEM
277.Dv MAP_FIXED
b0d623f7 278was specified and the
9bccf70c 279.Fa addr
b0d623f7
A
280argument was not available.
281.Dv MAP_FIXED
282was specified and the address range specified exceeds the address space
283limit for the process.
9bccf70c 284.Dv MAP_ANON
b0d623f7 285was specified and insufficient memory was available.
2d21ac55 286.It Bq Er ENXIO
b0d623f7
A
287Addresses in the specified range are invalid for
288.Fa fd .
2d21ac55
A
289.It Bq Er EOVERFLOW
290Addresses in the specified range exceed the maximum offset
b0d623f7
A
291set for
292.Fa fd .
2d21ac55
A
293.El
294.Sh LEGACY SYNOPSIS
295.Fd #include <sys/types.h>
296.Fd #include <sys/mman.h>
297.Pp
298The include file
299.In sys/types.h
300is necessary.
301.Sh COMPATIBILITY
302.Fn mmap
303now returns with
304.Va errno
305set to EINVAL in places that historically succeeded.
306The rules have changed as follows:
307.Bl -bullet
308.It
309The
310.Fa flags
311parameter must specify either MAP_PRIVATE or MAP_SHARED.
312.It
313The
3e170ce0 314.Fa len
2d21ac55
A
315parameter must not be 0.
316.It
317The
318.Fa off
319parameter must be a multiple of pagesize,
320as returned by
321.Fn sysconf .
9bccf70c 322.El
b0d623f7 323.Sh SEE ALSO
9bccf70c
A
324.Xr madvise 2 ,
325.Xr mincore 2 ,
b0d623f7 326.Xr minherit 2 ,
2d21ac55
A
327.Xr mlock 2 ,
328.Xr mprotect 2 ,
329.Xr msync 2 ,
b0d623f7 330.Xr munlock 2 ,
2d21ac55 331.Xr munmap 2 ,
b0d623f7
A
332.Xr shmat 2 ,
333.Xr getpagesize 3