]>
Commit | Line | Data |
---|---|---|
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 |
44 | The | |
b0d623f7 A |
45 | .Fn mmap |
46 | system call causes the pages starting at | |
9bccf70c A |
47 | .Fa addr |
48 | and continuing for at most | |
49 | .Fa len | |
50 | bytes to be mapped from the object described by | |
b0d623f7 | 51 | .Fa fd , |
9bccf70c A |
52 | starting at byte offset |
53 | .Fa offset . | |
54 | If | |
55 | .Fa offset | |
56 | or | |
57 | .Fa len | |
58 | is not a multiple of the pagesize, the mapped region may extend past the | |
59 | specified range. | |
b0d623f7 | 60 | Any extension beyond the end of the mapped object will be zero-filled. |
9bccf70c | 61 | .Pp |
b0d623f7 A |
62 | The |
63 | .Fa addr | |
64 | argument is used by the system to determine the starting address of the mapping, | |
65 | and its interpretation is dependent on the setting of the MAP_FIXED flag. | |
66 | If MAP_FIXED is specified in | |
67 | .Fa flags , | |
68 | the system will try to place the mapping at the specified address, | |
69 | possibly removing a | |
70 | mapping that already exists at that location. | |
71 | If MAP_FIXED is not specified, | |
72 | then the system will attempt to use the range of addresses starting at | |
9bccf70c | 73 | .Fa addr |
b0d623f7 A |
74 | if they do not overlap any existing mappings, |
75 | including memory allocated by malloc(3) and other such allocators. | |
76 | Otherwise, | |
77 | the system will choose an alternate address for the mapping (using an implementation | |
78 | dependent algorithm) | |
79 | that does not overlap any existing | |
80 | mappings. | |
81 | In other words, | |
82 | without MAP_FIXED the system will attempt to find an empty location in the address space if the specified address | |
83 | range has already been mapped by something else. | |
9bccf70c A |
84 | If |
85 | .Fa addr | |
b0d623f7 A |
86 | is zero and MAP_FIXED is not specified, |
87 | then an address will be selected by the system so as not to overlap | |
88 | any existing mappings in the address space. | |
89 | In all cases, | |
90 | the actual starting address of the region is returned. | |
91 | If MAP_FIXED is specified, | |
92 | a successful | |
9bccf70c A |
93 | .Fa mmap |
94 | deletes any previous mapping in the allocated address range. | |
b0d623f7 | 95 | Previous mappings are never deleted if MAP_FIXED is not specified. |
9bccf70c A |
96 | .Pp |
97 | The protections (region accessibility) are specified in the | |
98 | .Fa prot | |
99 | argument by | |
100 | .Em or Ns 'ing | |
101 | the following values: | |
102 | .Pp | |
b0d623f7 A |
103 | .Bl -tag -width PROT_WRITE -compact |
104 | .It Dv PROT_NONE | |
105 | Pages may not be accessed. | |
9bccf70c A |
106 | .It Dv PROT_READ |
107 | Pages may be read. | |
108 | .It Dv PROT_WRITE | |
109 | Pages may be written. | |
b0d623f7 A |
110 | .It Dv PROT_EXEC |
111 | Pages may be executed. | |
9bccf70c A |
112 | .El |
113 | .Pp | |
b0d623f7 A |
114 | Note that, due to hardware limitations, on some platforms PROT_WRITE may |
115 | imply PROT_READ, and PROT_READ may imply PROT_EXEC. Portable programs | |
116 | should not rely on these flags being separately enforcable. | |
117 | .Pp | |
9bccf70c A |
118 | The |
119 | .Fa flags | |
b0d623f7 A |
120 | argument specifies the type of the mapped object, mapping options and |
121 | whether modifications made to the mapped copy of the page are private | |
122 | to the process (copy-on-write) or are to be shared with other references. | |
123 | Sharing, mapping type and options are specified in the | |
9bccf70c A |
124 | .Fa flags |
125 | argument by | |
126 | .Em or Ns 'ing | |
127 | the following values: | |
b0d623f7 | 128 | .Bl -tag -width MAP_HASSEMAPHORE |
3e170ce0 A |
129 | .It Dv MAP_ANONYMOUS |
130 | Synonym for | |
131 | .Dv MAP_ANON. | |
9bccf70c A |
132 | .It Dv MAP_ANON |
133 | Map anonymous memory not associated with any specific file. | |
b0d623f7 A |
134 | The |
135 | .Fa offset | |
136 | argument is ignored. | |
2d21ac55 | 137 | Mac OS X specific: the file descriptor used for creating |
9bccf70c | 138 | .Dv MAP_ANON |
2d21ac55 A |
139 | regions can be used to pass some Mach VM flags, and can |
140 | be specified as \-1 if no such flags are associated with | |
141 | the region. Mach VM flags are defined in | |
142 | <mach/vm_statistics.h> and the ones that currently apply | |
143 | to | |
144 | .Nm mmap | |
145 | are: | |
146 | .Pp | |
39037602 | 147 | VM_FLAGS_PURGABLE to create Mach purgable (i.e. volatile) memory. |
2d21ac55 | 148 | .Pp |
39037602 | 149 | VM_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). |
152 | Users are encouraged to use tags between 240 and 255. | |
153 | Tags are used by tools such as vmmap(1) to help identify specific memory regions. | |
6d2010ae | 154 | .Pp |
9bccf70c | 155 | .It Dv MAP_FILE |
b0d623f7 | 156 | Mapped from a regular file. (This is |
9bccf70c A |
157 | the default mapping type, and need not be specified.) |
158 | .It Dv MAP_FIXED | |
159 | Do not permit the system to select a different address than the one | |
160 | specified. | |
161 | If the specified address cannot be used, | |
b0d623f7 | 162 | .Fn mmap |
9bccf70c | 163 | will fail. |
b0d623f7 A |
164 | If |
165 | .Dv MAP_FIXED | |
166 | is specified, | |
9bccf70c A |
167 | .Fa addr |
168 | must be a multiple of the pagesize. | |
b0d623f7 A |
169 | If a |
170 | .Dv MAP_FIXED | |
171 | request is successful, the mapping established by | |
172 | .Fn mmap | |
173 | replaces any previous mappings for the process' pages in the range from | |
174 | .Fa addr | |
175 | to | |
176 | .Fa addr | |
177 | + | |
178 | .Fa len . | |
9bccf70c A |
179 | Use of this option is discouraged. |
180 | .It Dv MAP_HASSEMAPHORE | |
181 | Notify the kernel that the region may contain semaphores and that special | |
182 | handling may be necessary. | |
9bccf70c | 183 | .It Dv MAP_PRIVATE |
2d21ac55 | 184 | Modifications are private (copy-on-write). |
9bccf70c A |
185 | .It Dv MAP_SHARED |
186 | Modifications are shared. | |
2d21ac55 A |
187 | .It Dv MAP_NOCACHE |
188 | Pages in this mapping are not retained in the kernel's memory cache. | |
189 | If the system runs low on memory, pages in MAP_NOCACHE mappings will be among | |
190 | the first to be reclaimed. | |
191 | This flag is intended for mappings that have little locality and | |
192 | provides a hint to the kernel that pages in this mapping are unlikely to be needed | |
193 | again in the near future. | |
9bccf70c A |
194 | .El |
195 | .Pp | |
2d21ac55 A |
196 | Conforming applications must specify either MAP_PRIVATE or MAP_SHARED. |
197 | .Pp | |
b0d623f7 | 198 | The |
9bccf70c | 199 | .Xr close 2 |
b0d623f7 | 200 | system call does not unmap pages, see |
9bccf70c A |
201 | .Xr munmap 2 |
202 | for further information. | |
203 | .Pp | |
204 | The current design does not allow a process to specify the location of | |
205 | swap space. | |
206 | In the future we may define an additional mapping type, | |
207 | .Dv MAP_SWAP , | |
208 | in which | |
209 | the file descriptor argument specifies a file or device to which swapping | |
210 | should be done. | |
211 | .Sh RETURN VALUES | |
212 | Upon successful completion, | |
b0d623f7 | 213 | .Fn mmap |
9bccf70c | 214 | returns a pointer to the mapped region. |
b0d623f7 A |
215 | Otherwise, a value of |
216 | .Dv MAP_FAILED | |
217 | is returned and | |
9bccf70c A |
218 | .Va errno |
219 | is set to indicate the error. | |
220 | .Sh ERRORS | |
b0d623f7 A |
221 | The |
222 | .Fn mmap | |
223 | system call | |
9bccf70c A |
224 | will fail if: |
225 | .Bl -tag -width Er | |
226 | .It Bq Er EACCES | |
b0d623f7 A |
227 | The flag |
228 | .Dv PROT_READ | |
229 | was specified as part of the | |
230 | .Fa prot | |
231 | argument and | |
232 | .Fa fd | |
233 | was not open for reading. | |
9bccf70c | 234 | The flags |
9bccf70c | 235 | .Dv MAP_SHARED |
b0d623f7 A |
236 | and |
237 | .Dv PROT_WRITE | |
238 | were specified as part of the | |
9bccf70c A |
239 | .Fa flags |
240 | and | |
241 | .Fa prot | |
b0d623f7 A |
242 | argument and |
243 | .Fa fd | |
244 | was not open for writing. | |
9bccf70c | 245 | .It Bq Er EBADF |
b0d623f7 A |
246 | The |
247 | .Fa fd | |
248 | argument | |
249 | is not a valid open file descriptor. | |
9bccf70c A |
250 | .It Bq Er EINVAL |
251 | .Dv MAP_FIXED | |
b0d623f7 A |
252 | was specified and the |
253 | .Fa addr | |
254 | argument was not page aligned, or part of the desired address space | |
255 | resides out of the valid address space for a user process. | |
2d21ac55 A |
256 | .It Bq Er EINVAL |
257 | .Fa flags | |
258 | does not include either MAP_PRIVATE or MAP_SHARED. | |
2d21ac55 | 259 | .It Bq Er EINVAL |
b0d623f7 | 260 | The |
2d21ac55 | 261 | .Fa len |
b0d623f7 | 262 | argument |
3e170ce0 A |
263 | was negative or zero. Historically, the system call would not return an error if the argument was zero. |
264 | See other potential additional restrictions in the | |
265 | COMPATIBILITY section below. | |
2d21ac55 | 266 | .It Bq Er EINVAL |
b0d623f7 | 267 | The |
2d21ac55 | 268 | .Fa offset |
b0d623f7 A |
269 | argument |
270 | was 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 |
273 | has not been specified and the file | |
274 | .Fa fd | |
275 | refers to does not support mapping. | |
9bccf70c A |
276 | .It Bq Er ENOMEM |
277 | .Dv MAP_FIXED | |
b0d623f7 | 278 | was specified and the |
9bccf70c | 279 | .Fa addr |
b0d623f7 A |
280 | argument was not available. |
281 | .Dv MAP_FIXED | |
282 | was specified and the address range specified exceeds the address space | |
283 | limit for the process. | |
9bccf70c | 284 | .Dv MAP_ANON |
b0d623f7 | 285 | was specified and insufficient memory was available. |
2d21ac55 | 286 | .It Bq Er ENXIO |
b0d623f7 A |
287 | Addresses in the specified range are invalid for |
288 | .Fa fd . | |
2d21ac55 A |
289 | .It Bq Er EOVERFLOW |
290 | Addresses in the specified range exceed the maximum offset | |
b0d623f7 A |
291 | set 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 | |
298 | The include file | |
299 | .In sys/types.h | |
300 | is necessary. | |
301 | .Sh COMPATIBILITY | |
302 | .Fn mmap | |
303 | now returns with | |
304 | .Va errno | |
305 | set to EINVAL in places that historically succeeded. | |
306 | The rules have changed as follows: | |
307 | .Bl -bullet | |
308 | .It | |
309 | The | |
310 | .Fa flags | |
311 | parameter must specify either MAP_PRIVATE or MAP_SHARED. | |
312 | .It | |
313 | The | |
3e170ce0 | 314 | .Fa len |
2d21ac55 A |
315 | parameter must not be 0. |
316 | .It | |
317 | The | |
318 | .Fa off | |
319 | parameter must be a multiple of pagesize, | |
320 | as 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 |