1 # SOME DESCRIPTIVE TITLE
2 # Copyright (C) YEAR Free Software Foundation, Inc.
3 # This file is distributed under the same license as the PACKAGE package.
4 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
9 "Project-Id-Version: PACKAGE VERSION\n"
10 "POT-Creation-Date: 2015-01-04 23:49+0900\n"
11 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13 "Language-Team: LANGUAGE <LL@li.org>\n"
16 "Content-Type: text/plain; charset=UTF-8\n"
17 "Content-Transfer-Encoding: 8bit\n"
20 #: build/C/man2/alloc_hugepages.2:25
22 msgid "ALLOC_HUGEPAGES"
26 #: build/C/man2/alloc_hugepages.2:25
32 #: build/C/man2/alloc_hugepages.2:25 build/C/man2/cacheflush.2:25 build/C/man2/fallocate.2:11 build/C/man2/madvise.2:35 build/C/man3/mallinfo.3:26 build/C/man3/malloc_stats.3:26 build/C/man3/malloc_trim.3:26 build/C/man3/mallopt.3:26 build/C/man2/mlock.2:26 build/C/man2/mmap.2:40 build/C/man2/mmap2.2:29 build/C/man2/mprotect.2:39 build/C/man2/mremap.2:30 build/C/man2/msync.2:25 build/C/man2/posix_fadvise.2:28 build/C/man2/readahead.2:28 build/C/man2/remap_file_pages.2:28 build/C/man3/shm_open.3:26 build/C/man7/shm_overview.7:27 build/C/man2/shmctl.2:45 build/C/man2/shmget.2:38 build/C/man2/shmop.2:41 build/C/man2/subpage_prot.2:30 build/C/man2/sync_file_range.2:30
38 #: build/C/man2/alloc_hugepages.2:25 build/C/man3/alloca.3:43 build/C/man2/cacheflush.2:25 build/C/man2/fallocate.2:11 build/C/man2/madvise.2:35 build/C/man3/mallinfo.3:26 build/C/man3/malloc_get_state.3:25 build/C/man3/malloc_hook.3:10 build/C/man3/malloc_info.3:25 build/C/man3/malloc_stats.3:26 build/C/man3/malloc_trim.3:26 build/C/man3/malloc_usable_size.3:25 build/C/man3/mallopt.3:26 build/C/man3/mcheck.3:25 build/C/man2/mlock.2:26 build/C/man2/mmap.2:40 build/C/man2/mmap2.2:29 build/C/man2/mprotect.2:39 build/C/man2/mremap.2:30 build/C/man2/msync.2:25 build/C/man3/mtrace.3:25 build/C/man2/posix_fadvise.2:28 build/C/man3/posix_fallocate.3:25 build/C/man3/posix_memalign.3:29 build/C/man2/readahead.2:28 build/C/man2/remap_file_pages.2:28 build/C/man3/shm_open.3:26 build/C/man7/shm_overview.7:27 build/C/man2/shmctl.2:45 build/C/man2/shmget.2:38 build/C/man2/shmop.2:41 build/C/man2/subpage_prot.2:30 build/C/man2/sync_file_range.2:30
40 msgid "Linux Programmer's Manual"
44 #: build/C/man2/alloc_hugepages.2:26 build/C/man3/alloca.3:44 build/C/man2/cacheflush.2:26 build/C/man2/fallocate.2:12 build/C/man2/madvise.2:36 build/C/man3/mallinfo.3:27 build/C/man3/malloc_get_state.3:26 build/C/man3/malloc_hook.3:11 build/C/man3/malloc_info.3:26 build/C/man3/malloc_stats.3:27 build/C/man3/malloc_trim.3:27 build/C/man3/malloc_usable_size.3:26 build/C/man3/mallopt.3:27 build/C/man3/mcheck.3:26 build/C/man2/mlock.2:27 build/C/man2/mmap.2:41 build/C/man2/mmap2.2:30 build/C/man2/mprotect.2:40 build/C/man2/mremap.2:31 build/C/man2/msync.2:26 build/C/man3/mtrace.3:26 build/C/man2/posix_fadvise.2:29 build/C/man3/posix_fallocate.3:26 build/C/man3/posix_memalign.3:30 build/C/man2/readahead.2:29 build/C/man2/remap_file_pages.2:29 build/C/man3/shm_open.3:27 build/C/man7/shm_overview.7:28 build/C/man2/shmctl.2:46 build/C/man2/shmget.2:39 build/C/man2/shmop.2:42 build/C/man2/subpage_prot.2:31 build/C/man2/sync_file_range.2:31
50 #: build/C/man2/alloc_hugepages.2:28
51 msgid "alloc_hugepages, free_hugepages - allocate or free huge pages"
55 #: build/C/man2/alloc_hugepages.2:28 build/C/man3/alloca.3:46 build/C/man2/cacheflush.2:28 build/C/man2/fallocate.2:14 build/C/man2/madvise.2:38 build/C/man3/mallinfo.3:29 build/C/man3/malloc_get_state.3:28 build/C/man3/malloc_hook.3:15 build/C/man3/malloc_info.3:28 build/C/man3/malloc_stats.3:29 build/C/man3/malloc_trim.3:29 build/C/man3/malloc_usable_size.3:28 build/C/man3/mallopt.3:29 build/C/man3/mcheck.3:28 build/C/man2/mlock.2:29 build/C/man2/mmap.2:43 build/C/man2/mmap2.2:32 build/C/man2/mprotect.2:42 build/C/man2/mremap.2:33 build/C/man2/msync.2:28 build/C/man3/mtrace.3:28 build/C/man2/posix_fadvise.2:31 build/C/man3/posix_fallocate.3:28 build/C/man3/posix_memalign.3:32 build/C/man2/readahead.2:31 build/C/man2/remap_file_pages.2:31 build/C/man3/shm_open.3:29 build/C/man2/shmctl.2:48 build/C/man2/shmget.2:41 build/C/man2/shmop.2:44 build/C/man2/subpage_prot.2:33 build/C/man2/sync_file_range.2:33
60 #. asmlinkage unsigned long sys_alloc_hugepages(int key, unsigned long addr,
61 #. unsigned long len, int prot, int flag);
63 #: build/C/man2/alloc_hugepages.2:34
66 "B<void *alloc_hugepages(int >I<key>B<, void *>I<addr>B<, size_t "
68 "B< int >I<prot>B<, int >I<flag>B<);>\n"
71 #. asmlinkage int sys_free_hugepages(unsigned long addr);
73 #: build/C/man2/alloc_hugepages.2:37
75 msgid "B<int free_hugepages(void *>I<addr>B<);>\n"
79 #: build/C/man2/alloc_hugepages.2:38 build/C/man3/alloca.3:50 build/C/man2/cacheflush.2:34 build/C/man2/fallocate.2:22 build/C/man2/madvise.2:50 build/C/man3/mallinfo.3:33 build/C/man3/malloc_get_state.3:36 build/C/man3/malloc_hook.3:33 build/C/man3/malloc_info.3:34 build/C/man3/malloc_stats.3:33 build/C/man3/malloc_trim.3:33 build/C/man3/malloc_usable_size.3:32 build/C/man3/mallopt.3:33 build/C/man3/mcheck.3:40 build/C/man2/mlock.2:39 build/C/man2/mmap.2:54 build/C/man2/mmap2.2:39 build/C/man2/mprotect.2:48 build/C/man2/mremap.2:42 build/C/man2/msync.2:32 build/C/man3/mtrace.3:34 build/C/man2/posix_fadvise.2:50 build/C/man3/posix_fallocate.3:46 build/C/man3/posix_memalign.3:84 build/C/man2/readahead.2:38 build/C/man2/remap_file_pages.2:39 build/C/man3/shm_open.3:41 build/C/man7/shm_overview.7:30 build/C/man2/shmctl.2:56 build/C/man2/shmget.2:49 build/C/man2/shmop.2:53 build/C/man2/subpage_prot.2:41 build/C/man2/sync_file_range.2:41
85 #: build/C/man2/alloc_hugepages.2:49
87 "The system calls B<alloc_hugepages>() and B<free_hugepages>() were "
88 "introduced in Linux 2.5.36 and removed again in 2.5.54. They existed only "
89 "on i386 and ia64 (when built with B<CONFIG_HUGETLB_PAGE>). In Linux 2.4.20, "
90 "the syscall numbers exist, but the calls fail with the error B<ENOSYS>."
94 #: build/C/man2/alloc_hugepages.2:57
96 "On i386 the memory management hardware knows about ordinary pages (4 KiB) "
97 "and huge pages (2 or 4 MiB). Similarly ia64 knows about huge pages of "
98 "several sizes. These system calls serve to map huge pages into the "
99 "process's memory or to free them again. Huge pages are locked into memory, "
100 "and are not swapped."
104 #: build/C/man2/alloc_hugepages.2:66
106 "The I<key> argument is an identifier. When zero the pages are private, and "
107 "not inherited by children. When positive the pages are shared with other "
108 "applications using the same I<key>, and inherited by child processes."
112 #: build/C/man2/alloc_hugepages.2:81
114 "The I<addr> argument of B<free_hugepages>() tells which page is being "
115 "freed: it was the return value of a call to B<alloc_hugepages>(). (The "
116 "memory is first actually freed when all users have released it.) The "
117 "I<addr> argument of B<alloc_hugepages>() is a hint, that the kernel may or "
118 "may not follow. Addresses must be properly aligned."
122 #: build/C/man2/alloc_hugepages.2:86
124 "The I<len> argument is the length of the required segment. It must be a "
125 "multiple of the huge page size."
129 #: build/C/man2/alloc_hugepages.2:94
131 "The I<prot> argument specifies the memory protection of the segment. It is "
132 "one of B<PROT_READ>, B<PROT_WRITE>, B<PROT_EXEC>."
136 #: build/C/man2/alloc_hugepages.2:109
138 "The I<flag> argument is ignored, unless I<key> is positive. In that case, "
139 "if I<flag> is B<IPC_CREAT>, then a new huge page segment is created when "
140 "none with the given key existed. If this flag is not set, then B<ENOENT> is "
141 "returned when no segment with the given key exists."
145 #: build/C/man2/alloc_hugepages.2:109 build/C/man3/alloca.3:60 build/C/man2/cacheflush.2:53 build/C/man2/fallocate.2:228 build/C/man2/madvise.2:268 build/C/man3/malloc_get_state.3:61 build/C/man3/malloc_info.3:48 build/C/man3/malloc_trim.3:51 build/C/man3/malloc_usable_size.3:40 build/C/man3/mallopt.3:379 build/C/man3/mcheck.3:129 build/C/man2/mlock.2:116 build/C/man2/mmap.2:375 build/C/man2/mmap2.2:54 build/C/man2/mprotect.2:77 build/C/man2/mremap.2:127 build/C/man2/msync.2:68 build/C/man2/posix_fadvise.2:87 build/C/man3/posix_fallocate.3:66 build/C/man3/posix_memalign.3:142 build/C/man2/readahead.2:66 build/C/man2/remap_file_pages.2:132 build/C/man3/shm_open.3:171 build/C/man2/shmctl.2:283 build/C/man2/shmget.2:183 build/C/man2/shmop.2:168 build/C/man2/subpage_prot.2:66 build/C/man2/sync_file_range.2:141
151 #: build/C/man2/alloc_hugepages.2:118
153 "On success, B<alloc_hugepages>() returns the allocated virtual address, and "
154 "B<free_hugepages>() returns zero. On error, -1 is returned, and I<errno> "
155 "is set appropriately."
159 #: build/C/man2/alloc_hugepages.2:118 build/C/man2/cacheflush.2:59 build/C/man2/fallocate.2:235 build/C/man2/madvise.2:275 build/C/man3/malloc_info.3:55 build/C/man3/malloc_trim.3:56 build/C/man3/mallopt.3:384 build/C/man2/mlock.2:122 build/C/man2/mmap.2:392 build/C/man2/mmap2.2:61 build/C/man2/mprotect.2:84 build/C/man2/mremap.2:135 build/C/man2/msync.2:73 build/C/man2/posix_fadvise.2:90 build/C/man3/posix_fallocate.3:72 build/C/man3/posix_memalign.3:157 build/C/man2/readahead.2:72 build/C/man2/remap_file_pages.2:139 build/C/man3/shm_open.3:180 build/C/man2/shmctl.2:305 build/C/man2/shmget.2:188 build/C/man2/shmop.2:182 build/C/man2/subpage_prot.2:71 build/C/man2/sync_file_range.2:147
165 #: build/C/man2/alloc_hugepages.2:119 build/C/man2/fallocate.2:319
171 #: build/C/man2/alloc_hugepages.2:122
172 msgid "The system call is not supported on this kernel."
176 #: build/C/man2/alloc_hugepages.2:122
182 #: build/C/man2/alloc_hugepages.2:126
184 "I</proc/sys/vm/nr_hugepages> Number of configured hugetlb pages. This can "
185 "be read and written."
189 #: build/C/man2/alloc_hugepages.2:130
191 "I</proc/meminfo> Gives info on the number of configured hugetlb pages and on "
192 "their size in the three variables HugePages_Total, HugePages_Free, "
197 #: build/C/man2/alloc_hugepages.2:130 build/C/man3/alloca.3:70 build/C/man2/cacheflush.2:75 build/C/man2/fallocate.2:370 build/C/man2/madvise.2:332 build/C/man3/mallinfo.3:110 build/C/man3/malloc_get_state.3:86 build/C/man3/malloc_hook.3:80 build/C/man3/malloc_info.3:63 build/C/man3/malloc_stats.3:55 build/C/man3/malloc_trim.3:60 build/C/man3/malloc_usable_size.3:53 build/C/man3/mallopt.3:392 build/C/man3/mcheck.3:145 build/C/man2/mlock.2:186 build/C/man2/mmap.2:495 build/C/man2/mmap2.2:77 build/C/man2/mprotect.2:112 build/C/man2/mremap.2:185 build/C/man2/msync.2:96 build/C/man3/mtrace.3:78 build/C/man2/posix_fadvise.2:122 build/C/man3/posix_fallocate.3:108 build/C/man3/posix_memalign.3:182 build/C/man2/readahead.2:88 build/C/man2/remap_file_pages.2:161 build/C/man3/shm_open.3:251 build/C/man7/shm_overview.7:101 build/C/man2/shmctl.2:377 build/C/man2/shmget.2:248 build/C/man2/shmop.2:228 build/C/man2/subpage_prot.2:96 build/C/man2/sync_file_range.2:180
199 msgid "CONFORMING TO"
203 #: build/C/man2/alloc_hugepages.2:133
205 "These calls are specific to Linux on Intel processors, and should not be "
206 "used in programs intended to be portable."
210 #: build/C/man2/alloc_hugepages.2:133 build/C/man3/alloca.3:78 build/C/man2/madvise.2:354 build/C/man3/malloc_get_state.3:88 build/C/man3/malloc_hook.3:82 build/C/man3/malloc_info.3:65 build/C/man3/malloc_stats.3:57 build/C/man3/malloc_trim.3:62 build/C/man3/malloc_usable_size.3:55 build/C/man3/mcheck.3:147 build/C/man2/mlock.2:213 build/C/man2/mmap.2:513 build/C/man2/mmap2.2:79 build/C/man2/mprotect.2:121 build/C/man2/mremap.2:191 build/C/man2/msync.2:120 build/C/man3/mtrace.3:80 build/C/man2/posix_fadvise.2:131 build/C/man3/posix_memalign.3:221 build/C/man2/readahead.2:93 build/C/man2/remap_file_pages.2:165 build/C/man3/shm_open.3:257 build/C/man7/shm_overview.7:103 build/C/man2/shmctl.2:382 build/C/man2/shmget.2:256 build/C/man2/shmop.2:243 build/C/man2/subpage_prot.2:98 build/C/man2/sync_file_range.2:183
216 #: build/C/man2/alloc_hugepages.2:141
218 "These system calls are gone; they existed only in Linux 2.5.36 through to "
219 "2.5.54. Now the hugetlbfs filesystem can be used instead. Memory backed by "
220 "huge pages (if the CPU supports them) is obtained by using B<mmap>(2) to "
221 "map files in this virtual filesystem."
225 #: build/C/man2/alloc_hugepages.2:145
227 "The maximal number of huge pages can be specified using the B<hugepages=> "
232 #: build/C/man2/alloc_hugepages.2:150 build/C/man3/alloca.3:162 build/C/man2/cacheflush.2:89 build/C/man2/fallocate.2:378 build/C/man2/madvise.2:388 build/C/man3/mallinfo.3:279 build/C/man3/malloc_get_state.3:114 build/C/man3/malloc_hook.3:142 build/C/man3/malloc_info.3:262 build/C/man3/malloc_stats.3:67 build/C/man3/malloc_trim.3:82 build/C/man3/malloc_usable_size.3:69 build/C/man3/mallopt.3:568 build/C/man3/mcheck.3:208 build/C/man2/mlock.2:343 build/C/man2/mmap.2:736 build/C/man2/mmap2.2:101 build/C/man2/mprotect.2:228 build/C/man2/mremap.2:214 build/C/man2/msync.2:151 build/C/man3/mtrace.3:172 build/C/man2/posix_fadvise.2:215 build/C/man3/posix_fallocate.3:138 build/C/man3/posix_memalign.3:277 build/C/man2/readahead.2:113 build/C/man2/remap_file_pages.2:183 build/C/man3/shm_open.3:282 build/C/man7/shm_overview.7:127 build/C/man2/shmctl.2:435 build/C/man2/shmget.2:391 build/C/man2/shmop.2:301 build/C/man2/subpage_prot.2:134 build/C/man2/sync_file_range.2:227
238 #: build/C/man2/alloc_hugepages.2:158 build/C/man3/alloca.3:170 build/C/man2/cacheflush.2:97 build/C/man2/fallocate.2:386 build/C/man2/madvise.2:396 build/C/man3/mallinfo.3:287 build/C/man3/malloc_get_state.3:122 build/C/man3/malloc_hook.3:150 build/C/man3/malloc_info.3:270 build/C/man3/malloc_stats.3:75 build/C/man3/malloc_trim.3:90 build/C/man3/malloc_usable_size.3:77 build/C/man3/mallopt.3:576 build/C/man3/mcheck.3:216 build/C/man2/mlock.2:351 build/C/man2/mmap.2:744 build/C/man2/mmap2.2:109 build/C/man2/mprotect.2:236 build/C/man2/mremap.2:222 build/C/man2/msync.2:159 build/C/man3/mtrace.3:180 build/C/man2/posix_fadvise.2:223 build/C/man3/posix_fallocate.3:146 build/C/man3/posix_memalign.3:285 build/C/man2/readahead.2:121 build/C/man2/remap_file_pages.2:191 build/C/man3/shm_open.3:290 build/C/man7/shm_overview.7:135 build/C/man2/shmctl.2:443 build/C/man2/shmget.2:399 build/C/man2/shmop.2:309 build/C/man2/subpage_prot.2:142 build/C/man2/sync_file_range.2:235
240 "This page is part of release 3.76 of the Linux I<man-pages> project. A "
241 "description of the project, information about reporting bugs, and the latest "
242 "version of this page, can be found at "
243 "\\%http://www.kernel.org/doc/man-pages/."
247 #: build/C/man3/alloca.3:43
253 #: build/C/man3/alloca.3:43
259 #: build/C/man3/alloca.3:43 build/C/man3/malloc_get_state.3:25 build/C/man3/malloc_hook.3:10 build/C/man3/malloc_info.3:25 build/C/man3/malloc_usable_size.3:25 build/C/man3/mcheck.3:25 build/C/man3/mtrace.3:25 build/C/man3/posix_fallocate.3:25 build/C/man3/posix_memalign.3:29
265 #: build/C/man3/alloca.3:46
266 msgid "alloca - allocate memory that is automatically freed"
270 #: build/C/man3/alloca.3:48
271 msgid "B<#include E<lt>alloca.hE<gt>>"
275 #: build/C/man3/alloca.3:50
276 msgid "B<void *alloca(size_t >I<size>B<);>"
280 #: build/C/man3/alloca.3:60
282 "The B<alloca>() function allocates I<size> bytes of space in the stack "
283 "frame of the caller. This temporary space is automatically freed when the "
284 "function that called B<alloca>() returns to its caller."
288 #: build/C/man3/alloca.3:65
290 "The B<alloca>() function returns a pointer to the beginning of the "
291 "allocated space. If the allocation causes stack overflow, program behavior "
296 #: build/C/man3/alloca.3:65 build/C/man3/malloc_usable_size.3:48 build/C/man3/posix_fallocate.3:103
302 #: build/C/man3/alloca.3:66 build/C/man3/malloc_usable_size.3:49 build/C/man3/posix_fallocate.3:104
304 msgid "Multithreading (see pthreads(7))"
308 #: build/C/man3/alloca.3:70
309 msgid "The B<alloca>() function is thread-safe."
313 #: build/C/man3/alloca.3:72
314 msgid "This function is not in POSIX.1-2001."
318 #: build/C/man3/alloca.3:78
320 "There is evidence that the B<alloca>() function appeared in 32V, PWB, "
321 "PWB.2, 3BSD, and 4BSD. There is a man page for it in 4.3BSD. Linux uses "
326 #: build/C/man3/alloca.3:93
328 "The B<alloca>() function is machine- and compiler-dependent. For certain "
329 "applications, its use can improve efficiency compared to the use of "
330 "B<malloc>(3) plus B<free>(3). In certain cases, it can also simplify "
331 "memory deallocation in applications that use B<longjmp>(3) or "
332 "B<siglongjmp>(3). Otherwise, its use is discouraged."
336 #: build/C/man3/alloca.3:102
338 "Because the space allocated by B<alloca>() is allocated within the stack "
339 "frame, that space is automatically freed if the function return is jumped "
340 "over by a call to B<longjmp>(3) or B<siglongjmp>(3)."
344 #: build/C/man3/alloca.3:107
345 msgid "Do not attempt to B<free>(3) space allocated by B<alloca>()!"
349 #: build/C/man3/alloca.3:107
351 msgid "Notes on the GNU version"
355 #: build/C/man3/alloca.3:129
357 "Normally, B<gcc>(1) translates calls to B<alloca>() with inlined code. "
358 "This is not done when either the I<-ansi>, I<-std=c89>, I<-std=c99>, or the "
359 "I<-std=c11> option is given B<and> the header I<E<lt>alloca.hE<gt>> is not "
360 "included. Otherwise, (without an -ansi or -std=c* option) the glibc version "
361 "of I<E<lt>stdlib.hE<gt>> includes I<E<lt>alloca.hE<gt>> and that contains "
366 #: build/C/man3/alloca.3:134
370 " #define alloca(size) __builtin_alloca (size)\n"
375 #: build/C/man3/alloca.3:137
376 msgid "with messy consequences if one has a private version of this function."
380 #: build/C/man3/alloca.3:141
382 "The fact that the code is inlined means that it is impossible to take the "
383 "address of this function, or to change its behavior by linking with a "
388 #: build/C/man3/alloca.3:145
390 "The inlined code often consists of a single instruction adjusting the stack "
391 "pointer, and does not check for stack overflow. Thus, there is no NULL "
396 #: build/C/man3/alloca.3:145 build/C/man2/cacheflush.2:82 build/C/man3/mallinfo.3:114 build/C/man3/mallopt.3:406 build/C/man2/mlock.2:311 build/C/man2/mmap.2:586 build/C/man3/mtrace.3:102 build/C/man2/posix_fadvise.2:204 build/C/man2/readahead.2:98 build/C/man2/shmget.2:377
402 #: build/C/man3/alloca.3:150
404 "There is no error indication if the stack frame cannot be extended. "
405 "(However, after a failed allocation, the program is likely to receive a "
406 "B<SIGSEGV> signal if it attempts to access the unallocated space.)"
410 #: build/C/man3/alloca.3:158
412 "On many systems B<alloca>() cannot be used inside the list of arguments of "
413 "a function call, because the stack space reserved by B<alloca>() would "
414 "appear on the stack in the middle of the space for the function arguments."
418 #: build/C/man3/alloca.3:158 build/C/man2/fallocate.2:373 build/C/man2/madvise.2:379 build/C/man3/mallinfo.3:270 build/C/man3/malloc_get_state.3:111 build/C/man3/malloc_hook.3:137 build/C/man3/malloc_info.3:256 build/C/man3/malloc_stats.3:61 build/C/man3/malloc_trim.3:78 build/C/man3/malloc_usable_size.3:67 build/C/man3/mallopt.3:554 build/C/man3/mcheck.3:204 build/C/man2/mlock.2:336 build/C/man2/mmap.2:711 build/C/man2/mmap2.2:95 build/C/man2/mprotect.2:225 build/C/man2/mremap.2:199 build/C/man2/msync.2:147 build/C/man3/mtrace.3:167 build/C/man2/posix_fadvise.2:209 build/C/man3/posix_fallocate.3:133 build/C/man3/posix_memalign.3:272 build/C/man2/readahead.2:107 build/C/man2/remap_file_pages.2:176 build/C/man3/shm_open.3:271 build/C/man7/shm_overview.7:114 build/C/man2/shmctl.2:428 build/C/man2/shmget.2:383 build/C/man2/shmop.2:293 build/C/man2/subpage_prot.2:128 build/C/man2/sync_file_range.2:222
424 #: build/C/man3/alloca.3:162
425 msgid "B<brk>(2), B<longjmp>(3), B<malloc>(3)"
429 #: build/C/man2/cacheflush.2:25
435 #: build/C/man2/cacheflush.2:25
441 #: build/C/man2/cacheflush.2:28
442 msgid "cacheflush - flush contents of instruction and/or data cache"
446 #: build/C/man2/cacheflush.2:31
448 msgid "B<#include E<lt>asm/cachectl.hE<gt>>\n"
452 #: build/C/man2/cacheflush.2:33
454 msgid "B<int cacheflush(char *>I<addr>B<, int >I<nbytes>B<, int >I<cache>B<);>\n"
458 #: build/C/man2/cacheflush.2:43
460 "B<cacheflush>() flushes the contents of the indicated cache(s) for the user "
461 "addresses in the range I<addr> to I<(addr+nbytes-1)>. I<cache> may be one "
466 #: build/C/man2/cacheflush.2:43
472 #: build/C/man2/cacheflush.2:46
473 msgid "Flush the instruction cache."
477 #: build/C/man2/cacheflush.2:46
483 #: build/C/man2/cacheflush.2:49
484 msgid "Write back to memory and invalidate the affected valid cache lines."
488 #: build/C/man2/cacheflush.2:49
494 #: build/C/man2/cacheflush.2:53
495 msgid "Same as B<(ICACHE|DCACHE)>."
499 #: build/C/man2/cacheflush.2:59
501 "B<cacheflush>() returns 0 on success or -1 on error. If errors are "
502 "detected, I<errno> will indicate the error."
506 #: build/C/man2/cacheflush.2:60 build/C/man2/mmap2.2:62 build/C/man2/mremap.2:142 build/C/man2/shmctl.2:314 build/C/man2/subpage_prot.2:72
512 #: build/C/man2/cacheflush.2:67
514 "Some or all of the address range I<addr> to I<(addr+nbytes-1)> is not "
519 #: build/C/man2/cacheflush.2:67 build/C/man2/fallocate.2:247 build/C/man2/fallocate.2:259 build/C/man2/fallocate.2:269 build/C/man2/fallocate.2:279 build/C/man2/fallocate.2:287 build/C/man2/madvise.2:282 build/C/man3/malloc_info.3:56 build/C/man2/mlock.2:157 build/C/man2/mlock.2:164 build/C/man2/mlock.2:176 build/C/man2/mmap.2:421 build/C/man2/mmap.2:429 build/C/man2/mmap.2:434 build/C/man2/mmap2.2:65 build/C/man2/mprotect.2:94 build/C/man2/mremap.2:151 build/C/man2/msync.2:80 build/C/man2/posix_fadvise.2:94 build/C/man3/posix_fallocate.3:81 build/C/man3/posix_memalign.3:158 build/C/man2/readahead.2:77 build/C/man2/remap_file_pages.2:140 build/C/man2/remap_file_pages.2:147 build/C/man3/shm_open.3:213 build/C/man2/shmctl.2:328 build/C/man2/shmget.2:207 build/C/man2/shmget.2:215 build/C/man2/shmop.2:197 build/C/man2/shmop.2:220 build/C/man2/subpage_prot.2:77 build/C/man2/sync_file_range.2:152
525 #: build/C/man2/cacheflush.2:75
526 msgid "I<cache> is not one of B<ICACHE>, B<DCACHE>, or B<BCACHE>."
529 #. FIXME The cacheflush() system call was only on MIPS back in 1.2 days,
530 #. but by now it is on a number of other architectures (but not i386).
531 #. Investigate the details and update this page.
532 #. Irix 6.5 appears to have a cacheflush() syscall -- mtk
534 #: build/C/man2/cacheflush.2:82
536 "This Linux-specific system call is available only on MIPS-based systems. It "
537 "should not be used in programs intended to be portable."
541 #: build/C/man2/cacheflush.2:89
543 "The current implementation ignores the I<addr> and I<nbytes> arguments. "
544 "Therefore, the whole cache is always flushed."
548 #: build/C/man2/fallocate.2:11
554 #: build/C/man2/fallocate.2:11 build/C/man3/mallopt.3:26 build/C/man2/shmop.2:41
560 #: build/C/man2/fallocate.2:14
561 msgid "fallocate - manipulate file space"
565 #: build/C/man2/fallocate.2:18 build/C/man2/readahead.2:35
568 "B<#define _GNU_SOURCE> /* See feature_test_macros(7) */\n"
569 "B<#include E<lt>fcntl.hE<gt>>\n"
573 #: build/C/man2/fallocate.2:21
576 "B<int fallocate(int >I<fd>B<, int >I<mode>B<, off_t >I<offset>B<, off_t "
581 #: build/C/man2/fallocate.2:27
583 "This is a nonportable, Linux-specific system call. For the portable, "
584 "POSIX.1-specified method of ensuring that space is allocated for a file, see "
585 "B<posix_fallocate>(3)."
589 #: build/C/man2/fallocate.2:37
591 "B<fallocate>() allows the caller to directly manipulate the allocated disk "
592 "space for the file referred to by I<fd> for the byte range starting at "
593 "I<offset> and continuing for I<len> bytes."
597 #: build/C/man2/fallocate.2:42
599 "The I<mode> argument determines the operation to be performed on the given "
600 "range. Details of the supported operations are given in the subsections "
605 #: build/C/man2/fallocate.2:42
607 msgid "Allocating disk space"
611 #: build/C/man2/fallocate.2:65
613 "The default operation (i.e., I<mode> is zero) of B<fallocate>() allocates "
614 "the disk space within the range specified by I<offset> and I<len>. The file "
615 "size (as reported by B<stat>(2)) will be changed if I<offset>+I<len> is "
616 "greater than the file size. Any subregion within the range specified by "
617 "I<offset> and I<len> that did not contain data before the call will be "
618 "initialized to zero. This default behavior closely resembles the behavior "
619 "of the B<posix_fallocate>(3) library function, and is intended as a method "
620 "of optimally implementing that function."
624 #: build/C/man2/fallocate.2:71
626 "After a successful call, subsequent writes into the range specified by "
627 "I<offset> and I<len> are guaranteed not to fail because of lack of disk "
632 #: build/C/man2/fallocate.2:82
634 "If the B<FALLOC_FL_KEEP_SIZE> flag is specified in I<mode>, the behavior of "
635 "the call is similar, but the file size will not be changed even if "
636 "I<offset>+I<len> is greater than the file size. Preallocating zeroed blocks "
637 "beyond the end of the file in this manner is useful for optimizing append "
642 #: build/C/man2/fallocate.2:86
644 "Because allocation is done in block size chunks, B<fallocate>() may "
645 "allocate a larger range of disk space than was specified."
649 #: build/C/man2/fallocate.2:86
651 msgid "Deallocating file space"
655 #: build/C/man2/fallocate.2:101
657 "Specifying the B<FALLOC_FL_PUNCH_HOLE> flag (available since Linux 2.6.38) "
658 "in I<mode> deallocates space (i.e., creates a hole) in the byte range "
659 "starting at I<offset> and continuing for I<len> bytes. Within the specified "
660 "range, partial filesystem blocks are zeroed, and whole filesystem blocks are "
661 "removed from the file. After a successful call, subsequent reads from this "
662 "range will return zeroes."
666 #: build/C/man2/fallocate.2:112
668 "The B<FALLOC_FL_PUNCH_HOLE> flag must be ORed with B<FALLOC_FL_KEEP_SIZE> in "
669 "I<mode>; in other words, even when punching off the end of the file, the "
670 "file size (as reported by B<stat>(2)) does not change."
674 #: build/C/man2/fallocate.2:117
676 "Not all filesystems support B<FALLOC_FL_PUNCH_HOLE>; if a filesystem doesn't "
677 "support the operation, an error is returned. The operation is supported on "
678 "at least the following filesystems:"
682 #: build/C/man2/fallocate.2:117 build/C/man2/fallocate.2:119 build/C/man2/fallocate.2:122 build/C/man2/fallocate.2:124 build/C/man2/fallocate.2:222 build/C/man2/fallocate.2:225 build/C/man2/madvise.2:286 build/C/man2/madvise.2:292 build/C/man2/madvise.2:295 build/C/man2/madvise.2:298 build/C/man2/madvise.2:301 build/C/man3/mallopt.3:235 build/C/man3/mallopt.3:241 build/C/man2/shmop.2:62 build/C/man2/shmop.2:68 build/C/man2/shmop.2:80
688 #: build/C/man2/fallocate.2:119
689 msgid "XFS (since Linux 2.6.38)"
692 #. commit a4bb6b64e39abc0e41ca077725f2a72c868e7622
694 #: build/C/man2/fallocate.2:122
695 msgid "ext4 (since Linux 3.0)"
699 #: build/C/man2/fallocate.2:124
700 msgid "Btrfs (since Linux 3.7)"
703 #. commit 83e4fa9c16e4af7122e31be3eca5d57881d236fe
705 #: build/C/man2/fallocate.2:127
706 msgid "tmpfs (since Linux 3.5)"
710 #: build/C/man2/fallocate.2:127
712 msgid "Collapsing file space"
715 #. commit 00f5e61998dd17f5375d9dfc01331f104b83f841
717 #: build/C/man2/fallocate.2:147
719 "Specifying the B<FALLOC_FL_COLLAPSE_RANGE> flag (available since Linux 3.15) "
720 "in I<mode> removes a byte range from a file, without leaving a hole. The "
721 "byte range to be collapsed starts at I<offset> and continues for I<len> "
722 "bytes. At the completion of the operation, the contents of the file "
723 "starting at the location I<offset+len> will be appended at the location "
724 "I<offset>, and the file will be I<len> bytes smaller."
728 #: build/C/man2/fallocate.2:161
730 "A filesystem may place limitations on the granularity of the operation, in "
731 "order to ensure efficient implementation. Typically, I<offset> and I<len> "
732 "must be a multiple of the filesystem logical block size, which varies "
733 "according to the filesystem type and configuration. If a filesystem has "
734 "such a requirement, B<fallocate>() will fail with the error B<EINVAL> if "
735 "this requirement is violated."
739 #: build/C/man2/fallocate.2:170
741 "If the region specified by I<offset> plus I<len> reaches or passes the end "
742 "of file, an error is returned; instead, use B<ftruncate>(2) to truncate a "
747 #: build/C/man2/fallocate.2:175
749 "No other flags may be specified in I<mode> in conjunction with "
750 "B<FALLOC_FL_COLLAPSE_RANGE>."
753 #. commit 9eb79482a97152930b113b51dff530aba9e28c8e
754 #. commit e1d8fb88a64c1f8094b9f6c3b6d2d9e6719c970d
756 #: build/C/man2/fallocate.2:183
758 "As at Linux 3.15, B<FALLOC_FL_COLLAPSE_RANGE> is supported by ext4 (only for "
759 "extent-based files) and XFS."
763 #: build/C/man2/fallocate.2:183
765 msgid "Zeroing file space"
768 #. commit 409332b65d3ed8cfa7a8030f1e9d52f372219642
770 #: build/C/man2/fallocate.2:199
772 "Specifying the B<FALLOC_FL_ZERO_RANGE> flag (available since Linux 3.14) in "
773 "I<mode> zeroes space in the byte range starting at I<offset> and continuing "
774 "for I<len> bytes. Within the specified range, blocks are preallocated for "
775 "the regions that span the holes in the file. After a successful call, "
776 "subsequent reads from this range will return zeroes."
780 #: build/C/man2/fallocate.2:205
782 "Zeroing is done within the filesystem preferably by converting the range "
783 "into unwritten extents. This approach means that the specified range will "
784 "not be physically zeroed out on the device (except for partial blocks at the "
785 "either end of the range), and I/O is (otherwise) required only to update "
790 #: build/C/man2/fallocate.2:217
792 "If the B<FALLOC_FL_KEEP_SIZE> flag is additionally specified in I<mode>, the "
793 "behavior of the call is similar, but the file size will not be changed even "
794 "if I<offset>+I<len> is greater than the file size. This behavior is the "
795 "same as when preallocating space with B<FALLOC_FL_KEEP_SIZE> specified."
799 #: build/C/man2/fallocate.2:222
801 "Not all filesystems support B<FALLOC_FL_ZERO_RANGE>; if a filesystem doesn't "
802 "support the operation, an error is returned. The operation is supported on "
803 "at least the following filesystems:"
806 #. commit 376ba313147b4172f3e8cf620b9fb591f3e8cdfa
808 #: build/C/man2/fallocate.2:225
809 msgid "XFS (since Linux 3.14)"
812 #. commit b8a8684502a0fc852afa0056c6bb2a9273f6fcc0
814 #: build/C/man2/fallocate.2:228
815 msgid "ext4, for extent-based files (since Linux 3.14)"
819 #: build/C/man2/fallocate.2:235
821 "On success, B<fallocate>() returns zero. On error, -1 is returned and "
822 "I<errno> is set to indicate the error."
826 #: build/C/man2/fallocate.2:236 build/C/man2/madvise.2:279 build/C/man2/mmap.2:415 build/C/man2/posix_fadvise.2:91 build/C/man3/posix_fallocate.3:73 build/C/man2/readahead.2:73 build/C/man2/sync_file_range.2:148
832 #: build/C/man2/fallocate.2:240 build/C/man3/posix_fallocate.3:77
833 msgid "I<fd> is not a valid file descriptor, or is not opened for writing."
837 #: build/C/man2/fallocate.2:240 build/C/man3/posix_fallocate.3:77
843 #: build/C/man2/fallocate.2:244
844 msgid "I<offset>+I<len> exceeds the maximum file size."
848 #: build/C/man2/fallocate.2:244
854 #: build/C/man2/fallocate.2:247
855 msgid "A signal was caught during execution."
859 #: build/C/man2/fallocate.2:259 build/C/man3/posix_fallocate.3:87
860 msgid "I<offset> was less than 0, or I<len> was less than or equal to 0."
864 #: build/C/man2/fallocate.2:269
866 "I<mode> is B<FALLOC_FL_COLLAPSE_RANGE> and the range specified by I<offset> "
867 "plus I<len> reaches or passes the end of the file."
871 #: build/C/man2/fallocate.2:279
873 "I<mode> is B<FALLOC_FL_COLLAPSE_RANGE>, but either I<offset> or I<len> is "
874 "not a multiple of the filesystem block size."
878 #: build/C/man2/fallocate.2:287
880 "I<mode> contains both B<FALLOC_FL_COLLAPSE_RANGE> and other flags; no other "
881 "flags are permitted with B<FALLOC_FL_COLLAPSE_RANGE>."
884 #. There was a inconsistency in 3.15-rc1, that should be resolved so that all
885 #. filesystems use this error for this case. (Tytso says ex4 will change.)
886 #. http://thread.gmane.org/gmane.comp.file-systems.xfs.general/60485/focus=5521
887 #. From: Michael Kerrisk (man-pages <mtk.manpages@...>
888 #. Subject: Re: [PATCH v5 10/10] manpage: update FALLOC_FL_COLLAPSE_RANGE flag in fallocate
889 #. Newsgroups: gmane.linux.man, gmane.linux.file-systems
890 #. Date: 2014-04-17 13:40:05 GMT
892 #: build/C/man2/fallocate.2:304
894 "I<mode> is B<FALLOC_FL_COLLAPSE_RANGE> or B<FALLOC_FL_ZERO_RANGE>, but the "
895 "file referred to by I<fd> is not a regular file."
899 #: build/C/man2/fallocate.2:304 build/C/man2/madvise.2:310 build/C/man2/sync_file_range.2:160
905 #: build/C/man2/fallocate.2:307
906 msgid "An I/O error occurred while reading from or writing to a filesystem."
910 #: build/C/man2/fallocate.2:307 build/C/man2/mmap.2:450 build/C/man3/posix_fallocate.3:87
916 #: build/C/man2/fallocate.2:314
918 "I<fd> does not refer to a regular file or a directory. (If I<fd> is a pipe "
919 "or FIFO, a different error results.)"
923 #: build/C/man2/fallocate.2:314 build/C/man3/posix_fallocate.3:91 build/C/man2/shmget.2:233 build/C/man2/sync_file_range.2:166
929 #: build/C/man2/fallocate.2:319 build/C/man3/posix_fallocate.3:96
931 "There is not enough space left on the device containing the file referred to "
936 #: build/C/man2/fallocate.2:323
937 msgid "This kernel does not implement B<fallocate>()."
941 #: build/C/man2/fallocate.2:323
943 msgid "B<EOPNOTSUPP>"
947 #: build/C/man2/fallocate.2:332
949 "The filesystem containing the file referred to by I<fd> does not support "
950 "this operation; or the I<mode> is not supported by the filesystem containing "
951 "the file referred to by I<fd>."
955 #: build/C/man2/fallocate.2:332 build/C/man2/mlock.2:143 build/C/man2/mlock.2:182 build/C/man2/mmap.2:458 build/C/man2/shmctl.2:353 build/C/man2/shmget.2:241
961 #: build/C/man2/fallocate.2:350
963 "The file referred to by I<fd> is marked immutable (see B<chattr>(1)). Or: "
964 "I<mode> specifies B<FALLOC_FL_PUNCH_HOLE> or B<FALLOC_FL_COLLAPSE_RANGE> and "
965 "the file referred to by I<fd> is marked append-only (see B<chattr>(1))."
969 #: build/C/man2/fallocate.2:350 build/C/man2/posix_fadvise.2:97 build/C/man3/posix_fallocate.3:96 build/C/man2/sync_file_range.2:169
975 #: build/C/man2/fallocate.2:354
976 msgid "I<fd> refers to a pipe or FIFO."
980 #: build/C/man2/fallocate.2:354 build/C/man2/mmap.2:467
986 #: build/C/man2/fallocate.2:362
988 "I<mode> specifies B<FALLOC_FL_COLLAPSE_RANGE>, but the file referred to by "
989 "I<fd> is currently being executed."
993 #: build/C/man2/fallocate.2:362 build/C/man2/madvise.2:325 build/C/man3/malloc_info.3:60 build/C/man3/mcheck.3:134 build/C/man2/mmap2.2:74 build/C/man2/posix_fadvise.2:107 build/C/man3/posix_fallocate.3:100 build/C/man3/posix_memalign.3:167 build/C/man2/readahead.2:83 build/C/man2/remap_file_pages.2:156 build/C/man3/shm_open.3:249 build/C/man2/subpage_prot.2:90 build/C/man2/sync_file_range.2:177
998 #. See http://sourceware.org/bugzilla/show_bug.cgi?id=14964
1000 #: build/C/man2/fallocate.2:370
1002 "B<fallocate>() is available on Linux since kernel 2.6.23. Support is "
1003 "provided by glibc since version 2.10. The B<FALLOC_FL_*> flags are defined "
1004 "in glibc headers only since version 2.18."
1008 #: build/C/man2/fallocate.2:373
1009 msgid "B<fallocate>() is Linux-specific."
1013 #: build/C/man2/fallocate.2:378
1014 msgid "B<fallocate>(1), B<ftruncate>(2), B<posix_fadvise>(3), B<posix_fallocate>(3)"
1018 #: build/C/man2/madvise.2:35
1024 #: build/C/man2/madvise.2:35 build/C/man2/posix_fadvise.2:28
1030 #: build/C/man2/madvise.2:38
1031 msgid "madvise - give advice about use of memory"
1035 #: build/C/man2/madvise.2:40 build/C/man2/msync.2:30 build/C/man3/shm_open.3:31
1036 msgid "B<#include E<lt>sys/mman.hE<gt>>"
1040 #: build/C/man2/madvise.2:42
1041 msgid "B<int madvise(void *>I<addr>B<, size_t >I<length>B<, int >I<advice>B<);>"
1045 #: build/C/man2/madvise.2:46 build/C/man2/posix_fadvise.2:43 build/C/man3/posix_fallocate.3:39 build/C/man3/posix_memalign.3:49
1046 msgid "Feature Test Macro Requirements for glibc (see B<feature_test_macros>(7)):"
1050 #: build/C/man2/madvise.2:50
1051 msgid "B<madvise>(): _BSD_SOURCE"
1055 #: build/C/man2/madvise.2:68
1057 "The B<madvise>() system call advises the kernel about how to handle paging "
1058 "input/output in the address range beginning at address I<addr> and with size "
1059 "I<length> bytes. It allows an application to tell the kernel how it expects "
1060 "to use some mapped or shared memory areas, so that the kernel can choose "
1061 "appropriate read-ahead and caching techniques. This call does not influence "
1062 "the semantics of the application (except in the case of B<MADV_DONTNEED>), "
1063 "but may influence its performance. The kernel is free to ignore the advice."
1067 #: build/C/man2/madvise.2:72
1068 msgid "The advice is indicated in the I<advice> argument which can be"
1072 #: build/C/man2/madvise.2:72
1074 msgid "B<MADV_NORMAL>"
1078 #: build/C/man2/madvise.2:76
1079 msgid "No special treatment. This is the default."
1083 #: build/C/man2/madvise.2:76
1085 msgid "B<MADV_RANDOM>"
1089 #: build/C/man2/madvise.2:80
1091 "Expect page references in random order. (Hence, read ahead may be less "
1092 "useful than normally.)"
1096 #: build/C/man2/madvise.2:80
1098 msgid "B<MADV_SEQUENTIAL>"
1102 #: build/C/man2/madvise.2:85
1104 "Expect page references in sequential order. (Hence, pages in the given "
1105 "range can be aggressively read ahead, and may be freed soon after they are "
1110 #: build/C/man2/madvise.2:85
1112 msgid "B<MADV_WILLNEED>"
1116 #: build/C/man2/madvise.2:89
1118 "Expect access in the near future. (Hence, it might be a good idea to read "
1119 "some pages ahead.)"
1123 #: build/C/man2/madvise.2:89
1125 msgid "B<MADV_DONTNEED>"
1129 #: build/C/man2/madvise.2:100
1131 "Do not expect access in the near future. (For the time being, the "
1132 "application is finished with the given range, so the kernel can free "
1133 "resources associated with it.) Subsequent accesses of pages in this range "
1134 "will succeed, but will result either in reloading of the memory contents "
1135 "from the underlying mapped file (see B<mmap>(2)) or zero-fill-on-demand "
1136 "pages for mappings without an underlying file."
1140 #: build/C/man2/madvise.2:100
1142 msgid "B<MADV_REMOVE> (since Linux 2.6.16)"
1146 #. Databases want to use this feature to drop a section of their
1147 #. bufferpool (shared memory segments) - without writing back to
1148 #. disk/swap space. This feature is also useful for supporting
1149 #. hot-plug memory on UML.
1151 #: build/C/man2/madvise.2:113
1153 "Free up a given range of pages and its associated backing store. Currently, "
1154 "only shmfs/tmpfs supports this; other filesystems return with the error "
1159 #: build/C/man2/madvise.2:113
1161 msgid "B<MADV_DONTFORK> (since Linux 2.6.16)"
1164 #. See http://lwn.net/Articles/171941/
1165 #. [PATCH] madvise MADV_DONTFORK/MADV_DOFORK
1166 #. Currently, copy-on-write may change the physical address of
1167 #. a page even if the user requested that the page is pinned in
1168 #. memory (either by mlock or by get_user_pages). This happens
1169 #. if the process forks meanwhile, and the parent writes to that
1170 #. page. As a result, the page is orphaned: in case of
1171 #. get_user_pages, the application will never see any data hardware
1172 #. DMA's into this page after the COW. In case of mlock'd memory,
1173 #. the parent is not getting the realtime/security benefits of mlock.
1175 #. In particular, this affects the Infiniband modules which do DMA from
1176 #. and into user pages all the time.
1178 #. This patch adds madvise options to control whether memory range is
1179 #. inherited across fork. Useful e.g. for when hardware is doing DMA
1180 #. from/into these pages. Could also be useful to an application
1181 #. wanting to speed up its forks by cutting large areas out of
1184 #. SEE ALSO: http://lwn.net/Articles/171941/
1185 #. "Tweaks to madvise() and posix_fadvise()", 14 Feb 2006
1187 #: build/C/man2/madvise.2:144
1189 "Do not make the pages in this range available to the child after a "
1190 "B<fork>(2). This is useful to prevent copy-on-write semantics from changing "
1191 "the physical location of a page(s) if the parent writes to it after a "
1192 "B<fork>(2). (Such page relocations cause problems for hardware that DMAs "
1193 "into the page(s).)"
1197 #: build/C/man2/madvise.2:144
1199 msgid "B<MADV_DOFORK> (since Linux 2.6.16)"
1203 #: build/C/man2/madvise.2:150
1205 "Undo the effect of B<MADV_DONTFORK>, restoring the default behavior, whereby "
1206 "a mapping is inherited across B<fork>(2)."
1210 #: build/C/man2/madvise.2:150
1212 msgid "B<MADV_HWPOISON> (since Linux 2.6.32)"
1216 #: build/C/man2/madvise.2:162
1218 "Poison a page and handle it like a hardware memory corruption. This "
1219 "operation is available only for privileged (B<CAP_SYS_ADMIN>) processes. "
1220 "This operation may result in the calling process receiving a B<SIGBUS> and "
1221 "the page being unmapped. This feature is intended for testing of memory "
1222 "error-handling code; it is available only if the kernel was configured with "
1223 "B<CONFIG_MEMORY_FAILURE>."
1227 #: build/C/man2/madvise.2:162
1229 msgid "B<MADV_SOFT_OFFLINE> (since Linux 2.6.33)"
1233 #: build/C/man2/madvise.2:180
1235 "Soft offline the pages in the range specified by I<addr> and I<length>. The "
1236 "memory of each page in the specified range is preserved (i.e., when next "
1237 "accessed, the same content will be visible, but in a new physical page "
1238 "frame), and the original page is offlined (i.e., no longer used, and taken "
1239 "out of normal memory management). The effect of the B<MADV_SOFT_OFFLINE> "
1240 "operation is invisible to (i.e., does not change the semantics of) the "
1241 "calling process. This feature is intended for testing of memory "
1242 "error-handling code; it is available only if the kernel was configured with "
1243 "B<CONFIG_MEMORY_FAILURE>."
1247 #: build/C/man2/madvise.2:180
1249 msgid "B<MADV_MERGEABLE> (since Linux 2.6.32)"
1253 #: build/C/man2/madvise.2:205
1255 "Enable Kernel Samepage Merging (KSM) for the pages in the range specified by "
1256 "I<addr> and I<length>. The kernel regularly scans those areas of user "
1257 "memory that have been marked as mergeable, looking for pages with identical "
1258 "content. These are replaced by a single write-protected page (which is "
1259 "automatically copied if a process later wants to update the content of the "
1260 "page). KSM merges only private anonymous pages (see B<mmap>(2)). The KSM "
1261 "feature is intended for applications that generate many instances of the "
1262 "same data (e.g., virtualization systems such as KVM). It can consume a lot "
1263 "of processing power; use with care. See the Linux kernel source file "
1264 "I<Documentation/vm/ksm.txt> for more details. The B<MADV_MERGEABLE> and "
1265 "B<MADV_UNMERGEABLE> operations are available only if the kernel was "
1266 "configured with B<CONFIG_KSM>."
1270 #: build/C/man2/madvise.2:205
1272 msgid "B<MADV_UNMERGEABLE> (since Linux 2.6.32)"
1276 #: build/C/man2/madvise.2:214
1278 "Undo the effect of an earlier B<MADV_MERGEABLE> operation on the specified "
1279 "address range; KSM unmerges whatever pages it had merged in the address "
1280 "range specified by I<addr> and I<length>."
1284 #: build/C/man2/madvise.2:214
1286 msgid "B<MADV_HUGEPAGE> (since Linux 2.6.38)"
1289 #. http://lwn.net/Articles/358904/
1290 #. https://lwn.net/Articles/423584/
1292 #: build/C/man2/madvise.2:243
1294 "Enables Transparent Huge Pages (THP) for pages in the range specified by "
1295 "I<addr> and I<length>. Currently, Transparent Huge Pages work only with "
1296 "private anonymous pages (see B<mmap>(2)). The kernel will regularly scan "
1297 "the areas marked as huge page candidates to replace them with huge pages. "
1298 "The kernel will also allocate huge pages directly when the region is "
1299 "naturally aligned to the huge page size (see B<posix_memalign>(2)). This "
1300 "feature is primarily aimed at applications that use large mappings of data "
1301 "and access large regions of that memory at a time (e.g., virtualization "
1302 "systems such as QEMU). It can very easily waste memory (e.g., a 2MB mapping "
1303 "that only ever accesses 1 byte will result in 2MB of wired memory instead of "
1304 "one 4KB page). See the Linux kernel source file "
1305 "I<Documentation/vm/transhuge.txt> for more details. The B<MADV_HUGEPAGE> "
1306 "and B<MADV_NOHUGEPAGE> operations are available only if the kernel was "
1307 "configured with B<CONFIG_TRANSPARENT_HUGEPAGE>."
1311 #: build/C/man2/madvise.2:243
1313 msgid "B<MADV_NOHUGEPAGE> (since Linux 2.6.38)"
1317 #: build/C/man2/madvise.2:250
1319 "Ensures that memory in the address range specified by I<addr> and I<length> "
1320 "will not be collapsed into huge pages."
1324 #: build/C/man2/madvise.2:250
1326 msgid "B<MADV_DONTDUMP> (since Linux 3.4)"
1330 #: build/C/man2/madvise.2:264
1332 "Exclude from a core dump those pages in the range specified by I<addr> and "
1333 "I<length>. This is useful in applications that have large areas of memory "
1334 "that are known not to be useful in a core dump. The effect of "
1335 "B<MADV_DONTDUMP> takes precedence over the bit mask that is set via the "
1336 "I</proc/PID/coredump_filter> file (see B<core>(5))."
1340 #: build/C/man2/madvise.2:264
1342 msgid "B<MADV_DODUMP> (since Linux 3.4)"
1346 #: build/C/man2/madvise.2:268
1347 msgid "Undo the effect of an earlier B<MADV_DONTDUMP>."
1351 #: build/C/man2/madvise.2:275
1353 "On success B<madvise>() returns zero. On error, it returns -1 and I<errno> "
1354 "is set appropriately."
1358 #: build/C/man2/madvise.2:276 build/C/man2/mlock.2:154 build/C/man2/mmap.2:411 build/C/man2/mremap.2:136
1364 #: build/C/man2/madvise.2:279
1365 msgid "A kernel resource was temporarily unavailable."
1369 #: build/C/man2/madvise.2:282
1370 msgid "The map exists, but the area maps something that isn't a file."
1374 #: build/C/man2/madvise.2:285
1375 msgid "This error can occur for the following reasons:"
1381 #: build/C/man2/madvise.2:292
1382 msgid "The value I<len> is negative."
1386 #: build/C/man2/madvise.2:295
1387 msgid "I<addr> is not page-aligned."
1391 #: build/C/man2/madvise.2:298
1392 msgid "I<advice> is not a valid value"
1396 #: build/C/man2/madvise.2:301
1398 "The application is attempting to release locked or shared pages (with "
1399 "B<MADV_DONTNEED>)."
1403 #: build/C/man2/madvise.2:309
1405 "B<MADV_MERGEABLE> or B<MADV_UNMERGEABLE> was specified in I<advice>, but the "
1406 "kernel was not configured with B<CONFIG_KSM>."
1410 #: build/C/man2/madvise.2:316
1412 "(for B<MADV_WILLNEED>) Paging in this area would exceed the process's "
1413 "maximum resident set size."
1417 #: build/C/man2/madvise.2:316 build/C/man2/madvise.2:321 build/C/man2/mlock.2:123 build/C/man2/mlock.2:131 build/C/man2/mlock.2:169 build/C/man2/mmap.2:454 build/C/man2/mprotect.2:99 build/C/man2/mprotect.2:102 build/C/man2/mremap.2:179 build/C/man2/msync.2:93 build/C/man3/posix_memalign.3:164 build/C/man2/shmctl.2:337 build/C/man2/shmget.2:230 build/C/man2/shmop.2:211 build/C/man2/subpage_prot.2:87 build/C/man2/sync_file_range.2:163
1423 #: build/C/man2/madvise.2:321
1424 msgid "(for B<MADV_WILLNEED>) Not enough memory: paging in failed."
1428 #: build/C/man2/madvise.2:325
1430 "Addresses in the specified range are not currently mapped, or are outside "
1431 "the address space of the process."
1434 #. commit d3ac21cacc24790eb45d735769f35753f5b56ceb
1436 #: build/C/man2/madvise.2:332
1438 "Since Linux 3.18, support for this system call is optional, depending on the "
1439 "setting of the B<CONFIG_ADVISE_SYSCALLS> configuration option."
1442 #. FIXME . Write a posix_madvise(3) page.
1444 #: build/C/man2/madvise.2:345
1446 "POSIX.1b. POSIX.1-2001 describes B<posix_madvise>(3) with constants "
1447 "B<POSIX_MADV_NORMAL>, B<POSIX_MADV_RANDOM>, and so on, with a behavior close "
1448 "to that described here. There is a similar B<posix_fadvise>(2) for file "
1453 #: build/C/man2/madvise.2:354
1455 "B<MADV_REMOVE>, B<MADV_DONTFORK>, B<MADV_DOFORK>, B<MADV_HWPOISON>, "
1456 "B<MADV_MERGEABLE>, and B<MADV_UNMERGEABLE> are Linux-specific."
1460 #: build/C/man2/madvise.2:355 build/C/man2/mlock.2:274 build/C/man2/shmget.2:371
1466 #: build/C/man2/madvise.2:363
1468 "The current Linux implementation (2.4.0) views this system call more as a "
1469 "command than as advice and hence may return an error when it cannot do what "
1470 "it usually would do in response to this advice. (See the ERRORS description "
1471 "above.) This is nonstandard behavior."
1477 #. function first appeared in 4.4BSD.
1479 #: build/C/man2/madvise.2:379
1481 "The Linux implementation requires that the address I<addr> be page-aligned, "
1482 "and allows I<length> to be zero. If there are some parts of the specified "
1483 "address range that are not mapped, the Linux version of B<madvise>() "
1484 "ignores them and applies the call to the rest (but returns B<ENOMEM> from "
1485 "the system call, as it should)."
1489 #: build/C/man2/madvise.2:388
1491 "B<getrlimit>(2), B<mincore>(2), B<mmap>(2), B<mprotect>(2), B<msync>(2), "
1492 "B<munmap>(2), B<prctl>(2), B<core>(5)"
1496 #: build/C/man3/mallinfo.3:26
1502 #: build/C/man3/mallinfo.3:26 build/C/man3/malloc_stats.3:26
1508 #: build/C/man3/mallinfo.3:29
1509 msgid "mallinfo - obtain memory allocation information"
1513 #: build/C/man3/mallinfo.3:31 build/C/man3/malloc_stats.3:31 build/C/man3/malloc_trim.3:31 build/C/man3/malloc_usable_size.3:30 build/C/man3/mallopt.3:31
1514 msgid "B<#include E<lt>malloc.hE<gt>>"
1518 #: build/C/man3/mallinfo.3:33
1519 msgid "B<struct mallinfo mallinfo(void);>"
1523 #: build/C/man3/mallinfo.3:41
1525 "The B<mallinfo>() function returns a copy of a structure containing "
1526 "information about memory allocations performed by B<malloc>(3) and related "
1527 "functions. This structure is defined as follows:"
1531 #: build/C/man3/mallinfo.3:56
1534 "struct mallinfo {\n"
1535 " int arena; /* Non-mmapped space allocated (bytes) */\n"
1536 " int ordblks; /* Number of free chunks */\n"
1537 " int smblks; /* Number of free fastbin blocks */\n"
1538 " int hblks; /* Number of mmapped regions */\n"
1539 " int hblkhd; /* Space allocated in mmapped regions (bytes) */\n"
1540 " int usmblks; /* Maximum total allocated space (bytes) */\n"
1541 " int fsmblks; /* Space in freed fastbin blocks (bytes) */\n"
1542 " int uordblks; /* Total allocated space (bytes) */\n"
1543 " int fordblks; /* Total free space (bytes) */\n"
1544 " int keepcost; /* Top-most, releasable space (bytes) */\n"
1549 #: build/C/man3/mallinfo.3:62
1550 msgid "The fields of the I<mallinfo> structure contain the following information:"
1554 #: build/C/man3/mallinfo.3:62
1560 #: build/C/man3/mallinfo.3:68
1562 "The total amount of memory allocated by means other than B<mmap>(2) (i.e., "
1563 "memory allocated on the heap). This figure includes both in-use blocks and "
1564 "blocks on the free list."
1568 #: build/C/man3/mallinfo.3:68
1574 #: build/C/man3/mallinfo.3:71
1575 msgid "The number of ordinary (i.e., non-fastbin) free blocks."
1579 #: build/C/man3/mallinfo.3:71
1585 #: build/C/man3/mallinfo.3:75
1586 msgid "The number of fastbin free blocks (see B<mallopt>(3))."
1590 #: build/C/man3/mallinfo.3:75
1596 #: build/C/man3/mallinfo.3:83
1598 "The number of blocks currently allocated using B<mmap>(2). (See the "
1599 "discussion of B<M_MMAP_THRESHOLD> in B<mallopt>(3).)"
1603 #: build/C/man3/mallinfo.3:83
1609 #: build/C/man3/mallinfo.3:87
1610 msgid "The number of bytes in blocks currently allocated using B<mmap>(2)."
1614 #: build/C/man3/mallinfo.3:87
1620 #: build/C/man3/mallinfo.3:92
1622 "The \"highwater mark\" for allocated space\\(emthat is, the maximum amount "
1623 "of space that was ever allocated. This field is maintained only in "
1624 "nonthreading environments."
1628 #: build/C/man3/mallinfo.3:92
1634 #: build/C/man3/mallinfo.3:95
1635 msgid "The total number of bytes in fastbin free blocks."
1639 #: build/C/man3/mallinfo.3:95
1645 #: build/C/man3/mallinfo.3:98
1646 msgid "The total number of bytes used by in-use allocations."
1650 #: build/C/man3/mallinfo.3:98
1656 #: build/C/man3/mallinfo.3:101
1657 msgid "The total number of bytes in free blocks."
1661 #: build/C/man3/mallinfo.3:101
1667 #. Available already in glibc 2.0, possibly earlier
1669 #: build/C/man3/mallinfo.3:110
1671 "The total amount of releasable free space at the top of the heap. This is "
1672 "the maximum number of bytes that could ideally (i.e., ignoring page "
1673 "alignment restrictions, and so on) be released by B<malloc_trim>(3)."
1677 #: build/C/man3/mallinfo.3:114
1679 "This function is not specified by POSIX or the C standards. A similar "
1680 "function exists on many System V derivatives, and was specified in the SVID."
1683 #. FIXME . http://sourceware.org/bugzilla/show_bug.cgi?id=208
1684 #. See the 24 Aug 2011 mail by Paul Pluzhnikov:
1685 #. "[patch] Fix mallinfo() to accumulate results for all arenas"
1686 #. on libc-alpha@sourceware.org
1688 #: build/C/man3/mallinfo.3:126
1690 "B<Information is returned for only the main memory allocation area.> "
1691 "Allocations in other arenas are excluded. See B<malloc_stats>(3) and "
1692 "B<malloc_info>(3) for alternatives that include information about other "
1697 #: build/C/man3/mallinfo.3:134
1699 "The fields of the I<mallinfo> structure are typed as I<int>. However, "
1700 "because some internal bookkeeping values may be of type I<long>, the "
1701 "reported values may wrap around zero and thus be inaccurate."
1705 #: build/C/man3/mallinfo.3:134 build/C/man3/malloc_hook.3:89 build/C/man3/malloc_info.3:84 build/C/man3/mallopt.3:454 build/C/man3/mcheck.3:159 build/C/man2/mmap.2:629 build/C/man2/mprotect.2:147 build/C/man3/mtrace.3:108
1711 #: build/C/man3/mallinfo.3:140
1713 "The program below employs B<mallinfo>() to retrieve memory allocation "
1714 "statistics before and after allocating and freeing some blocks of memory. "
1715 "The statistics are displayed on standard output."
1719 #: build/C/man3/mallinfo.3:144
1721 "The first two command-line arguments specify the number and size of blocks "
1722 "to be allocated with B<malloc>(3)."
1726 #: build/C/man3/mallinfo.3:158
1728 "The remaining three arguments specify which of the allocated blocks should "
1729 "be freed with B<free>(3). These three arguments are optional, and specify "
1730 "(in order): the step size to be used in the loop that frees blocks (the "
1731 "default is 1, meaning free all blocks in the range); the ordinal position of "
1732 "the first block to be freed (default 0, meaning the first allocated block); "
1733 "and a number one greater than the ordinal position of the last block to be "
1734 "freed (default is one greater than the maximum block number). If these "
1735 "three arguments are omitted, then the defaults cause all allocated blocks to "
1740 #: build/C/man3/mallinfo.3:162
1742 "In the following example run of the program, 1000 allocations of 100 bytes "
1743 "are performed, and then every second allocated block is freed:"
1747 #: build/C/man3/mallinfo.3:177
1750 "$ B<./a.out 1000 100 2>\n"
1751 "============== Before allocating blocks ==============\n"
1752 "Total non-mmapped bytes (arena): 0\n"
1753 "# of free chunks (ordblks): 1\n"
1754 "# of free fastbin blocks (smblks): 0\n"
1755 "# of mapped regions (hblks): 0\n"
1756 "Bytes in mapped regions (hblkhd): 0\n"
1757 "Max. total allocated space (usmblks): 0\n"
1758 "Free bytes held in fastbins (fsmblks): 0\n"
1759 "Total allocated space (uordblks): 0\n"
1760 "Total free space (fordblks): 0\n"
1761 "Topmost releasable block (keepcost): 0\n"
1765 #: build/C/man3/mallinfo.3:189
1768 "============== After allocating blocks ==============\n"
1769 "Total non-mmapped bytes (arena): 135168\n"
1770 "# of free chunks (ordblks): 1\n"
1771 "# of free fastbin blocks (smblks): 0\n"
1772 "# of mapped regions (hblks): 0\n"
1773 "Bytes in mapped regions (hblkhd): 0\n"
1774 "Max. total allocated space (usmblks): 0\n"
1775 "Free bytes held in fastbins (fsmblks): 0\n"
1776 "Total allocated space (uordblks): 104000\n"
1777 "Total free space (fordblks): 31168\n"
1778 "Topmost releasable block (keepcost): 31168\n"
1782 #: build/C/man3/mallinfo.3:201
1785 "============== After freeing blocks ==============\n"
1786 "Total non-mmapped bytes (arena): 135168\n"
1787 "# of free chunks (ordblks): 501\n"
1788 "# of free fastbin blocks (smblks): 0\n"
1789 "# of mapped regions (hblks): 0\n"
1790 "Bytes in mapped regions (hblkhd): 0\n"
1791 "Max. total allocated space (usmblks): 0\n"
1792 "Free bytes held in fastbins (fsmblks): 0\n"
1793 "Total allocated space (uordblks): 52000\n"
1794 "Total free space (fordblks): 83168\n"
1795 "Topmost releasable block (keepcost): 31168\n"
1799 #: build/C/man3/mallinfo.3:203 build/C/man3/malloc_info.3:167 build/C/man3/mallopt.3:520 build/C/man3/mcheck.3:176 build/C/man2/mmap.2:641 build/C/man2/mprotect.2:164
1801 msgid "Program source"
1805 #: build/C/man3/mallinfo.3:208
1808 "#include E<lt>malloc.hE<gt>\n"
1809 "#include \"tlpi_hdr.h\"\n"
1813 #: build/C/man3/mallinfo.3:213
1817 "display_mallinfo(void)\n"
1819 " struct mallinfo mi;\n"
1823 #: build/C/man3/mallinfo.3:215
1825 msgid " mi = mallinfo();\n"
1829 #: build/C/man3/mallinfo.3:227
1832 " printf(\"Total non-mmapped bytes (arena): %d\\en\", mi.arena);\n"
1833 " printf(\"# of free chunks (ordblks): %d\\en\", mi.ordblks);\n"
1834 " printf(\"# of free fastbin blocks (smblks): %d\\en\", mi.smblks);\n"
1835 " printf(\"# of mapped regions (hblks): %d\\en\", mi.hblks);\n"
1836 " printf(\"Bytes in mapped regions (hblkhd): %d\\en\", mi.hblkhd);\n"
1837 " printf(\"Max. total allocated space (usmblks): %d\\en\", mi.usmblks);\n"
1838 " printf(\"Free bytes held in fastbins (fsmblks): %d\\en\", mi.fsmblks);\n"
1839 " printf(\"Total allocated space (uordblks): %d\\en\", "
1841 " printf(\"Total free space (fordblks): %d\\en\", "
1843 " printf(\"Topmost releasable block (keepcost): %d\\en\", "
1849 #: build/C/man3/mallinfo.3:235
1853 "main(int argc, char *argv[])\n"
1855 "#define MAX_ALLOCS 2000000\n"
1856 " char *alloc[MAX_ALLOCS];\n"
1857 " int numBlocks, j, freeBegin, freeEnd, freeStep;\n"
1858 " size_t blockSize;\n"
1862 #: build/C/man3/mallinfo.3:239
1865 " if (argc E<lt> 3 || strcmp(argv[1], \"--help\") == 0)\n"
1866 " usageErr(\"%s num-blocks block-size [free-step [start-free \"\n"
1867 " \"[end-free]]]\\en\", argv[0]);\n"
1871 #: build/C/man3/mallinfo.3:245
1874 " numBlocks = atoi(argv[1]);\n"
1875 " blockSize = atoi(argv[2]);\n"
1876 " freeStep = (argc E<gt> 3) ? atoi(argv[3]) : 1;\n"
1877 " freeBegin = (argc E<gt> 4) ? atoi(argv[4]) : 0;\n"
1878 " freeEnd = (argc E<gt> 5) ? atoi(argv[5]) : numBlocks;\n"
1882 #: build/C/man3/mallinfo.3:248
1885 " printf(\"============== Before allocating blocks "
1886 "==============\\en\");\n"
1887 " display_mallinfo();\n"
1891 #: build/C/man3/mallinfo.3:252
1894 " for (j = 0; j E<lt> numBlocks; j++) {\n"
1895 " if (numBlocks E<gt>= MAX_ALLOCS)\n"
1896 " fatal(\"Too many allocations\");\n"
1900 #: build/C/man3/mallinfo.3:257
1903 " alloc[j] = malloc(blockSize);\n"
1904 " if (alloc[j] == NULL)\n"
1905 " errExit(\"malloc\");\n"
1910 #: build/C/man3/mallinfo.3:260
1913 " printf(\"\\en============== After allocating blocks "
1914 "==============\\en\");\n"
1915 " display_mallinfo();\n"
1919 #: build/C/man3/mallinfo.3:263
1922 " for (j = freeBegin; j E<lt> freeEnd; j += freeStep)\n"
1923 " free(alloc[j]);\n"
1927 #: build/C/man3/mallinfo.3:266
1930 " printf(\"\\en============== After freeing blocks "
1931 "==============\\en\");\n"
1932 " display_mallinfo();\n"
1936 #: build/C/man3/mallinfo.3:269 build/C/man3/malloc_info.3:255 build/C/man3/mallopt.3:553 build/C/man3/mcheck.3:203 build/C/man2/mmap.2:710
1939 " exit(EXIT_SUCCESS);\n"
1944 #: build/C/man3/mallinfo.3:279
1946 "B<mmap>(2), B<malloc>(3), B<malloc_info>(3), B<malloc_stats>(3), "
1947 "B<malloc_trim>(3), B<mallopt>(3)"
1951 #: build/C/man3/malloc_get_state.3:25
1953 msgid "MALLOC_GET_STATE"
1957 #: build/C/man3/malloc_get_state.3:25 build/C/man3/malloc_usable_size.3:25
1963 #: build/C/man3/malloc_get_state.3:28
1965 "malloc_get_state, malloc_set_state - record and restore state of malloc "
1970 #: build/C/man3/malloc_get_state.3:31 build/C/man3/malloc_hook.3:18 build/C/man3/malloc_info.3:31 build/C/man3/posix_memalign.3:41
1972 msgid "B<#include E<lt>malloc.hE<gt>>\n"
1976 #: build/C/man3/malloc_get_state.3:33
1978 msgid "B<void* malloc_get_state(void);>\n"
1982 #: build/C/man3/malloc_get_state.3:35
1984 msgid "B<int malloc_set_state(void *>I<state>B<);>\n"
1988 #: build/C/man3/malloc_get_state.3:53
1990 "The B<malloc_get_state>() function records the current state of all "
1991 "B<malloc>(3) internal bookkeeping variables (but not the actual contents of "
1992 "the heap or the state of B<malloc_hook>(3) functions pointers). The state "
1993 "is recorded in a system-dependent opaque data structure dynamically "
1994 "allocated via B<malloc>(3), and a pointer to that data structure is returned "
1995 "as the function result. (It is the caller's responsibility to B<free>(3) "
2000 #: build/C/man3/malloc_get_state.3:61
2002 "The B<malloc_set_state>() function restores the state of all B<malloc>(3) "
2003 "internal bookkeeping variables to the values recorded in the opaque data "
2004 "structure pointed to by I<state>."
2008 #: build/C/man3/malloc_get_state.3:68
2010 "On success, B<malloc_get_state>() returns a pointer to a newly allocated "
2011 "opaque data structure. On error (for example, memory could not be allocated "
2012 "for the data structure), B<malloc_get_state>() returns NULL."
2015 #. if(ms->magic != MALLOC_STATE_MAGIC) return -1;
2016 #. /* Must fail if the major version is too high. */
2017 #. if((ms->version & ~0xffl) > (MALLOC_STATE_VERSION & ~0xffl)) return -2;
2019 #: build/C/man3/malloc_get_state.3:86
2021 "On success, B<malloc_set_state>() returns 0. If the implementation detects "
2022 "that I<state> does not point to a correctly formed data structure, "
2023 "B<malloc_set_state>() returns -1. If the implementation detects that the "
2024 "version of the data structure referred to by I<state> is a more recent "
2025 "version than this implementation knows about, B<malloc_set_state>() returns "
2030 #: build/C/man3/malloc_get_state.3:88 build/C/man3/malloc_hook.3:82 build/C/man3/mcheck.3:147 build/C/man3/mtrace.3:80
2031 msgid "These functions are GNU extensions."
2035 #: build/C/man3/malloc_get_state.3:94
2037 "These functions are useful when using this B<malloc>(3) implementation as "
2038 "part of a shared library, and the heap contents are saved/restored via some "
2039 "other method. This technique is used by GNU Emacs to implement its "
2040 "\"dumping\" function."
2043 #. i.e., calls __malloc_check_init()
2044 #. i.e., malloc checking is not already in use
2045 #. and the caller requested malloc checking
2047 #: build/C/man3/malloc_get_state.3:111
2049 "Hook function pointers are never saved or restored by these functions, with "
2050 "two exceptions: if malloc checking (see B<mallopt>(3)) was in use when "
2051 "B<malloc_get_state>() was called, then B<malloc_set_state>() resets malloc "
2052 "checking hooks if possible; if malloc checking was not in use in the "
2053 "recorded state, but the caller has requested malloc checking, then the hooks "
2058 #: build/C/man3/malloc_get_state.3:114
2059 msgid "B<malloc>(3), B<mallopt>(3)"
2063 #: build/C/man3/malloc_hook.3:10
2069 #: build/C/man3/malloc_hook.3:10
2075 #: build/C/man3/malloc_hook.3:15
2077 "__malloc_hook, __malloc_initialize_hook, __memalign_hook, __free_hook, "
2078 "__realloc_hook, __after_morecore_hook - malloc debugging variables"
2082 #: build/C/man3/malloc_hook.3:20
2084 msgid "B<void *(*__malloc_hook)(size_t >I<size>B<, const void *>I<caller>B<);>\n"
2088 #: build/C/man3/malloc_hook.3:23
2091 "B<void *(*__realloc_hook)(void *>I<ptr>B<, size_t >I<size>B<, const void "
2092 "*>I<caller>B<);>\n"
2096 #: build/C/man3/malloc_hook.3:26
2099 "B<void *(*__memalign_hook)(size_t >I<alignment>B<, size_t >I<size>B<,>\n"
2100 "B< const void *>I<caller>B<);>\n"
2104 #: build/C/man3/malloc_hook.3:28
2106 msgid "B<void (*__free_hook)(void *>I<ptr>B<, const void *>I<caller>B<);>\n"
2110 #: build/C/man3/malloc_hook.3:30
2112 msgid "B<void (*__malloc_initialize_hook)(void);>\n"
2116 #: build/C/man3/malloc_hook.3:32
2118 msgid "B<void (*__after_morecore_hook)(void);>\n"
2122 #: build/C/man3/malloc_hook.3:43
2124 "The GNU C library lets you modify the behavior of B<malloc>(3), "
2125 "B<realloc>(3), and B<free>(3) by specifying appropriate hook functions. "
2126 "You can use these hooks to help you debug programs that use dynamic memory "
2127 "allocation, for example."
2131 #: build/C/man3/malloc_hook.3:50
2133 "The variable B<__malloc_initialize_hook> points at a function that is called "
2134 "once when the malloc implementation is initialized. This is a weak "
2135 "variable, so it can be overridden in the application with a definition like "
2140 #: build/C/man3/malloc_hook.3:53
2142 msgid " void (*__malloc_initialize_hook)(void) = my_init_hook;\n"
2146 #: build/C/man3/malloc_hook.3:58
2147 msgid "Now the function I<my_init_hook>() can do the initialization of all hooks."
2151 #: build/C/man3/malloc_hook.3:74
2153 "The four functions pointed to by B<__malloc_hook>, B<__realloc_hook>, "
2154 "B<__memalign_hook>, B<__free_hook> have a prototype like the functions "
2155 "B<malloc>(3), B<realloc>(3), B<memalign>(3), B<free>(3), respectively, "
2156 "except that they have a final argument I<caller> that gives the address of "
2157 "the caller of B<malloc>(3), etc."
2161 #: build/C/man3/malloc_hook.3:80
2163 "The variable B<__after_morecore_hook> points at a function that is called "
2164 "each time after B<sbrk>(2) was asked for more memory."
2167 #. https://bugzilla.redhat.com/show_bug.cgi?id=450187
2168 #. http://sourceware.org/bugzilla/show_bug.cgi?id=9957
2170 #: build/C/man3/malloc_hook.3:89
2172 "The use of these hook functions is not safe in multithreaded programs, and "
2173 "they are now deprecated. Programmers should instead preempt calls to the "
2174 "relevant functions by defining and exporting functions such as \"malloc\" "
2179 #: build/C/man3/malloc_hook.3:91
2180 msgid "Here is a short example of how to use these variables."
2184 #: build/C/man3/malloc_hook.3:95
2187 "#include E<lt>stdio.hE<gt>\n"
2188 "#include E<lt>malloc.hE<gt>\n"
2192 #: build/C/man3/malloc_hook.3:99
2195 "/* Prototypes for our hooks. */\n"
2196 "static void my_init_hook(void);\n"
2197 "static void *my_malloc_hook(size_t, const void *);\n"
2201 #: build/C/man3/malloc_hook.3:102
2204 "/* Variables to save original hooks. */\n"
2205 "static void *(*old_malloc_hook)(size_t, const void *);\n"
2209 #: build/C/man3/malloc_hook.3:105
2212 "/* Override initializing hook from the C library. */\n"
2213 "void (*__malloc_initialize_hook) (void) = my_init_hook;\n"
2217 #: build/C/man3/malloc_hook.3:112
2221 "my_init_hook(void)\n"
2223 " old_malloc_hook = __malloc_hook;\n"
2224 " __malloc_hook = my_malloc_hook;\n"
2229 #: build/C/man3/malloc_hook.3:117
2233 "my_malloc_hook(size_t size, const void *caller)\n"
2239 #: build/C/man3/malloc_hook.3:120
2242 " /* Restore all old hooks */\n"
2243 " __malloc_hook = old_malloc_hook;\n"
2247 #: build/C/man3/malloc_hook.3:123
2250 " /* Call recursively */\n"
2251 " result = malloc(size);\n"
2255 #: build/C/man3/malloc_hook.3:126
2258 " /* Save underlying hooks */\n"
2259 " old_malloc_hook = __malloc_hook;\n"
2263 #: build/C/man3/malloc_hook.3:130
2266 " /* printf() might call malloc(), so protect it too. */\n"
2267 " printf(\"malloc(%u) called from %p returns %p\\en\",\n"
2268 " (unsigned int) size, caller, result);\n"
2272 #: build/C/man3/malloc_hook.3:133
2275 " /* Restore our own hooks */\n"
2276 " __malloc_hook = my_malloc_hook;\n"
2280 #: build/C/man3/malloc_hook.3:136
2288 #: build/C/man3/malloc_hook.3:142
2289 msgid "B<mallinfo>(3), B<malloc>(3), B<mcheck>(3), B<mtrace>(3)"
2293 #: build/C/man3/malloc_info.3:25
2299 #: build/C/man3/malloc_info.3:25
2305 #: build/C/man3/malloc_info.3:28
2306 msgid "malloc_info - export malloc state to a stream"
2310 #: build/C/man3/malloc_info.3:33
2312 msgid "B<int malloc_info(int >I<options>B<, FILE *>I<fp>B<);>\n"
2316 #: build/C/man3/malloc_info.3:44
2318 "The B<malloc_info>() function exports an XML string that describes the "
2319 "current state of the memory-allocation implementation in the caller. The "
2320 "string is printed on the file stream I<fp>. The exported string includes "
2321 "information about all arenas (see B<malloc>(3))."
2325 #: build/C/man3/malloc_info.3:48
2326 msgid "As currently implemented, I<options> must be zero."
2330 #: build/C/man3/malloc_info.3:55
2332 "On success, B<malloc_info>() returns 0; on error, it returns -1, with "
2333 "I<errno> set to indicate the cause."
2337 #: build/C/man3/malloc_info.3:60
2338 msgid "I<options> was nonzero."
2342 #: build/C/man3/malloc_info.3:63
2343 msgid "B<malloc_info>() was added to glibc in version 2.10."
2347 #: build/C/man3/malloc_info.3:65 build/C/man3/malloc_stats.3:57 build/C/man3/malloc_trim.3:62 build/C/man3/malloc_usable_size.3:55
2348 msgid "This function is a GNU extension."
2352 #: build/C/man3/malloc_info.3:71
2354 "The memory-allocation information is provided as an XML string (rather than "
2355 "a C structure) because the information may change over time (according to "
2356 "changes in the underlying implementation). The output XML string includes a "
2361 #: build/C/man3/malloc_info.3:77
2363 "The B<open_memstream>(3) function can be used to send the output of "
2364 "B<malloc_info>() directly into a buffer in memory, rather than to a file."
2368 #: build/C/man3/malloc_info.3:84
2370 "The B<malloc_info>() function is designed to address deficiencies in "
2371 "B<malloc_stats>(3) and B<mallinfo>(3)."
2375 #: build/C/man3/malloc_info.3:95
2377 "The program below takes up to four command-line arguments, of which the "
2378 "first three are mandatory. The first argument specifies the number of "
2379 "threads that the program should create. All of the threads, including the "
2380 "main thread, allocate the number of blocks of memory specified by the second "
2381 "argument. The third argument controls the size of the blocks to be "
2382 "allocated. The main thread creates blocks of this size, the second thread "
2383 "created by the program allocates blocks of twice this size, the third thread "
2384 "allocates blocks of three times this size, and so on."
2388 #: build/C/man3/malloc_info.3:102
2390 "The program calls B<malloc_info>() twice to display the memory-allocation "
2391 "state. The first call takes place before any threads are created or memory "
2392 "allocated. The second call is performed after all threads have allocated "
2397 #: build/C/man3/malloc_info.3:110
2399 "In the following example, the command-line arguments specify the creation of "
2400 "one additional thread, and both the main thread and the additional thread "
2401 "allocate 10000 blocks of memory. After the blocks of memory have been "
2402 "allocated, B<malloc_info>() shows the state of two allocation arenas."
2406 #: build/C/man3/malloc_info.3:135
2409 "$ B<getconf GNU_LIBC_VERSION>\n"
2411 "$ B<./a.out 1 10000 100>\n"
2412 "============ Before allocating blocks ============\n"
2413 "E<lt>malloc version=\"1\"E<gt>\n"
2414 "E<lt>heap nr=\"0\"E<gt>\n"
2416 "E<lt>/sizesE<gt>\n"
2417 "E<lt>total type=\"fast\" count=\"0\" size=\"0\"/E<gt>\n"
2418 "E<lt>total type=\"rest\" count=\"0\" size=\"0\"/E<gt>\n"
2419 "E<lt>system type=\"current\" size=\"135168\"/E<gt>\n"
2420 "E<lt>system type=\"max\" size=\"135168\"/E<gt>\n"
2421 "E<lt>aspace type=\"total\" size=\"135168\"/E<gt>\n"
2422 "E<lt>aspace type=\"mprotect\" size=\"135168\"/E<gt>\n"
2424 "E<lt>total type=\"fast\" count=\"0\" size=\"0\"/E<gt>\n"
2425 "E<lt>total type=\"rest\" count=\"0\" size=\"0\"/E<gt>\n"
2426 "E<lt>system type=\"current\" size=\"135168\"/E<gt>\n"
2427 "E<lt>system type=\"max\" size=\"135168\"/E<gt>\n"
2428 "E<lt>aspace type=\"total\" size=\"135168\"/E<gt>\n"
2429 "E<lt>aspace type=\"mprotect\" size=\"135168\"/E<gt>\n"
2430 "E<lt>/mallocE<gt>\n"
2434 #: build/C/man3/malloc_info.3:165
2437 "============ After allocating blocks ============\n"
2438 "E<lt>malloc version=\"1\"E<gt>\n"
2439 "E<lt>heap nr=\"0\"E<gt>\n"
2441 "E<lt>/sizesE<gt>\n"
2442 "E<lt>total type=\"fast\" count=\"0\" size=\"0\"/E<gt>\n"
2443 "E<lt>total type=\"rest\" count=\"0\" size=\"0\"/E<gt>\n"
2444 "E<lt>system type=\"current\" size=\"1081344\"/E<gt>\n"
2445 "E<lt>system type=\"max\" size=\"1081344\"/E<gt>\n"
2446 "E<lt>aspace type=\"total\" size=\"1081344\"/E<gt>\n"
2447 "E<lt>aspace type=\"mprotect\" size=\"1081344\"/E<gt>\n"
2449 "E<lt>heap nr=\"1\"E<gt>\n"
2451 "E<lt>/sizesE<gt>\n"
2452 "E<lt>total type=\"fast\" count=\"0\" size=\"0\"/E<gt>\n"
2453 "E<lt>total type=\"rest\" count=\"0\" size=\"0\"/E<gt>\n"
2454 "E<lt>system type=\"current\" size=\"1032192\"/E<gt>\n"
2455 "E<lt>system type=\"max\" size=\"1032192\"/E<gt>\n"
2456 "E<lt>aspace type=\"total\" size=\"1032192\"/E<gt>\n"
2457 "E<lt>aspace type=\"mprotect\" size=\"1032192\"/E<gt>\n"
2459 "E<lt>total type=\"fast\" count=\"0\" size=\"0\"/E<gt>\n"
2460 "E<lt>total type=\"rest\" count=\"0\" size=\"0\"/E<gt>\n"
2461 "E<lt>system type=\"current\" size=\"2113536\"/E<gt>\n"
2462 "E<lt>system type=\"max\" size=\"2113536\"/E<gt>\n"
2463 "E<lt>aspace type=\"total\" size=\"2113536\"/E<gt>\n"
2464 "E<lt>aspace type=\"mprotect\" size=\"2113536\"/E<gt>\n"
2465 "E<lt>/mallocE<gt>\n"
2469 #: build/C/man3/malloc_info.3:175
2472 "#include E<lt>unistd.hE<gt>\n"
2473 "#include E<lt>stdlib.hE<gt>\n"
2474 "#include E<lt>pthread.hE<gt>\n"
2475 "#include E<lt>malloc.hE<gt>\n"
2476 "#include E<lt>errno.hE<gt>\n"
2480 #: build/C/man3/malloc_info.3:178
2483 "static size_t blockSize;\n"
2484 "static int numThreads, numBlocks;\n"
2488 #: build/C/man3/malloc_info.3:181
2491 "#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \\e\n"
2496 #: build/C/man3/malloc_info.3:187
2500 "thread_func(void *arg)\n"
2503 " int tn = (int) arg;\n"
2507 #: build/C/man3/malloc_info.3:190
2510 " /* The multiplier \\(aq(2 + tn)\\(aq ensures that each thread "
2512 " the main thread) allocates a different amount of memory */\n"
2516 #: build/C/man3/malloc_info.3:194
2519 " for (j = 0; j E<lt> numBlocks; j++)\n"
2520 " if (malloc(blockSize * (2 + tn)) == NULL)\n"
2521 " errExit(\"malloc-thread\");\n"
2525 #: build/C/man3/malloc_info.3:198
2528 " sleep(100); /* Sleep until main thread terminates */\n"
2534 #: build/C/man3/malloc_info.3:204
2538 "main(int argc, char *argv[])\n"
2540 " int j, tn, sleepTime;\n"
2541 " pthread_t *thr;\n"
2545 #: build/C/man3/malloc_info.3:211
2548 " if (argc E<lt> 4) {\n"
2549 " fprintf(stderr,\n"
2550 " \"%s num-threads num-blocks block-size [sleep-time]\\en\",\n"
2552 " exit(EXIT_FAILURE);\n"
2557 #: build/C/man3/malloc_info.3:216
2560 " numThreads = atoi(argv[1]);\n"
2561 " numBlocks = atoi(argv[2]);\n"
2562 " blockSize = atoi(argv[3]);\n"
2563 " sleepTime = (argc E<gt> 4) ? atoi(argv[4]) : 0;\n"
2567 #: build/C/man3/malloc_info.3:220
2570 " thr = calloc(numThreads, sizeof(pthread_t));\n"
2571 " if (thr == NULL)\n"
2572 " errExit(\"calloc\");\n"
2576 #: build/C/man3/malloc_info.3:223
2579 " printf(\"============ Before allocating blocks ============\\en\");\n"
2580 " malloc_info(0, stdout);\n"
2584 #: build/C/man3/malloc_info.3:225
2586 msgid " /* Create threads that allocate different amounts of memory */\n"
2590 #: build/C/man3/malloc_info.3:231
2593 " for (tn = 0; tn E<lt> numThreads; tn++) {\n"
2594 " errno = pthread_create(&thr[tn], NULL, thread_func,\n"
2596 " if (errno != 0)\n"
2597 " errExit(\"pthread_create\");\n"
2601 #: build/C/man3/malloc_info.3:236
2604 " /* If we add a sleep interval after the start-up of each\n"
2605 " thread, the threads likely won\\(aqt contend for malloc\n"
2606 " mutexes, and therefore additional arenas won\\(aqt be\n"
2607 " allocated (see malloc(3)). */\n"
2611 #: build/C/man3/malloc_info.3:240
2614 " if (sleepTime E<gt> 0)\n"
2615 " sleep(sleepTime);\n"
2620 #: build/C/man3/malloc_info.3:242
2622 msgid " /* The main thread also allocates some memory */\n"
2626 #: build/C/man3/malloc_info.3:246
2629 " for (j = 0; j E<lt> numBlocks; j++)\n"
2630 " if (malloc(blockSize) == NULL)\n"
2631 " errExit(\"malloc\");\n"
2635 #: build/C/man3/malloc_info.3:249
2638 " sleep(2); /* Give all threads a chance to\n"
2639 " complete allocations */\n"
2643 #: build/C/man3/malloc_info.3:252
2646 " printf(\"\\en============ After allocating blocks ============\\en\");\n"
2647 " malloc_info(0, stdout);\n"
2651 #: build/C/man3/malloc_info.3:262
2653 "B<mallinfo>(3), B<malloc>(3), B<malloc_stats>(3), B<mallopt>(3), "
2654 "B<open_memstream>(3)"
2658 #: build/C/man3/malloc_stats.3:26
2660 msgid "MALLOC_STATS"
2664 #: build/C/man3/malloc_stats.3:29
2665 msgid "malloc_stats - print memory allocation statistics"
2669 #: build/C/man3/malloc_stats.3:33
2670 msgid "B<void malloc_stats(void);>"
2674 #. Available already in glibc 2.0, possibly earlier
2676 #: build/C/man3/malloc_stats.3:55
2678 "The B<malloc_stats>() function prints (on standard error) statistics about "
2679 "memory allocated by B<malloc>(3) and related functions. For each arena "
2680 "(allocation area), this function prints the total amount of memory allocated "
2681 "and the total number of bytes consumed by in-use allocations. (These two "
2682 "values correspond to the I<arena> and I<uordblks> fields retrieved by "
2683 "B<mallinfo>(3).) In addition, the function prints the sum of these two "
2684 "statistics for all arenas, and the maximum number of blocks and bytes that "
2685 "were ever simultaneously allocated using B<mmap>(2)."
2689 #: build/C/man3/malloc_stats.3:61
2691 "More detailed information about memory allocations in the main arena can be "
2692 "obtained using B<mallinfo>(3)."
2696 #: build/C/man3/malloc_stats.3:67
2697 msgid "B<mmap>(2), B<mallinfo>(3), B<malloc>(3), B<malloc_info>(3), B<mallopt>(3)"
2701 #: build/C/man3/malloc_trim.3:26
2707 #: build/C/man3/malloc_trim.3:26 build/C/man2/remap_file_pages.2:28
2713 #: build/C/man3/malloc_trim.3:29
2714 msgid "malloc_trim - release free memory from the top of the heap"
2718 #: build/C/man3/malloc_trim.3:33
2719 msgid "B<int malloc_trim(size_t >I<pad>B<);>"
2723 #: build/C/man3/malloc_trim.3:40
2725 "The B<malloc_trim>() function attempts to release free memory at the top of "
2726 "the heap (by calling B<sbrk>(2) with a suitable argument)."
2730 #: build/C/man3/malloc_trim.3:51
2732 "The I<pad> argument specifies the amount of free space to leave untrimmed at "
2733 "the top of the heap. If this argument is 0, only the minimum amount of "
2734 "memory is maintained at the top of the heap (i.e., one page or less). A "
2735 "nonzero argument can be used to maintain some trailing space at the top of "
2736 "the heap in order to allow future allocations to be made without having to "
2737 "extend the heap with B<sbrk>(2)."
2741 #: build/C/man3/malloc_trim.3:56
2743 "The B<malloc_trim>() function returns 1 if memory was actually released "
2744 "back to the system, or 0 if it was not possible to release any memory."
2748 #. Available already in glibc 2.0, possibly earlier
2750 #: build/C/man3/malloc_trim.3:60
2751 msgid "No errors are defined."
2755 #: build/C/man3/malloc_trim.3:71
2757 "This function is automatically called by B<free>(3) in certain "
2758 "circumstances; see the discussion of B<M_TOP_PAD> and B<M_TRIM_THRESHOLD> in "
2763 #: build/C/man3/malloc_trim.3:74
2765 "This function cannot release free memory located at places other than the "
2769 #. malloc/malloc.c::mTRIm():
2770 #. return result | (av == &main_arena ? sYSTRIm (pad, av) : 0);
2772 #: build/C/man3/malloc_trim.3:78
2773 msgid "This function releases only memory in the main arena."
2777 #: build/C/man3/malloc_trim.3:82
2778 msgid "B<sbrk>(2), B<malloc>(3), B<mallopt>(3)"
2782 #: build/C/man3/malloc_usable_size.3:25
2784 msgid "MALLOC_USABLE_SIZE"
2788 #: build/C/man3/malloc_usable_size.3:28
2789 msgid "malloc_usable_size - obtain size of block of memory allocated from heap"
2793 #: build/C/man3/malloc_usable_size.3:32
2794 msgid "B<size_t malloc_usable_size (void *>I<ptr>B<);>"
2798 #: build/C/man3/malloc_usable_size.3:40
2800 "The B<malloc_usable_size>() function returns the number of usable bytes in "
2801 "the block pointed to by I<ptr>, a pointer to a block of memory allocated by "
2802 "B<malloc>(3) or a related function."
2806 #: build/C/man3/malloc_usable_size.3:48
2808 "B<malloc_usable_size>() returns the number of usable bytes in the block of "
2809 "allocated memory pointed to by I<ptr>. If I<ptr> is NULL, 0 is returned."
2813 #: build/C/man3/malloc_usable_size.3:53
2814 msgid "The B<malloc_usable_size>() function is thread-safe."
2818 #: build/C/man3/malloc_usable_size.3:65
2820 "The value returned by B<malloc_usable_size>() may be greater than the "
2821 "requested size of the allocation because of alignment and minimum size "
2822 "constraints. Although the excess bytes can be overwritten by the "
2823 "application without ill effects, this is not good programming practice: the "
2824 "number of excess bytes in an allocation depends on the underlying "
2829 #: build/C/man3/malloc_usable_size.3:67
2830 msgid "The main use of this function is for debugging and introspection."
2834 #: build/C/man3/malloc_usable_size.3:69
2835 msgid "B<malloc>(3)"
2839 #: build/C/man3/mallopt.3:26
2845 #: build/C/man3/mallopt.3:29
2846 msgid "mallopt - set memory allocation parameters"
2850 #: build/C/man3/mallopt.3:33
2851 msgid "B<int mallopt(int >I<param>B<, int >I<value>B<);>"
2855 #: build/C/man3/mallopt.3:44
2857 "The B<mallopt>() function adjusts parameters that control the behavior of "
2858 "the memory-allocation functions (see B<malloc>(3)). The I<param> argument "
2859 "specifies the parameter to be modified, and I<value> specifies the new value "
2860 "for that parameter."
2864 #: build/C/man3/mallopt.3:47
2865 msgid "The following values can be specified for I<param>:"
2869 #: build/C/man3/mallopt.3:47
2871 msgid "B<M_CHECK_ACTION>"
2875 #: build/C/man3/mallopt.3:53
2877 "Setting this parameter controls how glibc responds when various kinds of "
2878 "programming errors are detected (e.g., freeing the same pointer twice). The "
2879 "3 least significant bits (2, 1, and 0) of the value assigned to this "
2880 "parameter determine the glibc behavior, as follows:"
2884 #: build/C/man3/mallopt.3:54
2890 #: build/C/man3/mallopt.3:64
2892 "If this bit is set, then print a one-line message on I<stderr> that provides "
2893 "details about the error. The message starts with the string \"***\\ glibc "
2894 "detected\\ ***\", followed by the program name, the name of the "
2895 "memory-allocation function in which the error was detected, a brief "
2896 "description of the error, and the memory address where the error was "
2901 #: build/C/man3/mallopt.3:64
2907 #: build/C/man3/mallopt.3:79
2909 "If this bit is set, then, after printing any error message specified by bit "
2910 "0, the program is terminated by calling B<abort>(3). In glibc versions "
2911 "since 2.4, if bit 0 is also set, then, between printing the error message "
2912 "and aborting, the program also prints a stack trace in the manner of "
2913 "B<backtrace>(3), and prints the process's memory mapping in the style of "
2914 "I</proc/[pid]/maps> (see B<proc>(5))."
2918 #: build/C/man3/mallopt.3:79
2920 msgid "Bit 2 (since glibc 2.4)"
2924 #: build/C/man3/mallopt.3:86
2926 "This bit has an effect only if bit 0 is also set. If this bit is set, then "
2927 "the one-line message describing the error is simplified to contain just the "
2928 "name of the function where the error was detected and the brief description "
2933 #: build/C/man3/mallopt.3:91
2934 msgid "The remaining bits in I<value> are ignored."
2938 #: build/C/man3/mallopt.3:95
2940 "Combining the above details, the following numeric values are meaningful for "
2941 "B<M_CHECK_ACTION>:"
2945 #: build/C/man3/mallopt.3:96
2951 #: build/C/man3/mallopt.3:98
2952 msgid "Ignore error conditions; continue execution (with undefined results)."
2956 #: build/C/man3/mallopt.3:98
2962 #: build/C/man3/mallopt.3:100
2963 msgid "Print a detailed error message and continue execution."
2967 #: build/C/man3/mallopt.3:100
2973 #: build/C/man3/mallopt.3:102
2974 msgid "Abort the program."
2978 #: build/C/man3/mallopt.3:102
2984 #: build/C/man3/mallopt.3:105
2986 "Print detailed error message, stack trace, and memory mappings, and abort "
2991 #: build/C/man3/mallopt.3:105
2997 #: build/C/man3/mallopt.3:107
2998 msgid "Print a simple error message and continue execution."
3002 #: build/C/man3/mallopt.3:107
3008 #: build/C/man3/mallopt.3:110
3010 "Print simple error message, stack trace, and memory mappings, and abort the "
3015 #: build/C/man3/mallopt.3:116
3017 "Since glibc 2.3.4, the default value for the B<M_CHECK_ACTION> parameter is "
3018 "3. In glibc version 2.3.3 and earlier, the default value is 1."
3022 #: build/C/man3/mallopt.3:121
3024 "Using a nonzero B<M_CHECK_ACTION> value can be useful because otherwise a "
3025 "crash may happen much later, and the true cause of the problem is then very "
3026 "hard to track down."
3030 #: build/C/man3/mallopt.3:121
3032 msgid "B<M_MMAP_MAX>"
3035 #. The following text adapted from comments in the glibc source:
3037 #: build/C/man3/mallopt.3:131
3039 "This parameter specifies the maximum number of allocation requests that may "
3040 "be simultaneously serviced using B<mmap>(2). This parameter exists because "
3041 "some systems have a limited number of internal tables for use by B<mmap>(2), "
3042 "and using more than a few of them may degrade performance."
3046 #: build/C/man3/mallopt.3:138
3048 "The default value is 65,536, a value which has no special significance and "
3049 "which servers only as a safeguard. Setting this parameter to 0 disables the "
3050 "use of B<mmap>(2) for servicing large allocation requests."
3054 #: build/C/man3/mallopt.3:138
3056 msgid "B<M_MMAP_THRESHOLD>"
3060 #: build/C/man3/mallopt.3:147
3062 "For allocations greater than or equal to the limit specified (in bytes) by "
3063 "B<M_MMAP_THRESHOLD> that can't be satisfied from the free list, the "
3064 "memory-allocation functions employ B<mmap>(2) instead of increasing the "
3065 "program break using B<sbrk>(2)."
3069 #: build/C/man3/mallopt.3:167
3071 "Allocating memory using B<mmap>(2) has the significant advantage that the "
3072 "allocated memory blocks can always be independently released back to the "
3073 "system. (By contrast, the heap can be trimmed only if memory is freed at "
3074 "the top end.) On the other hand, there are some disadvantages to the use of "
3075 "B<mmap>(2): deallocated space is not placed on the free list for reuse by "
3076 "later allocations; memory may be wasted because B<mmap>(2) allocations must "
3077 "be page-aligned; and the kernel must perform the expensive task of zeroing "
3078 "out memory allocated via B<mmap>(2). Balancing these factors leads to a "
3079 "default setting of 128*1024 for the B<M_MMAP_THRESHOLD> parameter."
3083 #: build/C/man3/mallopt.3:174
3085 "The lower limit for this parameter is 0. The upper limit is "
3086 "B<DEFAULT_MMAP_THRESHOLD_MAX>: 512*1024 on 32-bit systems or "
3087 "I<4*1024*1024*sizeof(long)> on 64-bit systems."
3091 #: build/C/man3/mallopt.3:192
3093 "I<Note:> Nowadays, glibc uses a dynamic mmap threshold by default. The "
3094 "initial value of the threshold is 128*1024, but when blocks larger than the "
3095 "current threshold and less than or equal to B<DEFAULT_MMAP_THRESHOLD_MAX> "
3096 "are freed, the threshold is adjusted upward to the size of the freed block. "
3097 "When dynamic mmap thresholding is in effect, the threshold for trimming the "
3098 "heap is also dynamically adjusted to be twice the dynamic mmap threshold. "
3099 "Dynamic adjustment of the mmap threshold is disabled if any of the "
3100 "B<M_TRIM_THRESHOLD>, B<M_TOP_PAD>, B<M_MMAP_THRESHOLD>, or B<M_MMAP_MAX> "
3101 "parameters is set."
3105 #: build/C/man3/mallopt.3:192
3107 msgid "B<M_MXFAST> (since glibc 2.3)"
3110 #. The following text adapted from comments in the glibc sources:
3112 #: build/C/man3/mallopt.3:212
3114 "Set the upper limit for memory allocation requests that are satisfied using "
3115 "\"fastbins\". (The measurement unit for this parameter is bytes.) Fastbins "
3116 "are storage areas that hold deallocated blocks of memory of the same size "
3117 "without merging adjacent free blocks. Subsequent reallocation of blocks of "
3118 "the same size can be handled very quickly by allocating from the fastbin, "
3119 "although memory fragmentation and the overall memory footprint of the "
3120 "program can increase. The default value for this parameter is "
3121 "I<64*sizeof(size_t)/4> (i.e., 64 on 32-bit architectures). The range for "
3122 "this parameter is 0 to I<80*sizeof(size_t)/4>. Setting B<M_MXFAST> to 0 "
3123 "disables the use of fastbins."
3127 #: build/C/man3/mallopt.3:212
3129 msgid "B<M_PERTURB> (since glibc 2.4)"
3133 #: build/C/man3/mallopt.3:227
3135 "If this parameter is set to a nonzero value, then bytes of allocated memory "
3136 "(other than allocations via B<calloc>(3)) are initialized to the complement "
3137 "of the value in the least significant byte of I<value>, and when allocated "
3138 "memory is released using B<free>(3), the freed bytes are set to the least "
3139 "significant byte of I<value>. This can be useful for detecting errors where "
3140 "programs incorrectly rely on allocated memory being initialized to zero, or "
3141 "reuse values in memory that has already been freed."
3145 #: build/C/man3/mallopt.3:227
3147 msgid "B<M_TOP_PAD>"
3151 #: build/C/man3/mallopt.3:234
3153 "This parameter defines the amount of padding to employ when calling "
3154 "B<sbrk>(2) to modify the program break. (The measurement unit for this "
3155 "parameter is bytes.) This parameter has an effect in the following "
3160 #: build/C/man3/mallopt.3:241
3162 "When the program break is increased, then B<M_TOP_PAD> bytes are added to "
3163 "the B<sbrk>(2) request."
3167 #: build/C/man3/mallopt.3:247
3169 "When the heap is trimmed as a consequence of calling B<free>(3) (see the "
3170 "discussion of B<M_TRIM_THRESHOLD>) this much free space is preserved at the "
3175 #: build/C/man3/mallopt.3:251
3177 "In either case, the amount of padding is always rounded to a system page "
3182 #: build/C/man3/mallopt.3:258
3184 "Modifying B<M_TOP_PAD> is a trade-off between increasing the number of "
3185 "system calls (when the parameter is set low) and wasting unused memory at "
3186 "the top of the heap (when the parameter is set high)."
3189 #. DEFAULT_TOP_PAD in glibc source
3191 #: build/C/man3/mallopt.3:261
3192 msgid "The default value for this parameter is 128*1024."
3196 #: build/C/man3/mallopt.3:261
3198 msgid "B<M_TRIM_THRESHOLD>"
3202 #: build/C/man3/mallopt.3:277
3204 "When the amount of contiguous free memory at the top of the heap grows "
3205 "sufficiently large, B<free>(3) employs B<sbrk>(2) to release this memory "
3206 "back to the system. (This can be useful in programs that continue to "
3207 "execute for a long period after freeing a significant amount of memory.) "
3208 "The B<M_TRIM_THRESHOLD> parameter specifies the minimum size (in bytes) that "
3209 "this block of memory must reach before B<sbrk>(2) is used to trim the heap."
3213 #: build/C/man3/mallopt.3:282
3215 "The default value for this parameter is 128*1024. Setting "
3216 "B<M_TRIM_THRESHOLD> to -1 disables trimming completely."
3219 #. FIXME Do the arena parameters need to be documented?
3221 #. .BR M_ARENA_TEST " (since glibc 2.10)"
3223 #. .BR M_ARENA_MAX " (since glibc 2.10)"
3225 #. Environment variables
3226 #. MALLOC_ARENA_MAX_
3227 #. MALLOC_ARENA_TEST_
3229 #. http://udrepper.livejournal.com/20948.html describes some details
3230 #. of the MALLOC_ARENA_* environment variables.
3232 #. These macros aren't enabled in production releases until 2.15?
3233 #. (see glibc malloc/Makefile)
3235 #: build/C/man3/mallopt.3:305
3237 "Modifying B<M_TRIM_THRESHOLD> is a trade-off between increasing the number "
3238 "of system calls (when the parameter is set low) and wasting unused memory "
3239 "at the top of the heap (when the parameter is set high)."
3243 #: build/C/man3/mallopt.3:305
3245 msgid "Environment variables"
3249 #: build/C/man3/mallopt.3:320
3251 "A number of environment variables can be defined to modify some of the same "
3252 "parameters as are controlled by B<mallopt>(). Using these variables has the "
3253 "advantage that the source code of the program need not be changed. To be "
3254 "effective, these variables must be defined before the first call to a "
3255 "memory-allocation function. (If the same parameters are adjusted via "
3256 "B<mallopt>(), then the B<mallopt>() settings take precedence.) For "
3257 "security reasons, these variables are ignored in set-user-ID and "
3258 "set-group-ID programs."
3262 #: build/C/man3/mallopt.3:323
3264 "The environment variables are as follows (note the trailing underscore at "
3265 "the end of the name of each variable):"
3269 #: build/C/man3/mallopt.3:323
3271 msgid "B<MALLOC_CHECK_>"
3274 #. On glibc 2.12/x86, a simple malloc()+free() loop is about 70% slower
3275 #. when MALLOC_CHECK_ was set.
3277 #: build/C/man3/mallopt.3:340
3279 "This environment variable controls the same parameter as B<mallopt>() "
3280 "B<M_CHECK_ACTION>. If this variable is set to a nonzero value, then a "
3281 "special implementation of the memory-allocation functions is used. (This is "
3282 "accomplished using the B<malloc_hook>(3) feature.) This implementation "
3283 "performs additional error checking, but is slower than the standard set of "
3284 "memory-allocation functions. (This implementation does not detect all "
3285 "possible errors; memory leaks can still occur.)"
3289 #: build/C/man3/mallopt.3:345
3291 "The value assigned to this environment variable should be a single digit, "
3292 "whose meaning is as described for B<M_CHECK_ACTION>. Any characters beyond "
3293 "the initial digit are ignored."
3297 #: build/C/man3/mallopt.3:354
3299 "For security reasons, the effect of B<MALLOC_CHECK_> is disabled by default "
3300 "for set-user-ID and set-group-ID programs. However, if the file "
3301 "I</etc/suid-debug> exists (the content of the file is irrelevant), then "
3302 "B<MALLOC_CHECK_> also has an effect for set-user-ID and set-group-ID "
3307 #: build/C/man3/mallopt.3:354
3309 msgid "B<MALLOC_MMAP_MAX_>"
3313 #: build/C/man3/mallopt.3:359
3314 msgid "Controls the same parameter as B<mallopt>() B<M_MMAP_MAX>."
3318 #: build/C/man3/mallopt.3:359
3320 msgid "B<MALLOC_MMAP_THRESHOLD_>"
3324 #: build/C/man3/mallopt.3:364
3325 msgid "Controls the same parameter as B<mallopt>() B<M_MMAP_THRESHOLD>."
3329 #: build/C/man3/mallopt.3:364
3331 msgid "B<MALLOC_PERTURB_>"
3335 #: build/C/man3/mallopt.3:369
3336 msgid "Controls the same parameter as B<mallopt>() B<M_PERTURB>."
3340 #: build/C/man3/mallopt.3:369
3342 msgid "B<MALLOC_TRIM_THRESHOLD_>"
3346 #: build/C/man3/mallopt.3:374
3347 msgid "Controls the same parameter as B<mallopt>() B<M_TRIM_THRESHOLD>."
3351 #: build/C/man3/mallopt.3:374
3353 msgid "B<MALLOC_TOP_PAD_>"
3357 #: build/C/man3/mallopt.3:379
3358 msgid "Controls the same parameter as B<mallopt>() B<M_TOP_PAD>."
3362 #: build/C/man3/mallopt.3:384
3363 msgid "On success, B<mallopt>() returns 1. On error, it returns 0."
3367 #. Available already in glibc 2.0, possibly earlier
3369 #: build/C/man3/mallopt.3:392
3370 msgid "On error, I<errno> is I<not> set."
3375 #: build/C/man3/mallopt.3:406
3377 "This function is not specified by POSIX or the C standards. A similar "
3378 "function exists on many System V derivatives, but the range of values for "
3379 "I<param> varies across systems. The SVID defined options B<M_MXFAST>, "
3380 "B<M_NLBLKS>, B<M_GRAIN>, and B<M_KEEP>, but only the first of these is "
3381 "implemented in glibc."
3385 #: build/C/man3/mallopt.3:410
3386 msgid "Specifying an invalid value for I<param> does not generate an error."
3389 #. FIXME . This looks buggy:
3390 #. setting the M_MXFAST limit rounds up: (s + SIZE_SZ) & ~MALLOC_ALIGN_MASK)
3391 #. malloc requests are rounded up:
3392 #. (req) + SIZE_SZ + MALLOC_ALIGN_MASK) & ~MALLOC_ALIGN_MASK
3393 #. http://sources.redhat.com/bugzilla/show_bug.cgi?id=12129
3395 #: build/C/man3/mallopt.3:418
3397 "A calculation error within the glibc implementation means that a call of the "
3402 #: build/C/man3/mallopt.3:421
3404 msgid " mallopt(M_MXFAST, n)\n"
3407 #. Bins are multiples of 2 * sizeof(size_t) + sizeof(size_t)
3409 #: build/C/man3/mallopt.3:433
3411 "does not result in fastbins being employed for all allocations of size up to "
3412 "I<n>. To ensure desired results, I<n> should be rounded up to the next "
3413 "multiple greater than or equal to I<(2k+1)*sizeof(size_t)>, where I<k> is an "
3417 #. FIXME . http://sources.redhat.com/bugzilla/show_bug.cgi?id=12140
3419 #: build/C/man3/mallopt.3:454
3421 "If B<mallopt>() is used to set B<M_PERTURB>, then, as expected, the bytes "
3422 "of allocated memory are initialized to the complement of the byte in "
3423 "I<value>, and when that memory is freed, the bytes of the region are "
3424 "initialized to the byte specified in I<value>. However, there is an "
3425 "off-by-I<sizeof(size_t)> error in the implementation: instead of "
3426 "initializing precisely the block of memory being freed by the call "
3427 "I<free(p)>, the block starting at I<p+sizeof(size_t)> is initialized."
3431 #: build/C/man3/mallopt.3:463
3433 "The program below demonstrates the use of B<M_CHECK_ACTION>. If the program "
3434 "is supplied with an (integer) command-line argument, then that argument is "
3435 "used to set the B<M_CHECK_ACTION> parameter. The program then allocates a "
3436 "block of memory, and frees it twice (an error)."
3440 #: build/C/man3/mallopt.3:467
3442 "The following shell session shows what happens when we run this program "
3443 "under glibc, with the default value for B<M_CHECK_ACTION>:"
3447 #: build/C/man3/mallopt.3:487
3451 "main(): returned from first free() call\n"
3452 "*** glibc detected *** ./a.out: double free or corruption (top): 0x09d30008 "
3454 "======= Backtrace: =========\n"
3455 "/lib/libc.so.6(+0x6c501)[0x523501]\n"
3456 "/lib/libc.so.6(+0x6dd70)[0x524d70]\n"
3457 "/lib/libc.so.6(cfree+0x6d)[0x527e5d]\n"
3458 "\\&./a.out[0x80485db]\n"
3459 "/lib/libc.so.6(__libc_start_main+0xe7)[0x4cdce7]\n"
3460 "\\&./a.out[0x8048471]\n"
3461 "======= Memory map: ========\n"
3462 "001e4000-001fe000 r-xp 00000000 08:06 1083555 /lib/libgcc_s.so.1\n"
3463 "001fe000-001ff000 r--p 00019000 08:06 1083555 /lib/libgcc_s.so.1\n"
3464 "[some lines omitted]\n"
3465 "b7814000-b7817000 rw-p 00000000 00:00 0\n"
3466 "bff53000-bff74000 rw-p 00000000 00:00 0 [stack]\n"
3467 "Aborted (core dumped)\n"
3471 #: build/C/man3/mallopt.3:492
3473 "The following runs show the results when employing other values for "
3474 "B<M_CHECK_ACTION>:"
3478 #: build/C/man3/mallopt.3:505
3481 "$ B<./a.out 1> # Diagnose error and continue\n"
3482 "main(): returned from first free() call\n"
3483 "*** glibc detected *** ./a.out: double free or corruption (top): 0x09cbe008 "
3485 "main(): returned from second free() call\n"
3486 "$ B<./a.out 2> # Abort without error message\n"
3487 "main(): returned from first free() call\n"
3488 "Aborted (core dumped)\n"
3489 "$ B<./a.out 0> # Ignore error and continue\n"
3490 "main(): returned from first free() call\n"
3491 "main(): returned from second free() call\n"
3495 #: build/C/man3/mallopt.3:511
3497 "The next run shows how to set the same parameter using the B<MALLOC_CHECK_> "
3498 "environment variable:"
3502 #: build/C/man3/mallopt.3:518
3505 "$ B<MALLOC_CHECK_=1 ./a.out>\n"
3506 "main(): returned from first free() call\n"
3507 "*** glibc detected *** ./a.out: free(): invalid pointer: 0x092c2008 ***\n"
3508 "main(): returned from second free() call\n"
3512 #: build/C/man3/mallopt.3:526
3515 "#include E<lt>malloc.hE<gt>\n"
3516 "#include E<lt>stdio.hE<gt>\n"
3517 "#include E<lt>stdlib.hE<gt>\n"
3521 #: build/C/man3/mallopt.3:531 build/C/man3/mcheck.3:187
3525 "main(int argc, char *argv[])\n"
3531 #: build/C/man3/mallopt.3:538
3534 " if (argc E<gt> 1) {\n"
3535 " if (mallopt(M_CHECK_ACTION, atoi(argv[1])) != 1) {\n"
3536 " fprintf(stderr, \"mallopt() failed\");\n"
3537 " exit(EXIT_FAILURE);\n"
3543 #: build/C/man3/mallopt.3:544
3546 " p = malloc(1000);\n"
3547 " if (p == NULL) {\n"
3548 " fprintf(stderr, \"malloc() failed\");\n"
3549 " exit(EXIT_FAILURE);\n"
3554 #: build/C/man3/mallopt.3:547
3558 " printf(\"main(): returned from first free() call\\en\");\n"
3562 #: build/C/man3/mallopt.3:550
3566 " printf(\"main(): returned from second free() call\\en\");\n"
3570 #: build/C/man3/mallopt.3:568
3572 "B<mmap>(2), B<sbrk>(2), B<mallinfo>(3), B<malloc>(3), B<malloc_hook>(3), "
3573 "B<malloc_info>(3), B<malloc_stats>(3), B<malloc_trim>(3), B<mcheck>(3), "
3574 "B<mtrace>(3), B<posix_memalign>(3)"
3578 #: build/C/man3/mcheck.3:25
3584 #: build/C/man3/mcheck.3:25
3590 #: build/C/man3/mcheck.3:28
3592 "mcheck, mcheck_check_all, mcheck_pedantic, mprobe - heap consistency "
3597 #: build/C/man3/mcheck.3:31
3599 msgid "B<#include E<lt>mcheck.hE<gt>>\n"
3603 #: build/C/man3/mcheck.3:33
3605 msgid "B<int mcheck(void (*>I<abortfunc>B<)(enum mcheck_status >I<mstatus>B<));>\n"
3609 #: build/C/man3/mcheck.3:35
3612 "B<int mcheck_pedantic(void (*>I<abortfunc>B<)(enum mcheck_status "
3613 ">I<mstatus>B<));>\n"
3617 #: build/C/man3/mcheck.3:37
3619 msgid "B<void mcheck_check_all(void);>\n"
3623 #: build/C/man3/mcheck.3:39
3625 msgid "B<enum mcheck_status mprobe(void *>I<ptr>B<);>\n"
3629 #: build/C/man3/mcheck.3:51
3631 "The B<mcheck>() function installs a set of debugging hooks for the "
3632 "B<malloc>(3) family of memory-allocation functions. These hooks cause "
3633 "certain consistency checks to be performed on the state of the heap. The "
3634 "checks can detect application errors such as freeing a block of memory more "
3635 "than once or corrupting the bookkeeping data structures that immediately "
3636 "precede a block of allocated memory."
3640 #: build/C/man3/mcheck.3:63
3642 "To be effective, the B<mcheck>() function must be called before the first "
3643 "call to B<malloc>(3) or a related function. In cases where this is "
3644 "difficult to ensure, linking the program with I<-lmcheck> inserts an "
3645 "implicit call to B<mcheck>() (with a NULL argument) before the first call "
3646 "to a memory-allocation function."
3650 #: build/C/man3/mcheck.3:71
3652 "The B<mcheck_pedantic>() function is similar to B<mcheck>(), but performs "
3653 "checks on all allocated blocks whenever one of the memory-allocation "
3654 "functions is called. This can be very slow!"
3658 #: build/C/man3/mcheck.3:78
3660 "The B<mcheck_check_all>() function causes an immediate check on all "
3661 "allocated blocks. This call is effective only if B<mcheck>() is called "
3666 #: build/C/man3/mcheck.3:91
3668 "If the system detects an inconsistency in the heap, the caller-supplied "
3669 "function pointed to by I<abortfunc> is invoked with a single argument "
3670 "argument, I<mstatus>, that indicates what type of inconsistency was "
3671 "detected. If I<abortfunc> is NULL, a default function prints an error "
3672 "message on I<stderr> and calls B<abort>(3)."
3676 #: build/C/man3/mcheck.3:103
3678 "The B<mprobe>() function performs a consistency check on the block of "
3679 "allocated memory pointed to by I<ptr>. The B<mcheck>() function should be "
3680 "called beforehand (otherwise B<mprobe>() returns B<MCHECK_DISABLED>)."
3684 #: build/C/man3/mcheck.3:111
3686 "The following list describes the values returned by B<mprobe>() or passed "
3687 "as the I<mstatus> argument when I<abortfunc> is invoked:"
3691 #: build/C/man3/mcheck.3:111
3693 msgid "B<MCHECK_DISABLED> (B<mprobe>() only)"
3697 #: build/C/man3/mcheck.3:116
3699 "B<mcheck>() was not called before the first memory allocation function was "
3700 "called. Consistency checking is not possible."
3704 #: build/C/man3/mcheck.3:116
3706 msgid "B<MCHECK_OK> (B<mprobe>() only)"
3710 #: build/C/man3/mcheck.3:119
3711 msgid "No inconsistency detected."
3715 #: build/C/man3/mcheck.3:119
3717 msgid "B<MCHECK_HEAD>"
3721 #: build/C/man3/mcheck.3:122
3722 msgid "Memory preceding an allocated block was clobbered."
3726 #: build/C/man3/mcheck.3:122
3728 msgid "B<MCHECK_TAIL>"
3732 #: build/C/man3/mcheck.3:125
3733 msgid "Memory following an allocated block was clobbered."
3737 #: build/C/man3/mcheck.3:125
3739 msgid "B<MCHECK_FREE>"
3743 #: build/C/man3/mcheck.3:129
3744 msgid "A block of memory was freed twice."
3748 #: build/C/man3/mcheck.3:134
3749 msgid "B<mcheck>() and B<mcheck_pedantic>() return 0 on success, or -1 on error."
3753 #: build/C/man3/mcheck.3:145
3755 "The B<mcheck_pedantic>() and B<mcheck_check_all>() functions are available "
3756 "since glibc 2.2. The B<mcheck>() and B<mprobe>() functions are present "
3757 "since at least glibc 2.0"
3760 #. But is MALLOC_CHECK_ slower?
3762 #: build/C/man3/mcheck.3:159
3764 "Linking a program with I<-lmcheck> and using the B<MALLOC_CHECK_> "
3765 "environment variable (described in B<mallopt>(3)) cause the same kinds of "
3766 "errors to be detected. But, using B<MALLOC_CHECK_> does not require the "
3767 "application to be relinked."
3771 #: build/C/man3/mcheck.3:165
3773 "The program below calls B<mcheck>() with a NULL argument and then frees the "
3774 "same block of memory twice. The following shell session demonstrates what "
3775 "happens when running the program:"
3779 #: build/C/man3/mcheck.3:170
3787 #: build/C/man3/mcheck.3:174
3790 "About to free a second time\n"
3791 "block freed twice\n"
3792 "Aborted (core dumped)\n"
3796 #: build/C/man3/mcheck.3:182
3799 "#include E<lt>stdlib.hE<gt>\n"
3800 "#include E<lt>stdio.hE<gt>\n"
3801 "#include E<lt>mcheck.hE<gt>\n"
3805 #: build/C/man3/mcheck.3:190
3808 " if (mcheck(NULL) != 0) {\n"
3809 " fprintf(stderr, \"mcheck() failed\\en\");\n"
3813 #: build/C/man3/mcheck.3:193
3816 " exit(EXIT_FAILURE);\n"
3821 #: build/C/man3/mcheck.3:195
3823 msgid " p = malloc(1000);\n"
3827 #: build/C/man3/mcheck.3:200
3830 " fprintf(stderr, \"About to free\\en\");\n"
3832 " fprintf(stderr, \"\\enAbout to free a second time\\en\");\n"
3837 #: build/C/man3/mcheck.3:208
3838 msgid "B<malloc>(3), B<mallopt>(3), B<mtrace>(3)"
3842 #: build/C/man2/mlock.2:26
3848 #: build/C/man2/mlock.2:26
3854 #: build/C/man2/mlock.2:29
3855 msgid "mlock, munlock, mlockall, munlockall - lock and unlock memory"
3859 #: build/C/man2/mlock.2:32 build/C/man2/mmap.2:46 build/C/man2/mmap2.2:35 build/C/man2/mprotect.2:45 build/C/man2/mremap.2:38
3861 msgid "B<#include E<lt>sys/mman.hE<gt>>\n"
3865 #: build/C/man2/mlock.2:35
3868 "B<int mlock(const void *>I<addr>B<, size_t >I<len>B<);>\n"
3869 "B<int munlock(const void *>I<addr>B<, size_t >I<len>B<);>\n"
3873 #: build/C/man2/mlock.2:38
3876 "B<int mlockall(int >I<flags>B<);>\n"
3877 "B<int munlockall(void);>\n"
3881 #: build/C/man2/mlock.2:54
3883 "B<mlock>() and B<mlockall>() respectively lock part or all of the calling "
3884 "process's virtual address space into RAM, preventing that memory from being "
3885 "paged to the swap area. B<munlock>() and B<munlockall>() perform the "
3886 "converse operation, respectively unlocking part or all of the calling "
3887 "process's virtual address space, so that pages in the specified virtual "
3888 "address range may once more to be swapped out if required by the kernel "
3889 "memory manager. Memory locking and unlocking are performed in units of "
3894 #: build/C/man2/mlock.2:54
3896 msgid "mlock() and munlock()"
3900 #: build/C/man2/mlock.2:64
3902 "B<mlock>() locks pages in the address range starting at I<addr> and "
3903 "continuing for I<len> bytes. All pages that contain a part of the specified "
3904 "address range are guaranteed to be resident in RAM when the call returns "
3905 "successfully; the pages are guaranteed to stay in RAM until later unlocked."
3909 #: build/C/man2/mlock.2:73
3911 "B<munlock>() unlocks pages in the address range starting at I<addr> and "
3912 "continuing for I<len> bytes. After this call, all pages that contain a part "
3913 "of the specified memory range can be moved to external swap space again by "
3918 #: build/C/man2/mlock.2:73
3920 msgid "mlockall() and munlockall()"
3924 #: build/C/man2/mlock.2:83
3926 "B<mlockall>() locks all pages mapped into the address space of the calling "
3927 "process. This includes the pages of the code, data and stack segment, as "
3928 "well as shared libraries, user space kernel data, shared memory, and "
3929 "memory-mapped files. All mapped pages are guaranteed to be resident in RAM "
3930 "when the call returns successfully; the pages are guaranteed to stay in RAM "
3931 "until later unlocked."
3935 #: build/C/man2/mlock.2:88
3937 "The I<flags> argument is constructed as the bitwise OR of one or more of the "
3938 "following constants:"
3942 #: build/C/man2/mlock.2:88
3944 msgid "B<MCL_CURRENT>"
3948 #: build/C/man2/mlock.2:92
3950 "Lock all pages which are currently mapped into the address space of the "
3955 #: build/C/man2/mlock.2:92
3957 msgid "B<MCL_FUTURE>"
3961 #: build/C/man2/mlock.2:99
3963 "Lock all pages which will become mapped into the address space of the "
3964 "process in the future. These could be for instance new pages required by a "
3965 "growing heap and stack as well as new memory-mapped files or shared memory "
3970 #: build/C/man2/mlock.2:112
3972 "If B<MCL_FUTURE> has been specified, then a later system call (e.g., "
3973 "B<mmap>(2), B<sbrk>(2), B<malloc>(3)), may fail if it would cause the number "
3974 "of locked bytes to exceed the permitted maximum (see below). In the same "
3975 "circumstances, stack growth may likewise fail: the kernel will deny stack "
3976 "expansion and deliver a B<SIGSEGV> signal to the process."
3980 #: build/C/man2/mlock.2:116
3982 "B<munlockall>() unlocks all pages mapped into the address space of the "
3987 #: build/C/man2/mlock.2:122
3989 "On success these system calls return 0. On error, -1 is returned, I<errno> "
3990 "is set appropriately, and no changes are made to any locks in the address "
3991 "space of the process."
3995 #: build/C/man2/mlock.2:131
3997 "(Linux 2.6.9 and later) the caller had a nonzero B<RLIMIT_MEMLOCK> soft "
3998 "resource limit, but tried to lock more memory than the limit permitted. "
3999 "This limit is not enforced if the process is privileged (B<CAP_IPC_LOCK>)."
4002 #. In the case of mlock(), this check is somewhat buggy: it doesn't
4003 #. take into account whether the to-be-locked range overlaps with
4004 #. already locked pages. Thus, suppose we allocate
4005 #. (num_physpages / 4 + 1) of memory, and lock those pages once using
4006 #. mlock(), and then lock the *same* page range a second time.
4007 #. In the case, the second mlock() call will fail, since the check
4008 #. calculates that the process is trying to lock (num_physpages / 2 + 2)
4009 #. pages, which of course is not true. (MTK, Nov 04, kernel 2.4.28)
4011 #: build/C/man2/mlock.2:143
4013 "(Linux 2.4 and earlier) the calling process tried to lock more than half of "
4017 #. SVr4 documents an additional EAGAIN error code.
4019 #: build/C/man2/mlock.2:149
4021 "The caller is not privileged, but needs privilege (B<CAP_IPC_LOCK>) to "
4022 "perform the requested operation."
4026 #: build/C/man2/mlock.2:154
4027 msgid "For B<mlock>() and B<munlock>():"
4031 #: build/C/man2/mlock.2:157
4032 msgid "Some or all of the specified address range could not be locked."
4036 #: build/C/man2/mlock.2:164
4038 "The result of the addition I<start>+I<len> was less than I<start> (e.g., the "
4039 "addition may have resulted in an overflow)."
4043 #: build/C/man2/mlock.2:169
4044 msgid "(Not on Linux) I<addr> was not a multiple of the page size."
4048 #: build/C/man2/mlock.2:173
4050 "Some of the specified address range does not correspond to mapped pages in "
4051 "the address space of the process."
4055 #: build/C/man2/mlock.2:176
4056 msgid "For B<mlockall>():"
4060 #: build/C/man2/mlock.2:179
4061 msgid "Unknown I<flags> were specified."
4065 #: build/C/man2/mlock.2:182
4066 msgid "For B<munlockall>():"
4070 #: build/C/man2/mlock.2:186
4071 msgid "(Linux 2.6.8 and earlier) The caller was not privileged (B<CAP_IPC_LOCK>)."
4075 #: build/C/man2/mlock.2:188
4076 msgid "POSIX.1-2001, SVr4."
4080 #: build/C/man2/mlock.2:188 build/C/man2/mmap.2:499 build/C/man2/msync.2:105
4082 msgid "AVAILABILITY"
4086 #: build/C/man2/mlock.2:200
4088 "On POSIX systems on which B<mlock>() and B<munlock>() are available, "
4089 "B<_POSIX_MEMLOCK_RANGE> is defined in I<E<lt>unistd.hE<gt>> and the number "
4090 "of bytes in a page can be determined from the constant B<PAGESIZE> (if "
4091 "defined) in I<E<lt>limits.hE<gt>> or by calling I<sysconf(_SC_PAGESIZE)>."
4094 #. POSIX.1-2001: It shall be defined to -1 or 0 or 200112L.
4095 #. -1: unavailable, 0: ask using sysconf().
4096 #. glibc defines it to 1.
4098 #: build/C/man2/mlock.2:213
4100 "On POSIX systems on which B<mlockall>() and B<munlockall>() are available, "
4101 "B<_POSIX_MEMLOCK> is defined in I<E<lt>unistd.hE<gt>> to a value greater "
4102 "than 0. (See also B<sysconf>(3).)"
4106 #: build/C/man2/mlock.2:231
4108 "Memory locking has two main applications: real-time algorithms and "
4109 "high-security data processing. Real-time applications require deterministic "
4110 "timing, and, like scheduling, paging is one major cause of unexpected "
4111 "program execution delays. Real-time applications will usually also switch "
4112 "to a real-time scheduler with B<sched_setscheduler>(2). Cryptographic "
4113 "security software often handles critical bytes like passwords or secret keys "
4114 "as data structures. As a result of paging, these secrets could be "
4115 "transferred onto a persistent swap store medium, where they might be "
4116 "accessible to the enemy long after the security software has erased the "
4117 "secrets in RAM and terminated. (But be aware that the suspend mode on "
4118 "laptops and some desktop computers will save a copy of the system's RAM to "
4119 "disk, regardless of memory locks.)"
4123 #: build/C/man2/mlock.2:244
4125 "Real-time processes that are using B<mlockall>() to prevent delays on page "
4126 "faults should reserve enough locked stack pages before entering the "
4127 "time-critical section, so that no page fault can be caused by function "
4128 "calls. This can be achieved by calling a function that allocates a "
4129 "sufficiently large automatic variable (an array) and writes to the memory "
4130 "occupied by this array in order to touch these stack pages. This way, "
4131 "enough pages will be mapped for the stack and can be locked into RAM. The "
4132 "dummy writes ensure that not even copy-on-write page faults can occur in the "
4137 #: build/C/man2/mlock.2:257
4139 "Memory locks are not inherited by a child created via B<fork>(2) and are "
4140 "automatically removed (unlocked) during an B<execve>(2) or when the process "
4141 "terminates. The B<mlockall>() B<MCL_FUTURE> setting is not inherited by a "
4142 "child created via B<fork>(2) and is cleared during an B<execve>(2)."
4146 #: build/C/man2/mlock.2:261
4148 "The memory lock on an address range is automatically removed if the address "
4149 "range is unmapped via B<munmap>(2)."
4153 #: build/C/man2/mlock.2:274
4155 "Memory locks do not stack, that is, pages which have been locked several "
4156 "times by calls to B<mlock>() or B<mlockall>() will be unlocked by a single "
4157 "call to B<munlock>() for the corresponding range or by B<munlockall>(). "
4158 "Pages which are mapped to several locations or by several processes stay "
4159 "locked into RAM as long as they are locked at least at one location or by at "
4160 "least one process."
4164 #: build/C/man2/mlock.2:285
4166 "Under Linux, B<mlock>() and B<munlock>() automatically round I<addr> down "
4167 "to the nearest page boundary. However, POSIX.1-2001 allows an "
4168 "implementation to require that I<addr> is page aligned, so portable "
4169 "applications should ensure this."
4173 #: build/C/man2/mlock.2:298
4175 "The I<VmLck> field of the Linux-specific I</proc/PID/status> file shows how "
4176 "many kilobytes of memory the process with ID I<PID> has locked using "
4177 "B<mlock>(), B<mlockall>(), and B<mmap>(2) B<MAP_LOCKED>."
4181 #: build/C/man2/mlock.2:298
4183 msgid "Limits and permissions"
4187 #: build/C/man2/mlock.2:305
4189 "In Linux 2.6.8 and earlier, a process must be privileged (B<CAP_IPC_LOCK>) "
4190 "in order to lock memory and the B<RLIMIT_MEMLOCK> soft resource limit "
4191 "defines a limit on how much memory the process may lock."
4195 #: build/C/man2/mlock.2:311
4197 "Since Linux 2.6.9, no limits are placed on the amount of memory that a "
4198 "privileged process can lock and the B<RLIMIT_MEMLOCK> soft resource limit "
4199 "instead defines a limit on how much memory an unprivileged process may lock."
4203 #: build/C/man2/mlock.2:319
4205 "In the 2.4 series Linux kernels up to and including 2.4.17, a bug caused the "
4206 "B<mlockall>() B<MCL_FUTURE> flag to be inherited across a B<fork>(2). This "
4207 "was rectified in kernel 2.4.18."
4210 #. See the following LKML thread:
4211 #. http://marc.theaimsgroup.com/?l=linux-kernel&m=113801392825023&w=2
4212 #. "Rationale for RLIMIT_MEMLOCK"
4215 #: build/C/man2/mlock.2:336
4217 "Since kernel 2.6.9, if a privileged process calls I<mlockall(MCL_FUTURE)> "
4218 "and later drops privileges (loses the B<CAP_IPC_LOCK> capability by, for "
4219 "example, setting its effective UID to a nonzero value), then subsequent "
4220 "memory allocations (e.g., B<mmap>(2), B<brk>(2)) will fail if the "
4221 "B<RLIMIT_MEMLOCK> resource limit is encountered."
4225 #: build/C/man2/mlock.2:343
4227 "B<mmap>(2), B<setrlimit>(2), B<shmctl>(2), B<sysconf>(3), B<proc>(5), "
4228 "B<capabilities>(7)"
4232 #: build/C/man2/mmap.2:40
4238 #: build/C/man2/mmap.2:40 build/C/man2/sync_file_range.2:30
4244 #: build/C/man2/mmap.2:43
4245 msgid "mmap, munmap - map or unmap files or devices into memory"
4249 #: build/C/man2/mmap.2:51
4252 "B<void *mmap(void *>I<addr>B<, size_t >I<length>B<, int >I<prot>B<, int "
4254 "B< int >I<fd>B<, off_t >I<offset>B<);>\n"
4255 "B<int munmap(void *>I<addr>B<, size_t >I<length>B<);>\n"
4259 #: build/C/man2/mmap.2:54
4260 msgid "See NOTES for information on feature test macro requirements."
4264 #: build/C/man2/mmap.2:63
4266 "B<mmap>() creates a new mapping in the virtual address space of the calling "
4267 "process. The starting address for the new mapping is specified in I<addr>. "
4268 "The I<length> argument specifies the length of the mapping."
4271 #. Before Linux 2.6.24, the address was rounded up to the next page
4272 #. boundary; since 2.6.24, it is rounded down!
4274 #: build/C/man2/mmap.2:77
4276 "If I<addr> is NULL, then the kernel chooses the address at which to create "
4277 "the mapping; this is the most portable method of creating a new mapping. If "
4278 "I<addr> is not NULL, then the kernel takes it as a hint about where to place "
4279 "the mapping; on Linux, the mapping will be created at a nearby page "
4280 "boundary. The address of the new mapping is returned as the result of the "
4285 #: build/C/man2/mmap.2:89
4287 "The contents of a file mapping (as opposed to an anonymous mapping; see "
4288 "B<MAP_ANONYMOUS> below), are initialized using I<length> bytes starting at "
4289 "offset I<offset> in the file (or other object) referred to by the file "
4290 "descriptor I<fd>. I<offset> must be a multiple of the page size as returned "
4291 "by I<sysconf(_SC_PAGE_SIZE)>."
4295 #: build/C/man2/mmap.2:97
4297 "The I<prot> argument describes the desired memory protection of the mapping "
4298 "(and must not conflict with the open mode of the file). It is either "
4299 "B<PROT_NONE> or the bitwise OR of one or more of the following flags:"
4303 #: build/C/man2/mmap.2:97 build/C/man2/mprotect.2:74
4305 msgid "B<PROT_EXEC>"
4309 #: build/C/man2/mmap.2:100
4310 msgid "Pages may be executed."
4314 #: build/C/man2/mmap.2:100 build/C/man2/mprotect.2:68
4316 msgid "B<PROT_READ>"
4320 #: build/C/man2/mmap.2:103
4321 msgid "Pages may be read."
4325 #: build/C/man2/mmap.2:103 build/C/man2/mprotect.2:71
4327 msgid "B<PROT_WRITE>"
4331 #: build/C/man2/mmap.2:106
4332 msgid "Pages may be written."
4336 #: build/C/man2/mmap.2:106 build/C/man2/mprotect.2:65
4338 msgid "B<PROT_NONE>"
4342 #: build/C/man2/mmap.2:109
4343 msgid "Pages may not be accessed."
4347 #: build/C/man2/mmap.2:118
4349 "The I<flags> argument determines whether updates to the mapping are visible "
4350 "to other processes mapping the same region, and whether updates are carried "
4351 "through to the underlying file. This behavior is determined by including "
4352 "exactly one of the following values in I<flags>:"
4356 #: build/C/man2/mmap.2:118
4358 msgid "B<MAP_SHARED>"
4362 #: build/C/man2/mmap.2:128
4364 "Share this mapping. Updates to the mapping are visible to other processes "
4365 "that map this file, and are carried through to the underlying file. The "
4366 "file may not actually be updated until B<msync>(2) or B<munmap>() is "
4371 #: build/C/man2/mmap.2:128
4373 msgid "B<MAP_PRIVATE>"
4377 #: build/C/man2/mmap.2:137
4379 "Create a private copy-on-write mapping. Updates to the mapping are not "
4380 "visible to other processes mapping the same file, and are not carried "
4381 "through to the underlying file. It is unspecified whether changes made to "
4382 "the file after the B<mmap>() call are visible in the mapped region."
4386 #: build/C/man2/mmap.2:139
4387 msgid "Both of these flags are described in POSIX.1-2001."
4391 #: build/C/man2/mmap.2:142
4392 msgid "In addition, zero or more of the following values can be ORed in I<flags>:"
4396 #: build/C/man2/mmap.2:142
4398 msgid "B<MAP_32BIT> (since Linux 2.4.20, 2.6)"
4401 #. See http://lwn.net/Articles/294642 "Tangled up in threads", 19 Aug 08
4403 #: build/C/man2/mmap.2:158
4405 "Put the mapping into the first 2 Gigabytes of the process address space. "
4406 "This flag is supported only on x86-64, for 64-bit programs. It was added to "
4407 "allow thread stacks to be allocated somewhere in the first 2GB of memory, so "
4408 "as to improve context-switch performance on some early 64-bit processors. "
4409 "Modern x86-64 processors no longer have this performance problem, so use of "
4410 "this flag is not required on those systems. The B<MAP_32BIT> flag is "
4411 "ignored when B<MAP_FIXED> is set."
4415 #: build/C/man2/mmap.2:158
4421 #: build/C/man2/mmap.2:163
4422 msgid "Synonym for B<MAP_ANONYMOUS>. Deprecated."
4426 #: build/C/man2/mmap.2:163
4428 msgid "B<MAP_ANONYMOUS>"
4432 #: build/C/man2/mmap.2:185
4434 "The mapping is not backed by any file; its contents are initialized to "
4435 "zero. The I<fd> and I<offset> arguments are ignored; however, some "
4436 "implementations require I<fd> to be -1 if B<MAP_ANONYMOUS> (or B<MAP_ANON>) "
4437 "is specified, and portable applications should ensure this. The use of "
4438 "B<MAP_ANONYMOUS> in conjunction with B<MAP_SHARED> is supported on Linux "
4439 "only since kernel 2.4."
4443 #: build/C/man2/mmap.2:185
4445 msgid "B<MAP_DENYWRITE>"
4448 #. Introduced in 1.1.36, removed in 1.3.24.
4450 #: build/C/man2/mmap.2:193
4452 "This flag is ignored. (Long ago, it signaled that attempts to write to the "
4453 "underlying file should fail with B<ETXTBUSY>. But this was a source of "
4454 "denial-of-service attacks.)"
4458 #: build/C/man2/mmap.2:193
4460 msgid "B<MAP_EXECUTABLE>"
4463 #. Introduced in 1.1.38, removed in 1.3.24. Flag tested in proc_follow_link.
4464 #. (Long ago, it signaled that the underlying file is an executable.
4465 #. However, that information was not really used anywhere.)
4466 #. Linus talked about DOS related to MAP_EXECUTABLE, but he was thinking of
4469 #: build/C/man2/mmap.2:201
4470 msgid "This flag is ignored."
4474 #: build/C/man2/mmap.2:201
4479 #. On some systems, this was required as the opposite of
4480 #. MAP_ANONYMOUS -- mtk, 1 May 2007
4482 #: build/C/man2/mmap.2:207
4483 msgid "Compatibility flag. Ignored."
4487 #: build/C/man2/mmap.2:207
4489 msgid "B<MAP_FIXED>"
4493 #: build/C/man2/mmap.2:225
4495 "Don't interpret I<addr> as a hint: place the mapping at exactly that "
4496 "address. I<addr> must be a multiple of the page size. If the memory region "
4497 "specified by I<addr> and I<len> overlaps pages of any existing mapping(s), "
4498 "then the overlapped part of the existing mapping(s) will be discarded. If "
4499 "the specified address cannot be used, B<mmap>() will fail. Because "
4500 "requiring a fixed address for a mapping is less portable, the use of this "
4501 "option is discouraged."
4505 #: build/C/man2/mmap.2:225
4507 msgid "B<MAP_GROWSDOWN>"
4511 #: build/C/man2/mmap.2:230
4513 "Used for stacks. Indicates to the kernel virtual memory system that the "
4514 "mapping should extend downward in memory."
4518 #: build/C/man2/mmap.2:230
4520 msgid "B<MAP_HUGETLB> (since Linux 2.6.32)"
4524 #: build/C/man2/mmap.2:236
4526 "Allocate the mapping using \"huge pages.\" See the Linux kernel source file "
4527 "I<Documentation/vm/hugetlbpage.txt> for further information."
4531 #: build/C/man2/mmap.2:236
4533 msgid "B<MAP_LOCKED> (since Linux 2.5.37)"
4536 #. If set, the mapped pages will not be swapped out.
4538 #: build/C/man2/mmap.2:242
4540 "Lock the pages of the mapped region into memory in the manner of "
4541 "B<mlock>(2). This flag is ignored in older kernels."
4545 #: build/C/man2/mmap.2:242
4547 msgid "B<MAP_NONBLOCK> (since Linux 2.5.46)"
4551 #: build/C/man2/mmap.2:257
4553 "Only meaningful in conjunction with B<MAP_POPULATE>. Don't perform "
4554 "read-ahead: create page tables entries only for pages that are already "
4555 "present in RAM. Since Linux 2.6.23, this flag causes B<MAP_POPULATE> to do "
4556 "nothing. One day the combination of B<MAP_POPULATE> and B<MAP_NONBLOCK> may "
4561 #: build/C/man2/mmap.2:257
4563 msgid "B<MAP_NORESERVE>"
4567 #: build/C/man2/mmap.2:272
4569 "Do not reserve swap space for this mapping. When swap space is reserved, "
4570 "one has the guarantee that it is possible to modify the mapping. When swap "
4571 "space is not reserved one might get B<SIGSEGV> upon a write if no physical "
4572 "memory is available. See also the discussion of the file "
4573 "I</proc/sys/vm/overcommit_memory> in B<proc>(5). In kernels before 2.6, "
4574 "this flag had effect only for private writable mappings."
4578 #: build/C/man2/mmap.2:272
4580 msgid "B<MAP_POPULATE> (since Linux 2.5.46)"
4584 #: build/C/man2/mmap.2:279
4586 "Populate (prefault) page tables for a mapping. For a file mapping, this "
4587 "causes read-ahead on the file. Later accesses to the mapping will not be "
4588 "blocked by page faults. B<MAP_POPULATE> is supported for private mappings "
4589 "only since Linux 2.6.23."
4593 #: build/C/man2/mmap.2:279
4595 msgid "B<MAP_STACK> (since Linux 2.6.27)"
4598 #. See http://lwn.net/Articles/294642 "Tangled up in threads", 19 Aug 08
4599 #. commit cd98a04a59e2f94fa64d5bf1e26498d27427d5e7
4600 #. http://thread.gmane.org/gmane.linux.kernel/720412
4601 #. "pthread_create() slow for many threads; also time to revisit 64b
4602 #. context switch optimization?"
4604 #: build/C/man2/mmap.2:292
4606 "Allocate the mapping at an address suitable for a process or thread stack. "
4607 "This flag is currently a no-op, but is used in the glibc threading "
4608 "implementation so that if some architectures require special treatment for "
4609 "stack allocations, support can later be transparently implemented for glibc."
4613 #: build/C/man2/mmap.2:292
4615 msgid "B<MAP_UNINITIALIZED> (since Linux 2.6.33)"
4619 #: build/C/man2/mmap.2:302
4621 "Don't clear anonymous pages. This flag is intended to improve performance "
4622 "on embedded devices. This flag is honored only if the kernel was configured "
4623 "with the B<CONFIG_MMAP_ALLOW_UNINITIALIZED> option. Because of the security "
4624 "implications, that option is normally enabled only on embedded devices "
4625 "(i.e., devices where one has complete control of the contents of user "
4630 #: build/C/man2/mmap.2:310
4632 "Of the above flags, only B<MAP_FIXED> is specified in POSIX.1-2001. "
4633 "However, most systems also support B<MAP_ANONYMOUS> (or its synonym "
4638 #: build/C/man2/mmap.2:317
4640 "Some systems document the additional flags B<MAP_AUTOGROW>, "
4641 "B<MAP_AUTORESRV>, B<MAP_COPY>, and B<MAP_LOCAL>."
4645 #: build/C/man2/mmap.2:323
4647 "Memory mapped by B<mmap>() is preserved across B<fork>(2), with the same "
4652 #: build/C/man2/mmap.2:331
4654 "A file is mapped in multiples of the page size. For a file that is not a "
4655 "multiple of the page size, the remaining memory is zeroed when mapped, and "
4656 "writes to that region are not written out to the file. The effect of "
4657 "changing the size of the underlying file of a mapping on the pages that "
4658 "correspond to added or removed regions of the file is unspecified."
4662 #: build/C/man2/mmap.2:331
4668 #: build/C/man2/mmap.2:341
4670 "The B<munmap>() system call deletes the mappings for the specified address "
4671 "range, and causes further references to addresses within the range to "
4672 "generate invalid memory references. The region is also automatically "
4673 "unmapped when the process is terminated. On the other hand, closing the "
4674 "file descriptor does not unmap the region."
4678 #: build/C/man2/mmap.2:351
4680 "The address I<addr> must be a multiple of the page size. All pages "
4681 "containing a part of the indicated range are unmapped, and subsequent "
4682 "references to these pages will generate B<SIGSEGV>. It is not an error if "
4683 "the indicated range does not contain any mapped pages."
4687 #: build/C/man2/mmap.2:351
4689 msgid "Timestamps changes for file-backed mappings"
4693 #: build/C/man2/mmap.2:358
4695 "For file-backed mappings, the I<st_atime> field for the mapped file may be "
4696 "updated at any time between the B<mmap>() and the corresponding unmapping; "
4697 "the first reference to a mapped page will update the field if it has not "
4702 #: build/C/man2/mmap.2:375
4704 "The I<st_ctime> and I<st_mtime> field for a file mapped with B<PROT_WRITE> "
4705 "and B<MAP_SHARED> will be updated after a write to the mapped region, and "
4706 "before a subsequent B<msync>(2) with the B<MS_SYNC> or B<MS_ASYNC> flag, if "
4711 #: build/C/man2/mmap.2:392
4713 "On success, B<mmap>() returns a pointer to the mapped area. On error, the "
4714 "value B<MAP_FAILED> (that is, I<(void\\ *)\\ -1>) is returned, and I<errno> "
4715 "is set appropriately. On success, B<munmap>() returns 0, on failure -1, "
4716 "and I<errno> is set (probably to B<EINVAL>)."
4720 #: build/C/man2/mmap.2:393 build/C/man2/mprotect.2:85 build/C/man3/shm_open.3:187 build/C/man3/shm_open.3:192 build/C/man2/shmctl.2:306 build/C/man2/shmget.2:192 build/C/man2/shmop.2:188
4726 #: build/C/man2/mmap.2:411
4728 "A file descriptor refers to a non-regular file. Or a file mapping was "
4729 "requested, but I<fd> is not open for reading. Or B<MAP_SHARED> was "
4730 "requested and B<PROT_WRITE> is set, but I<fd> is not open in read/write "
4731 "(B<O_RDWR>) mode. Or B<PROT_WRITE> is set, but the file is append-only."
4735 #: build/C/man2/mmap.2:415
4737 "The file has been locked, or too much memory has been locked (see "
4742 #: build/C/man2/mmap.2:421
4743 msgid "I<fd> is not a valid file descriptor (and B<MAP_ANONYMOUS> was not set)."
4747 #: build/C/man2/mmap.2:429
4749 "We don't like I<addr>, I<length>, or I<offset> (e.g., they are too large, or "
4750 "not aligned on a page boundary)."
4754 #: build/C/man2/mmap.2:434
4755 msgid "(since Linux 2.6.12) I<length> was 0."
4759 #: build/C/man2/mmap.2:442
4761 "I<flags> contained neither B<MAP_PRIVATE> or B<MAP_SHARED>, or contained "
4762 "both of these values."
4766 #: build/C/man2/mmap.2:442 build/C/man3/shm_open.3:229 build/C/man2/shmget.2:221
4771 #. [2.6.7] shmem_zero_setup()-->shmem_file_setup()-->get_empty_filp()
4773 #: build/C/man2/mmap.2:450 build/C/man2/shmget.2:225
4774 msgid "The system limit on the total number of open files has been reached."
4778 #: build/C/man2/mmap.2:454
4780 "The underlying filesystem of the specified file does not support memory "
4785 #: build/C/man2/mmap.2:458
4787 "No memory is available, or the process's maximum number of mappings would "
4788 "have been exceeded."
4791 #. (Since 2.4.25 / 2.6.0.)
4793 #: build/C/man2/mmap.2:467
4795 "The I<prot> argument asks for B<PROT_EXEC> but the mapped area belongs to a "
4796 "file on a filesystem that was mounted no-exec."
4800 #: build/C/man2/mmap.2:473
4802 "B<MAP_DENYWRITE> was set but the object specified by I<fd> is open for "
4807 #: build/C/man2/mmap.2:473 build/C/man2/shmctl.2:348
4809 msgid "B<EOVERFLOW>"
4813 #: build/C/man2/mmap.2:485
4815 "On 32-bit architecture together with the large file extension (i.e., using "
4816 "64-bit I<off_t>): the number of pages used for I<length> plus number of "
4817 "pages used for I<offset> would overflow I<unsigned long> (32 bits)."
4821 #: build/C/man2/mmap.2:487
4822 msgid "Use of a mapped region can result in these signals:"
4826 #: build/C/man2/mmap.2:487
4832 #: build/C/man2/mmap.2:490
4833 msgid "Attempted write into a region mapped as read-only."
4837 #: build/C/man2/mmap.2:490
4843 #: build/C/man2/mmap.2:495
4845 "Attempted access to a portion of the buffer that does not correspond to the "
4846 "file (for example, beyond the end of the file, including the case where "
4847 "another process has truncated the file)."
4850 #. SVr4 documents additional error codes ENXIO and ENODEV.
4851 #. SUSv2 documents additional error codes EMFILE and EOVERFLOW.
4853 #: build/C/man2/mmap.2:499
4854 msgid "SVr4, 4.4BSD, POSIX.1-2001."
4857 #. POSIX.1-2001: It shall be defined to -1 or 0 or 200112L.
4858 #. -1: unavailable, 0: ask using sysconf().
4859 #. glibc defines it to 1.
4861 #: build/C/man2/mmap.2:513
4863 "On POSIX systems on which B<mmap>(), B<msync>(2), and B<munmap>() are "
4864 "available, B<_POSIX_MAPPED_FILES> is defined in I<E<lt>unistd.hE<gt>> to a "
4865 "value greater than 0. (See also B<sysconf>(3).)"
4869 #: build/C/man2/mmap.2:526
4871 "On some hardware architectures (e.g., i386), B<PROT_WRITE> implies "
4872 "B<PROT_READ>. It is architecture dependent whether B<PROT_READ> implies "
4873 "B<PROT_EXEC> or not. Portable programs should always set B<PROT_EXEC> if "
4874 "they intend to execute code in the new mapping."
4878 #: build/C/man2/mmap.2:541
4880 "The portable way to create a mapping is to specify I<addr> as 0 (NULL), and "
4881 "omit B<MAP_FIXED> from I<flags>. In this case, the system chooses the "
4882 "address for the mapping; the address is chosen so as not to conflict with "
4883 "any existing mapping, and will not be 0. If the B<MAP_FIXED> flag is "
4884 "specified, and I<addr> is 0 (NULL), then the mapped address will be 0 "
4889 #: build/C/man2/mmap.2:571
4891 "Certain I<flags> constants are defined only if either B<_BSD_SOURCE> or "
4892 "B<_SVID_SOURCE> is defined. (Requiring B<_GNU_SOURCE> also suffices, and "
4893 "requiring that macro specifically would have been more logical, since these "
4894 "flags are all Linux-specific.) The relevant flags are: B<MAP_32BIT>, "
4895 "B<MAP_ANONYMOUS> (and the synonym B<MAP_ANON>), B<MAP_DENYWRITE>, "
4896 "B<MAP_EXECUTABLE>, B<MAP_FILE>, B<MAP_GROWSDOWN>, B<MAP_HUGETLB>, "
4897 "B<MAP_LOCKED>, B<MAP_NONBLOCK>, B<MAP_NORESERVE>, B<MAP_POPULATE>, and "
4902 #: build/C/man2/mmap.2:571
4904 msgid "C library/kernel ABI differences"
4907 #. Since around glibc 2.1/2.2, depending on the platform.
4909 #: build/C/man2/mmap.2:586
4911 "This page describes the interface provided by the glibc B<mmap>() wrapper "
4912 "function. Originally, this function invoked a system call of the same "
4913 "name. Since kernel 2.4, that system call has been superseded by "
4914 "B<mmap2>(2), and nowadays the glibc B<mmap>() wrapper function invokes "
4915 "B<mmap2>(2) with a suitably adjusted value for I<offset>."
4919 #: build/C/man2/mmap.2:591
4921 "On Linux there are no guarantees like those suggested above under "
4922 "B<MAP_NORESERVE>. By default, any process can be killed at any moment when "
4923 "the system runs out of memory."
4927 #: build/C/man2/mmap.2:598
4929 "In kernels before 2.6.7, the B<MAP_POPULATE> flag has effect only if I<prot> "
4930 "is specified as B<PROT_NONE>."
4934 #: build/C/man2/mmap.2:613
4936 "SUSv3 specifies that B<mmap>() should fail if I<length> is 0. However, in "
4937 "kernels before 2.6.12, B<mmap>() succeeded in this case: no mapping was "
4938 "created and the call returned I<addr>. Since kernel 2.6.12, B<mmap>() "
4939 "fails with the error B<EINVAL> for this case."
4943 #: build/C/man2/mmap.2:629
4945 "POSIX specifies that the system shall always zero fill any partial page at "
4946 "the end of the object and that system will never write any modification of "
4947 "the object beyond its end. On Linux, when you write data to such partial "
4948 "page after the end of the object, the data stays in the page cache even "
4949 "after the file is closed and unmapped and even though the data is never "
4950 "written to the file itself, subsequent mappings may see the modified "
4951 "content. In some cases, this could be fixed by calling B<msync>(2) before "
4952 "the unmap takes place; however, this doesn't work on tmpfs (for example, "
4953 "when using POSIX shared memory interface documented in B<shm_overview>(7))."
4957 #: build/C/man2/mmap.2:641
4959 "The following program prints part of the file specified in its first "
4960 "command-line argument to standard output. The range of bytes to be printed "
4961 "is specified via offset and length values in the second and third "
4962 "command-line arguments. The program creates a memory mapping of the "
4963 "required pages of the file and then uses B<write>(2) to output the desired "
4968 #: build/C/man2/mmap.2:649
4971 "#include E<lt>sys/mman.hE<gt>\n"
4972 "#include E<lt>sys/stat.hE<gt>\n"
4973 "#include E<lt>fcntl.hE<gt>\n"
4974 "#include E<lt>stdio.hE<gt>\n"
4975 "#include E<lt>stdlib.hE<gt>\n"
4976 "#include E<lt>unistd.hE<gt>\n"
4980 #: build/C/man2/mmap.2:652 build/C/man2/mprotect.2:177
4983 "#define handle_error(msg) \\e\n"
4984 " do { perror(msg); exit(EXIT_FAILURE); } while (0)\n"
4988 #: build/C/man2/mmap.2:662
4992 "main(int argc, char *argv[])\n"
4996 " struct stat sb;\n"
4997 " off_t offset, pa_offset;\n"
5003 #: build/C/man2/mmap.2:667
5006 " if (argc E<lt> 3 || argc E<gt> 4) {\n"
5007 " fprintf(stderr, \"%s file offset [length]\\en\", argv[0]);\n"
5008 " exit(EXIT_FAILURE);\n"
5013 #: build/C/man2/mmap.2:671
5016 " fd = open(argv[1], O_RDONLY);\n"
5018 " handle_error(\"open\");\n"
5022 #: build/C/man2/mmap.2:674
5025 " if (fstat(fd, &sb) == -1) /* To obtain file size */\n"
5026 " handle_error(\"fstat\");\n"
5030 #: build/C/man2/mmap.2:678
5033 " offset = atoi(argv[2]);\n"
5034 " pa_offset = offset & ~(sysconf(_SC_PAGE_SIZE) - 1);\n"
5035 " /* offset for mmap() must be page aligned */\n"
5039 #: build/C/man2/mmap.2:683
5042 " if (offset E<gt>= sb.st_size) {\n"
5043 " fprintf(stderr, \"offset is past end of file\\en\");\n"
5044 " exit(EXIT_FAILURE);\n"
5049 #: build/C/man2/mmap.2:689
5052 " if (argc == 4) {\n"
5053 " length = atoi(argv[3]);\n"
5054 " if (offset + length E<gt> sb.st_size)\n"
5055 " length = sb.st_size - offset;\n"
5056 " /* Can\\(aqt display bytes past end of file */\n"
5060 #: build/C/man2/mmap.2:693
5063 " } else { /* No length arg ==E<gt> display to end of file */\n"
5064 " length = sb.st_size - offset;\n"
5069 #: build/C/man2/mmap.2:698
5072 " addr = mmap(NULL, length + offset - pa_offset, PROT_READ,\n"
5073 " MAP_PRIVATE, fd, pa_offset);\n"
5074 " if (addr == MAP_FAILED)\n"
5075 " handle_error(\"mmap\");\n"
5079 #: build/C/man2/mmap.2:703
5082 " s = write(STDOUT_FILENO, addr + offset - pa_offset, length);\n"
5083 " if (s != length) {\n"
5085 " handle_error(\"write\");\n"
5089 #: build/C/man2/mmap.2:707
5092 " fprintf(stderr, \"partial write\");\n"
5093 " exit(EXIT_FAILURE);\n"
5098 #: build/C/man2/mmap.2:724
5100 "B<getpagesize>(2), B<mincore>(2), B<mlock>(2), B<mmap2>(2), B<mprotect>(2), "
5101 "B<mremap>(2), B<msync>(2), B<remap_file_pages>(2), B<setrlimit>(2), "
5102 "B<shmat>(2), B<shm_open>(3), B<shm_overview>(7)"
5106 #: build/C/man2/mmap.2:731
5108 "The descriptions of the following files in B<proc>(5): I</proc/[pid]/maps>, "
5109 "I</proc/[pid]/map_files>, and I</proc/[pid]/smaps>."
5113 #: build/C/man2/mmap.2:736 build/C/man2/msync.2:151
5114 msgid "B.O. Gallmeister, POSIX.4, O'Reilly, pp. 128-129 and 389-391."
5118 #: build/C/man2/mmap2.2:29
5124 #: build/C/man2/mmap2.2:29
5130 #: build/C/man2/mmap2.2:32
5131 msgid "mmap2 - map files or devices into memory"
5135 #: build/C/man2/mmap2.2:38
5138 "B<void *mmap2(void *>I<addr>B<, size_t >I<length>B<, int >I<prot>B<,>\n"
5139 "B< int >I<flags>B<, int >I<fd>B<, off_t >I<pgoffset>B<);>\n"
5143 #: build/C/man2/mmap2.2:43
5145 "This is probably not the system call that you are interested in; instead, "
5146 "see B<mmap>(2), which describes the glibc wrapper function that invokes this "
5151 #: build/C/man2/mmap2.2:54
5153 "The B<mmap2>() system call provides the same interface as B<mmap>(2), "
5154 "except that the final argument specifies the offset into the file in "
5155 "4096-byte units (instead of bytes, as is done by B<mmap>(2)). This enables "
5156 "applications that use a 32-bit I<off_t> to map large files (up to 2^44 "
5161 #: build/C/man2/mmap2.2:61
5163 "On success, B<mmap2>() returns a pointer to the mapped area. On error, -1 "
5164 "is returned and I<errno> is set appropriately."
5168 #: build/C/man2/mmap2.2:65
5169 msgid "Problem with getting the data from user space."
5173 #: build/C/man2/mmap2.2:70
5175 "(Various platforms where the page size is not 4096 bytes.) I<offset\\ *\\ "
5176 "4096> is not a multiple of the system page size."
5180 #: build/C/man2/mmap2.2:74
5181 msgid "B<mmap2>() can also return any of the errors described in B<mmap>(2)."
5185 #: build/C/man2/mmap2.2:77
5186 msgid "B<mmap2>() is available since Linux 2.3.31."
5190 #: build/C/man2/mmap2.2:79 build/C/man2/subpage_prot.2:98
5191 msgid "This system call is Linux-specific."
5195 #: build/C/man2/mmap2.2:86
5197 "On architectures where this system call is present, the glibc B<mmap>() "
5198 "wrapper function invokes this system call rather than the B<mmap>(2) system "
5203 #: build/C/man2/mmap2.2:88
5204 msgid "This system call does not exist on x86-64."
5207 #. ia64 can have page sizes ranging from 4kB to 64kB.
5208 #. On cris, it looks like the unit might also be the page size,
5209 #. which is 8192 bytes. -- mtk, June 2007
5211 #: build/C/man2/mmap2.2:95
5213 "On ia64, the unit for I<offset> is actually the system page size, rather "
5218 #: build/C/man2/mmap2.2:101
5219 msgid "B<getpagesize>(2), B<mmap>(2), B<mremap>(2), B<msync>(2), B<shm_open>(3)"
5223 #: build/C/man2/mprotect.2:39
5229 #: build/C/man2/mprotect.2:39
5235 #: build/C/man2/mprotect.2:42
5236 msgid "mprotect - set protection on a region of memory"
5240 #: build/C/man2/mprotect.2:47
5242 msgid "B<int mprotect(void *>I<addr>B<, size_t >I<len>B<, int >I<prot>B<);>\n"
5246 #: build/C/man2/mprotect.2:55
5248 "B<mprotect>() changes protection for the calling process's memory page(s) "
5249 "containing any part of the address range in the interval [I<addr>,\\ "
5250 "I<addr>+I<len>-1]. I<addr> must be aligned to a page boundary."
5254 #: build/C/man2/mprotect.2:60
5256 "If the calling process tries to access memory in a manner that violates the "
5257 "protection, then the kernel generates a B<SIGSEGV> signal for the process."
5261 #: build/C/man2/mprotect.2:65
5263 "I<prot> is either B<PROT_NONE> or a bitwise-or of the other values in the "
5268 #: build/C/man2/mprotect.2:68
5269 msgid "The memory cannot be accessed at all."
5273 #: build/C/man2/mprotect.2:71
5274 msgid "The memory can be read."
5278 #: build/C/man2/mprotect.2:74
5279 msgid "The memory can be modified."
5283 #: build/C/man2/mprotect.2:77
5284 msgid "The memory can be executed."
5288 #: build/C/man2/mprotect.2:84
5290 "On success, B<mprotect>() returns zero. On error, -1 is returned, and "
5291 "I<errno> is set appropriately."
5295 #: build/C/man2/mprotect.2:94
5297 "The memory cannot be given the specified access. This can happen, for "
5298 "example, if you B<mmap>(2) a file to which you have read-only access, then "
5299 "ask B<mprotect>() to mark it B<PROT_WRITE>."
5302 #. Or: both PROT_GROWSUP and PROT_GROWSDOWN were specified in 'prot'.
5304 #: build/C/man2/mprotect.2:99
5305 msgid "I<addr> is not a valid pointer, or not a multiple of the system page size."
5309 #: build/C/man2/mprotect.2:102
5310 msgid "Internal kernel structures could not be allocated."
5314 #: build/C/man2/mprotect.2:112
5316 "Addresses in the range [I<addr>, I<addr>+I<len>-1] are invalid for the "
5317 "address space of the process, or specify one or more pages that are not "
5318 "mapped. (Before kernel 2.4.19, the error B<EFAULT> was incorrectly produced "
5322 #. SVr4 defines an additional error
5323 #. code EAGAIN. The SVr4 error conditions don't map neatly onto Linux's.
5325 #: build/C/man2/mprotect.2:121
5327 "SVr4, POSIX.1-2001. POSIX says that the behavior of B<mprotect>() is "
5328 "unspecified if it is applied to a region of memory that was not obtained via "
5333 #: build/C/man2/mprotect.2:128
5335 "On Linux it is always permissible to call B<mprotect>() on any address in a "
5336 "process's address space (except for the kernel vsyscall area). In "
5337 "particular it can be used to change existing code mappings to be writable."
5341 #: build/C/man2/mprotect.2:138
5343 "Whether B<PROT_EXEC> has any effect different from B<PROT_READ> is "
5344 "architecture- and kernel version-dependent. On some hardware architectures "
5345 "(e.g., i386), B<PROT_WRITE> implies B<PROT_READ>."
5349 #: build/C/man2/mprotect.2:147
5351 "POSIX.1-2001 says that an implementation may permit access other than that "
5352 "specified in I<prot>, but at a minimum can allow write access only if "
5353 "B<PROT_WRITE> has been set, and must not allow any access if B<PROT_NONE> "
5358 #: build/C/man2/mprotect.2:153
5360 "The program below allocates four pages of memory, makes the third of these "
5361 "pages read-only, and then executes a loop that walks upward through the "
5362 "allocated region modifying bytes."
5366 #: build/C/man2/mprotect.2:156
5367 msgid "An example of what we might see when running the program is the following:"
5371 #: build/C/man2/mprotect.2:162
5375 "Start of region: 0x804c000\n"
5376 "Got SIGSEGV at address: 0x804e000\n"
5380 #: build/C/man2/mprotect.2:174
5383 "#include E<lt>unistd.hE<gt>\n"
5384 "#include E<lt>signal.hE<gt>\n"
5385 "#include E<lt>stdio.hE<gt>\n"
5386 "#include E<lt>malloc.hE<gt>\n"
5387 "#include E<lt>stdlib.hE<gt>\n"
5388 "#include E<lt>errno.hE<gt>\n"
5389 "#include E<lt>sys/mman.hE<gt>\n"
5393 #: build/C/man2/mprotect.2:179
5395 msgid "static char *buffer;\n"
5399 #: build/C/man2/mprotect.2:187
5403 "handler(int sig, siginfo_t *si, void *unused)\n"
5405 " printf(\"Got SIGSEGV at address: 0x%lx\\en\",\n"
5406 " (long) si-E<gt>si_addr);\n"
5407 " exit(EXIT_FAILURE);\n"
5412 #: build/C/man2/mprotect.2:194
5416 "main(int argc, char *argv[])\n"
5420 " struct sigaction sa;\n"
5424 #: build/C/man2/mprotect.2:200
5427 " sa.sa_flags = SA_SIGINFO;\n"
5428 " sigemptyset(&sa.sa_mask);\n"
5429 " sa.sa_sigaction = handler;\n"
5430 " if (sigaction(SIGSEGV, &sa, NULL) == -1)\n"
5431 " handle_error(\"sigaction\");\n"
5435 #: build/C/man2/mprotect.2:204
5438 " pagesize = sysconf(_SC_PAGE_SIZE);\n"
5439 " if (pagesize == -1)\n"
5440 " handle_error(\"sysconf\");\n"
5444 #: build/C/man2/mprotect.2:207
5447 " /* Allocate a buffer aligned on a page boundary;\n"
5448 " initial protection is PROT_READ | PROT_WRITE */\n"
5452 #: build/C/man2/mprotect.2:211
5455 " buffer = memalign(pagesize, 4 * pagesize);\n"
5456 " if (buffer == NULL)\n"
5457 " handle_error(\"memalign\");\n"
5461 #: build/C/man2/mprotect.2:213
5463 msgid " printf(\"Start of region: 0x%lx\\en\", (long) buffer);\n"
5467 #: build/C/man2/mprotect.2:217
5470 " if (mprotect(buffer + pagesize * 2, pagesize,\n"
5471 " PROT_READ) == -1)\n"
5472 " handle_error(\"mprotect\");\n"
5476 #: build/C/man2/mprotect.2:220
5479 " for (p = buffer ; ; )\n"
5480 " *(p++) = \\(aqa\\(aq;\n"
5484 #: build/C/man2/mprotect.2:224
5487 " printf(\"Loop completed\\en\"); /* Should never happen */\n"
5488 " exit(EXIT_SUCCESS);\n"
5493 #: build/C/man2/mprotect.2:228
5494 msgid "B<mmap>(2), B<sysconf>(3)"
5498 #: build/C/man2/mremap.2:30
5504 #: build/C/man2/mremap.2:30
5510 #: build/C/man2/mremap.2:33
5511 msgid "mremap - remap a virtual memory address"
5515 #: build/C/man2/mremap.2:36
5517 msgid "B<#define _GNU_SOURCE> /* See feature_test_macros(7) */\n"
5521 #: build/C/man2/mremap.2:41
5524 "B<void *mremap(void *>I<old_address>B<, size_t >I<old_size>B<,>\n"
5525 "B< size_t >I<new_size>B<, int >I<flags>B<, ... /* void "
5526 "*>I<new_address>B< */);>\n"
5530 #: build/C/man2/mremap.2:47
5532 "B<mremap>() expands (or shrinks) an existing memory mapping, potentially "
5533 "moving it at the same time (controlled by the I<flags> argument and the "
5534 "available virtual address space)."
5538 #: build/C/man2/mremap.2:61
5540 "I<old_address> is the old address of the virtual memory block that you want "
5541 "to expand (or shrink). Note that I<old_address> has to be page aligned. "
5542 "I<old_size> is the old size of the virtual memory block. I<new_size> is the "
5543 "requested size of the virtual memory block after the resize. An optional "
5544 "fifth argument, I<new_address>, may be provided; see the description of "
5545 "B<MREMAP_FIXED> below."
5549 #: build/C/man2/mremap.2:73
5551 "In Linux the memory is divided into pages. A user process has (one or) "
5552 "several linear virtual memory segments. Each virtual memory segment has one "
5553 "or more mappings to real memory pages (in the page table). Each virtual "
5554 "memory segment has its own protection (access rights), which may cause a "
5555 "segmentation violation if the memory is accessed incorrectly (e.g., writing "
5556 "to a read-only segment). Accessing virtual memory outside of the segments "
5557 "will also cause a segmentation violation."
5561 #: build/C/man2/mremap.2:81
5563 "B<mremap>() uses the Linux page table scheme. B<mremap>() changes the "
5564 "mapping between virtual addresses and memory pages. This can be used to "
5565 "implement a very efficient B<realloc>(3)."
5569 #: build/C/man2/mremap.2:83
5570 msgid "The I<flags> bit-mask argument may be 0, or include the following flag:"
5574 #: build/C/man2/mremap.2:83
5576 msgid "B<MREMAP_MAYMOVE>"
5580 #: build/C/man2/mremap.2:95
5582 "By default, if there is not sufficient space to expand a mapping at its "
5583 "current location, then B<mremap>() fails. If this flag is specified, then "
5584 "the kernel is permitted to relocate the mapping to a new virtual address, if "
5585 "necessary. If the mapping is relocated, then absolute pointers into the old "
5586 "mapping location become invalid (offsets relative to the starting address of "
5587 "the mapping should be employed)."
5591 #: build/C/man2/mremap.2:95
5593 msgid "B<MREMAP_FIXED> (since Linux 2.3.31)"
5597 #: build/C/man2/mremap.2:117
5599 "This flag serves a similar purpose to the B<MAP_FIXED> flag of B<mmap>(2). "
5600 "If this flag is specified, then B<mremap>() accepts a fifth argument, "
5601 "I<void\\ *new_address>, which specifies a page-aligned address to which the "
5602 "mapping must be moved. Any previous mapping at the address range specified "
5603 "by I<new_address> and I<new_size> is unmapped. If B<MREMAP_FIXED> is "
5604 "specified, then B<MREMAP_MAYMOVE> must also be specified."
5608 #: build/C/man2/mremap.2:127
5610 "If the memory segment specified by I<old_address> and I<old_size> is locked "
5611 "(using B<mlock>(2) or similar), then this lock is maintained when the "
5612 "segment is resized and/or relocated. As a consequence, the amount of memory "
5613 "locked by the process may change."
5617 #: build/C/man2/mremap.2:135
5619 "On success B<mremap>() returns a pointer to the new virtual memory area. "
5620 "On error, the value B<MAP_FAILED> (that is, I<(void\\ *)\\ -1>) is returned, "
5621 "and I<errno> is set appropriately."
5625 #: build/C/man2/mremap.2:142
5627 "The caller tried to expand a memory segment that is locked, but this was not "
5628 "possible without exceeding the B<RLIMIT_MEMLOCK> resource limit."
5632 #: build/C/man2/mremap.2:151
5634 "\"Segmentation fault.\" Some address in the range I<old_address> to "
5635 "I<old_address>+I<old_size> is an invalid virtual memory address for this "
5636 "process. You can also get B<EFAULT> even if there exist mappings that cover "
5637 "the whole address space requested, but those mappings are of different "
5642 #: build/C/man2/mremap.2:179
5644 "An invalid argument was given. Possible causes are: I<old_address> was not "
5645 "page aligned; a value other than B<MREMAP_MAYMOVE> or B<MREMAP_FIXED> was "
5646 "specified in I<flags>; I<new_size> was zero; I<new_size> or I<new_address> "
5647 "was invalid; or the new address range specified by I<new_address> and "
5648 "I<new_size> overlapped the old address range specified by I<old_address> and "
5649 "I<old_size>; or B<MREMAP_FIXED> was specified without also specifying "
5650 "B<MREMAP_MAYMOVE>."
5654 #: build/C/man2/mremap.2:185
5656 "The memory area cannot be expanded at the current virtual address, and the "
5657 "B<MREMAP_MAYMOVE> flag is not set in I<flags>. Or, there is not enough "
5658 "(virtual) memory available."
5661 #. 4.2BSD had a (never actually implemented)
5663 #. call with completely different semantics.
5665 #: build/C/man2/mremap.2:191
5667 "This call is Linux-specific, and should not be used in programs intended to "
5672 #: build/C/man2/mremap.2:199
5674 "Prior to version 2.4, glibc did not expose the definition of "
5675 "B<MREMAP_FIXED>, and the prototype for B<mremap>() did not allow for the "
5676 "I<new_address> argument."
5680 #: build/C/man2/mremap.2:208
5682 "B<brk>(2), B<getpagesize>(2), B<getrlimit>(2), B<mlock>(2), B<mmap>(2), "
5683 "B<sbrk>(2), B<malloc>(3), B<realloc>(3)"
5687 #: build/C/man2/mremap.2:214
5689 "Your favorite text book on operating systems for more information on paged "
5690 "memory (e.g., I<Modern Operating Systems> by Andrew S. Tanenbaum, I<Inside "
5691 "Linux> by Randolf Bentson, I<The Design of the UNIX Operating System> by "
5696 #: build/C/man2/msync.2:25
5702 #: build/C/man2/msync.2:25
5708 #: build/C/man2/msync.2:28
5709 msgid "msync - synchronize a file with a memory map"
5713 #: build/C/man2/msync.2:32
5714 msgid "B<int msync(void *>I<addr>B<, size_t >I<length>B<, int >I<flags>B<);>"
5718 #: build/C/man2/msync.2:48
5720 "B<msync>() flushes changes made to the in-core copy of a file that was "
5721 "mapped into memory using B<mmap>(2) back to the filesystem. Without use of "
5722 "this call there is no guarantee that changes are written back before "
5723 "B<munmap>(2) is called. To be more precise, the part of the file that "
5724 "corresponds to the memory area starting at I<addr> and having length "
5725 "I<length> is updated."
5729 #: build/C/man2/msync.2:68
5731 "The I<flags> argument may have the bits B<MS_ASYNC>, B<MS_SYNC>, and "
5732 "B<MS_INVALIDATE> set, but not both B<MS_ASYNC> and B<MS_SYNC>. B<MS_ASYNC> "
5733 "specifies that an update be scheduled, but the call returns immediately. "
5734 "B<MS_SYNC> asks for an update and waits for it to complete. "
5735 "B<MS_INVALIDATE> asks to invalidate other mappings of the same file (so that "
5736 "they can be updated with the fresh values just written)."
5740 #: build/C/man2/msync.2:73
5742 "On success, zero is returned. On error, -1 is returned, and I<errno> is set "
5747 #: build/C/man2/msync.2:74
5753 #: build/C/man2/msync.2:80
5755 "B<MS_INVALIDATE> was specified in I<flags>, and a memory lock exists for the "
5756 "specified address range."
5760 #: build/C/man2/msync.2:93
5762 "I<addr> is not a multiple of PAGESIZE; or any bit other than B<MS_ASYNC> | "
5763 "B<MS_INVALIDATE> | B<MS_SYNC> is set in I<flags>; or both B<MS_SYNC> and "
5764 "B<MS_ASYNC> are set in I<flags>."
5768 #: build/C/man2/msync.2:96
5769 msgid "The indicated memory (or part of it) was not mapped."
5773 #: build/C/man2/msync.2:98 build/C/man3/posix_fallocate.3:110 build/C/man3/shm_open.3:253 build/C/man7/shm_overview.7:103
5774 msgid "POSIX.1-2001."
5778 #: build/C/man2/msync.2:105
5780 "This call was introduced in Linux 1.3.21, and then used B<EFAULT> instead of "
5781 "B<ENOMEM>. In Linux 2.4.19, this was changed to the POSIX value B<ENOMEM>."
5784 #. POSIX.1-2001: It shall be defined to -1 or 0 or 200112L.
5785 #. -1: unavailable, 0: ask using sysconf().
5786 #. glibc defines them to 1.
5788 #: build/C/man2/msync.2:120
5790 "On POSIX systems on which B<msync>() is available, both "
5791 "B<_POSIX_MAPPED_FILES> and B<_POSIX_SYNCHRONIZED_IO> are defined in "
5792 "I<E<lt>unistd.hE<gt>> to a value greater than 0. (See also B<sysconf>(3).)"
5795 #. commit 204ec841fbea3e5138168edbc3a76d46747cc987
5797 #: build/C/man2/msync.2:147
5799 "According to POSIX, either B<MS_SYNC> or B<MS_ASYNC> must be specified in "
5800 "I<flags>, and indeed failure to include one of these flags will cause "
5801 "B<msync>() to fail on some systems. However, Linux permits a call to "
5802 "B<msync>() that specifies neither of these flags, with semantics that are "
5803 "(currently) equivalent to specifying B<MS_ASYNC>. (Since Linux 2.6.19, "
5804 "B<MS_ASYNC> is in fact a no-op, since the kernel properly tracks dirty pages "
5805 "and flushes them to storage as necessary.) Notwithstanding the Linux "
5806 "behavior, portable, future-proof applications should ensure that they "
5807 "specify either B<MS_SYNC> or B<MS_ASYNC> in I<flags>."
5811 #: build/C/man2/msync.2:149 build/C/man7/shm_overview.7:46
5817 #: build/C/man3/mtrace.3:25
5823 #: build/C/man3/mtrace.3:25
5829 #: build/C/man3/mtrace.3:28
5830 msgid "mtrace, muntrace - malloc tracing"
5834 #: build/C/man3/mtrace.3:30
5835 msgid "B<#include E<lt>mcheck.hE<gt>>"
5839 #: build/C/man3/mtrace.3:32
5840 msgid "B<void mtrace(void);>"
5844 #: build/C/man3/mtrace.3:34
5845 msgid "B<void muntrace(void);>"
5849 #: build/C/man3/mtrace.3:46
5851 "The B<mtrace>() function installs hook functions for the memory-allocation "
5852 "functions (B<malloc>(3), B<realloc>(3) B<memalign>(3), B<free>(3)). These "
5853 "hook functions record tracing information about memory allocation and "
5854 "deallocation. The tracing information can be used to discover memory leaks "
5855 "and attempts to free nonallocated memory in a program."
5859 #: build/C/man3/mtrace.3:57
5861 "The B<muntrace>() function disables the hook functions installed by "
5862 "B<mtrace>(), so that tracing information is no longer recorded for the "
5863 "memory-allocation functions. If no hook functions were successfully "
5864 "installed by B<mtrace>(), B<muntrace>() does nothing."
5868 #: build/C/man3/mtrace.3:65
5870 "When B<mtrace>() is called, it checks the value of the environment variable "
5871 "B<MALLOC_TRACE>, which should contain the pathname of a file in which the "
5872 "tracing information is to be recorded. If the pathname is successfully "
5873 "opened, it is truncated to zero length."
5877 #: build/C/man3/mtrace.3:78
5879 "If B<MALLOC_TRACE> is not set, or the pathname it specifies is invalid or "
5880 "not writable, then no hook functions are installed, and B<mtrace>() has no "
5881 "effect. In set-user-ID and set-group-ID programs, B<MALLOC_TRACE> is "
5882 "ignored, and B<mtrace>() has no effect."
5886 #: build/C/man3/mtrace.3:86
5888 "In normal usage, B<mtrace>() is called once at the start of execution of a "
5889 "program, and B<muntrace>() is never called."
5893 #: build/C/man3/mtrace.3:96
5895 "The tracing output produced after a call to B<mtrace>() is textual, but not "
5896 "designed to be human readable. The GNU C library provides a Perl script, "
5897 "B<mtrace>(1), that interprets the trace log and produces human-readable "
5898 "output. For best results, the traced program should be compiled with "
5899 "debugging enabled, so that line-number information is recorded in the "
5904 #: build/C/man3/mtrace.3:102
5906 "The tracing performed by B<mtrace>() incurs a performance penalty (if "
5907 "B<MALLOC_TRACE> points to a valid, writable pathname)."
5911 #: build/C/man3/mtrace.3:108
5913 "The line-number information produced by B<mtrace>(1) is not always precise: "
5914 "the line number references may refer to the previous or following (nonblank) "
5915 "line of the source code."
5919 #: build/C/man3/mtrace.3:115
5921 "The shell session below demonstrates the use of the B<mtrace>() function "
5922 "and the B<mtrace>(1) command in a program that has memory leaks at two "
5923 "different locations. The demonstration uses the following program:"
5927 #: build/C/man3/mtrace.3:122
5930 "$ B<cat t_mtrace.c>\n"
5931 "#include E<lt>mcheck.hE<gt>\n"
5932 "#include E<lt>stdlib.hE<gt>\n"
5933 "#include E<lt>stdio.hE<gt>\n"
5937 #: build/C/man3/mtrace.3:127
5941 "main(int argc, char *argv[])\n"
5947 #: build/C/man3/mtrace.3:129
5949 msgid " mtrace();\n"
5953 #: build/C/man3/mtrace.3:132
5956 " for (j = 0; j E<lt> 2; j++)\n"
5957 " malloc(100); /* Never freed--a memory leak */\n"
5961 #: build/C/man3/mtrace.3:136
5964 " calloc(16, 16); /* Never freed--a memory leak */\n"
5965 " exit(EXIT_SUCCESS);\n"
5970 #: build/C/man3/mtrace.3:142
5972 "When we run the program as follows, we see that B<mtrace>() diagnosed "
5973 "memory leaks at two different locations in the program:"
5977 #: build/C/man3/mtrace.3:155
5980 "$ B<cc -g t_mtrace.c -o t_mtrace>\n"
5981 "$ B<export MALLOC_TRACE=/tmp/t>\n"
5983 "$ B<mtrace ./t_mtrace $MALLOC_TRACE>\n"
5984 "Memory not freed:\n"
5985 "-----------------\n"
5986 " Address Size Caller\n"
5987 "0x084c9378 0x64 at /home/cecilia/t_mtrace.c:12\n"
5988 "0x084c93e0 0x64 at /home/cecilia/t_mtrace.c:12\n"
5989 "0x084c9448 0x100 at /home/cecilia/t_mtrace.c:16\n"
5993 #: build/C/man3/mtrace.3:167
5995 "The first two messages about unfreed memory correspond to the two "
5996 "B<malloc>(3) calls inside the I<for> loop. The final message corresponds "
5997 "to the call to B<calloc>(3) (which in turn calls B<malloc>(3))."
6001 #: build/C/man3/mtrace.3:172
6002 msgid "B<mtrace>(1), B<malloc>(3), B<malloc_hook>(3), B<mcheck>(3)"
6006 #: build/C/man2/posix_fadvise.2:28
6008 msgid "POSIX_FADVISE"
6012 #: build/C/man2/posix_fadvise.2:31
6013 msgid "posix_fadvise - predeclare an access pattern for file data"
6017 #: build/C/man2/posix_fadvise.2:34 build/C/man3/posix_fallocate.3:31
6019 msgid "B<#include E<lt>fcntl.hE<gt>>\n"
6023 #: build/C/man2/posix_fadvise.2:37
6026 "B<int posix_fadvise(int >I<fd>B<, off_t >I<offset>B<, off_t >I<len>B<, int "
6031 #: build/C/man2/posix_fadvise.2:46
6032 msgid "B<posix_fadvise>():"
6036 #: build/C/man2/posix_fadvise.2:48 build/C/man3/posix_fallocate.3:44
6037 msgid "_XOPEN_SOURCE\\ E<gt>=\\ 600 || _POSIX_C_SOURCE\\ E<gt>=\\ 200112L"
6041 #: build/C/man2/posix_fadvise.2:56
6043 "Programs can use B<posix_fadvise>() to announce an intention to access file "
6044 "data in a specific pattern in the future, thus allowing the kernel to "
6045 "perform appropriate optimizations."
6049 #: build/C/man2/posix_fadvise.2:63
6051 "The I<advice> applies to a (not necessarily existent) region starting at "
6052 "I<offset> and extending for I<len> bytes (or until the end of the file if "
6053 "I<len> is 0) within the file referred to by I<fd>. The I<advice> is not "
6054 "binding; it merely constitutes an expectation on behalf of the application."
6058 #: build/C/man2/posix_fadvise.2:65
6059 msgid "Permissible values for I<advice> include:"
6063 #: build/C/man2/posix_fadvise.2:65
6065 msgid "B<POSIX_FADV_NORMAL>"
6069 #: build/C/man2/posix_fadvise.2:71
6071 "Indicates that the application has no advice to give about its access "
6072 "pattern for the specified data. If no advice is given for an open file, "
6073 "this is the default assumption."
6077 #: build/C/man2/posix_fadvise.2:71
6079 msgid "B<POSIX_FADV_SEQUENTIAL>"
6083 #: build/C/man2/posix_fadvise.2:75
6085 "The application expects to access the specified data sequentially (with "
6086 "lower offsets read before higher ones)."
6090 #: build/C/man2/posix_fadvise.2:75
6092 msgid "B<POSIX_FADV_RANDOM>"
6096 #: build/C/man2/posix_fadvise.2:78
6097 msgid "The specified data will be accessed in random order."
6101 #: build/C/man2/posix_fadvise.2:78
6103 msgid "B<POSIX_FADV_NOREUSE>"
6107 #: build/C/man2/posix_fadvise.2:81
6108 msgid "The specified data will be accessed only once."
6112 #: build/C/man2/posix_fadvise.2:81
6114 msgid "B<POSIX_FADV_WILLNEED>"
6118 #: build/C/man2/posix_fadvise.2:84
6119 msgid "The specified data will be accessed in the near future."
6123 #: build/C/man2/posix_fadvise.2:84
6125 msgid "B<POSIX_FADV_DONTNEED>"
6129 #: build/C/man2/posix_fadvise.2:87
6130 msgid "The specified data will not be accessed in the near future."
6134 #: build/C/man2/posix_fadvise.2:90
6135 msgid "On success, zero is returned. On error, an error number is returned."
6139 #: build/C/man2/posix_fadvise.2:94
6140 msgid "The I<fd> argument was not a valid file descriptor."
6144 #: build/C/man2/posix_fadvise.2:97
6145 msgid "An invalid value was specified for I<advice>."
6148 #. commit 87ba81dba431232548ce29d5d224115d0c2355ac
6150 #: build/C/man2/posix_fadvise.2:107
6152 "The specified file descriptor refers to a pipe or FIFO. (B<ESPIPE> is the "
6153 "error specified by POSIX, but before kernel version 2.16, Linux returned "
6154 "B<EINVAL> in this case.)"
6157 #. of fadvise64_64()
6159 #: build/C/man2/posix_fadvise.2:115
6161 "Kernel support first appeared in Linux 2.5.60; the underlying system call is "
6162 "called B<fadvise64>(). Library support has been provided since glibc "
6163 "version 2.2, via the wrapper function B<posix_fadvise>()."
6166 #. commit d3ac21cacc24790eb45d735769f35753f5b56ceb
6168 #: build/C/man2/posix_fadvise.2:122
6170 "Since Linux 3.18, support for the underlying system call is optional, "
6171 "depending on the setting of the B<CONFIG_ADVISE_SYSCALLS> configuration "
6176 #: build/C/man2/posix_fadvise.2:131
6178 "POSIX.1-2001. Note that the type of the I<len> argument was changed from "
6179 "I<size_t> to I<off_t> in POSIX.1-2003 TC1."
6183 #: build/C/man2/posix_fadvise.2:137
6185 "Under Linux, B<POSIX_FADV_NORMAL> sets the readahead window to the default "
6186 "size for the backing device; B<POSIX_FADV_SEQUENTIAL> doubles this size, and "
6187 "B<POSIX_FADV_RANDOM> disables file readahead entirely. These changes affect "
6188 "the entire file, not just the specified region (but other open file handles "
6189 "to the same file are unaffected)."
6193 #: build/C/man2/posix_fadvise.2:144
6195 "B<POSIX_FADV_WILLNEED> initiates a nonblocking read of the specified region "
6196 "into the page cache. The amount of data read may be decreased by the kernel "
6197 "depending on virtual memory load. (A few megabytes will usually be fully "
6198 "satisfied, and more is rarely useful.)"
6202 #: build/C/man2/posix_fadvise.2:148
6204 "In kernels before 2.6.18, B<POSIX_FADV_NOREUSE> had the same semantics as "
6205 "B<POSIX_FADV_WILLNEED>. This was probably a bug; since kernel 2.6.18, this "
6210 #: build/C/man2/posix_fadvise.2:156
6212 "B<POSIX_FADV_DONTNEED> attempts to free cached pages associated with the "
6213 "specified region. This is useful, for example, while streaming large "
6214 "files. A program may periodically request the kernel to free cached data "
6215 "that has already been used, so that more useful cached pages are not "
6216 "discarded instead."
6220 #: build/C/man2/posix_fadvise.2:164
6222 "Requests to discard partial pages are ignored. It is preferable to preserve "
6223 "needed data than discard unneeded data. If the application requires that "
6224 "data be considered for discarding then I<offset> and I<len> must be "
6229 #: build/C/man2/posix_fadvise.2:172
6231 "Pages that have not yet been written out will be unaffected, so if the "
6232 "application wishes to guarantee that pages will be released, it should call "
6233 "B<fsync>(2) or B<fdatasync>(2) first."
6237 #: build/C/man2/posix_fadvise.2:172
6239 msgid "Architecture-specific variants"
6243 #: build/C/man2/posix_fadvise.2:189
6245 "Some architectures require 64-bit arguments to be aligned in a suitable pair "
6246 "of registers (see B<syscall>(2) for further detail). On such "
6247 "architectures, the call signature of B<posix_fadvise>() shown in the "
6248 "SYNOPSIS would force a register to be wasted as padding between the I<fd> "
6249 "and I<offset> arguments. Therefore, these architectures define a version of "
6250 "the system call that orders the arguments suitably, but otherwise is "
6251 "otherwise exactly the same as B<posix_fadvise>()."
6255 #: build/C/man2/posix_fadvise.2:191
6256 msgid "For example, since Linux 2.6.14, ARM has the following system call:"
6260 #: build/C/man2/posix_fadvise.2:196
6263 "B<long arm_fadvise64_64(int >I<fd>B<, int >I<advice>B<,>\n"
6264 "B< loff_t >I<offset>B<, loff_t >I<len>B<);>\n"
6268 #: build/C/man2/posix_fadvise.2:204
6270 "These architecture-specific details are generally hidden from applications "
6271 "by the glibc B<posix_fadvise>() wrapper function, which invokes the "
6272 "appropriate architecture-specific system call."
6276 #: build/C/man2/posix_fadvise.2:209
6278 "In kernels before 2.6.6, if I<len> was specified as 0, then this was "
6279 "interpreted literally as \"zero bytes\", rather than as meaning \"all bytes "
6280 "through to the end of the file\"."
6283 #. FIXME . Write a posix_fadvise(3) page.
6285 #: build/C/man2/posix_fadvise.2:215
6287 "B<readahead>(2), B<sync_file_range>(2), B<posix_fallocate>(3), "
6288 "B<posix_madvise>(3)"
6292 #: build/C/man3/posix_fallocate.3:25
6294 msgid "POSIX_FALLOCATE"
6298 #: build/C/man3/posix_fallocate.3:25
6304 #: build/C/man3/posix_fallocate.3:28
6305 msgid "posix_fallocate - allocate file space"
6309 #: build/C/man3/posix_fallocate.3:33
6311 msgid "B<int posix_fallocate(int >I<fd>B<, off_t >I<offset>B<, off_t >I<len>B<);>\n"
6315 #: build/C/man3/posix_fallocate.3:42
6316 msgid "B<posix_fallocate>():"
6320 #: build/C/man3/posix_fallocate.3:61
6322 "The function B<posix_fallocate>() ensures that disk space is allocated for "
6323 "the file referred to by the descriptor I<fd> for the bytes in the range "
6324 "starting at I<offset> and continuing for I<len> bytes. After a successful "
6325 "call to B<posix_fallocate>(), subsequent writes to bytes in the specified "
6326 "range are guaranteed not to fail because of lack of disk space."
6330 #: build/C/man3/posix_fallocate.3:66
6332 "If the size of the file is less than I<offset>+I<len>, then the file is "
6333 "increased to this size; otherwise the file size is left unchanged."
6337 #: build/C/man3/posix_fallocate.3:72
6339 "B<posix_fallocate>() returns zero on success, or an error number on "
6340 "failure. Note that I<errno> is not set."
6344 #: build/C/man3/posix_fallocate.3:81
6345 msgid "I<offset+len> exceeds the maximum file size."
6349 #: build/C/man3/posix_fallocate.3:91
6350 msgid "I<fd> does not refer to a regular file."
6354 #: build/C/man3/posix_fallocate.3:100
6355 msgid "I<fd> refers to a pipe."
6359 #: build/C/man3/posix_fallocate.3:103
6360 msgid "B<posix_fallocate>() is available since glibc 2.1.94."
6364 #: build/C/man3/posix_fallocate.3:108
6365 msgid "The B<posix_fallocate>() function is thread-safe."
6369 #: build/C/man3/posix_fallocate.3:133
6371 "POSIX.1-2008 says that an implementation I<shall> give the B<EINVAL> error "
6372 "if I<len> was 0, or I<offset> was less than 0. POSIX.1-2001 says that an "
6373 "implementation I<shall> give the B<EINVAL> error if I<len> is less than 0, "
6374 "or I<offset> was less than 0, and I<may> give the error if I<len> equals "
6379 #: build/C/man3/posix_fallocate.3:138
6380 msgid "B<fallocate>(1), B<fallocate>(2), B<lseek>(2), B<posix_fadvise>(2)"
6384 #: build/C/man3/posix_memalign.3:29
6386 msgid "POSIX_MEMALIGN"
6390 #: build/C/man3/posix_memalign.3:29
6396 #: build/C/man3/posix_memalign.3:32
6398 "posix_memalign, aligned_alloc, memalign, valloc, pvalloc - allocate aligned "
6403 #: build/C/man3/posix_memalign.3:35
6405 msgid "B<#include E<lt>stdlib.hE<gt>>\n"
6409 #: build/C/man3/posix_memalign.3:39
6412 "B<int posix_memalign(void **>I<memptr>B<, size_t >I<alignment>B<, size_t "
6414 "B<void *aligned_alloc(size_t >I<alignment>B<, size_t >I<size>B<);>\n"
6415 "B<void *valloc(size_t >I<size>B<);>\n"
6419 #: build/C/man3/posix_memalign.3:44
6422 "B<void *memalign(size_t >I<alignment>B<, size_t >I<size>B<);>\n"
6423 "B<void *pvalloc(size_t >I<size>B<);>\n"
6427 #: build/C/man3/posix_memalign.3:54
6429 "B<posix_memalign>(): _POSIX_C_SOURCE\\ E<gt>=\\ 200112L || _XOPEN_SOURCE\\ "
6434 #: build/C/man3/posix_memalign.3:57
6435 msgid "B<aligned_alloc>(): _ISOC11_SOURCE"
6439 #: build/C/man3/posix_memalign.3:59
6440 msgid "B<valloc>():"
6444 #: build/C/man3/posix_memalign.3:62
6446 msgid "Since glibc 2.12:"
6450 #: build/C/man3/posix_memalign.3:69
6454 " (_XOPEN_SOURCE\\ E<gt>=\\ 500 ||\n"
6455 " _XOPEN_SOURCE\\ &&\\ _XOPEN_SOURCE_EXTENDED) &&\n"
6456 " !(_POSIX_C_SOURCE\\ E<gt>=\\ 200112L || _XOPEN_SOURCE\\ E<gt>=\\ 600)\n"
6460 #: build/C/man3/posix_memalign.3:71
6462 msgid "Before glibc 2.12:"
6466 #: build/C/man3/posix_memalign.3:75
6468 "_BSD_SOURCE || _XOPEN_SOURCE\\ E<gt>=\\ 500 || _XOPEN_SOURCE\\ &&\\ "
6469 "_XOPEN_SOURCE_EXTENDED"
6473 #: build/C/man3/posix_memalign.3:82
6475 "(The (nonstandard) header file I<E<lt>malloc.hE<gt>> also exposes the "
6476 "declaration of B<valloc>(); no feature test macros are required.)"
6481 #: build/C/man3/posix_memalign.3:104
6483 "The function B<posix_memalign>() allocates I<size> bytes and places the "
6484 "address of the allocated memory in I<*memptr>. The address of the allocated "
6485 "memory will be a multiple of I<alignment>, which must be a power of two and "
6486 "a multiple of I<sizeof(void\\ *)>. If I<size> is 0, then the value placed "
6487 "in I<*memptr> is either NULL, or a unique pointer value that can later be "
6488 "successfully passed to B<free>(3)."
6491 #. The behavior of memalign() for size==0 is as for posix_memalign()
6492 #. but no standards govern this.
6494 #: build/C/man3/posix_memalign.3:115
6496 "The obsolete function B<memalign>() allocates I<size> bytes and returns a "
6497 "pointer to the allocated memory. The memory address will be a multiple of "
6498 "I<alignment>, which must be a power of two."
6502 #: build/C/man3/posix_memalign.3:124
6504 "The function B<aligned_alloc>() is the same as B<memalign>(), except for "
6505 "the added restriction that I<size> should be a multiple of I<alignment>."
6509 #: build/C/man3/posix_memalign.3:133
6511 "The obsolete function B<valloc>() allocates I<size> bytes and returns a "
6512 "pointer to the allocated memory. The memory address will be a multiple of "
6513 "the page size. It is equivalent to I<memalign(sysconf(_SC_PAGESIZE),size)>."
6517 #: build/C/man3/posix_memalign.3:140
6519 "The obsolete function B<pvalloc>() is similar to B<valloc>(), but rounds "
6520 "the size of the allocation up to the next multiple of the system page size."
6524 #: build/C/man3/posix_memalign.3:142
6525 msgid "For all of these functions, the memory is not zeroed."
6529 #: build/C/man3/posix_memalign.3:149
6531 "B<aligned_alloc>(), B<memalign>(), B<valloc>(), and B<pvalloc>() return a "
6532 "pointer to the allocated memory, or NULL if the request fails."
6536 #: build/C/man3/posix_memalign.3:157
6538 "B<posix_memalign>() returns zero on success, or one of the error values "
6539 "listed in the next section on failure. The value of I<errno> is "
6540 "indeterminate after a call to B<posix_memalign>()."
6544 #: build/C/man3/posix_memalign.3:164
6546 "The I<alignment> argument was not a power of two, or was not a multiple of "
6547 "I<sizeof(void\\ *)>."
6551 #: build/C/man3/posix_memalign.3:167
6552 msgid "There was insufficient memory to fulfill the allocation request."
6556 #: build/C/man3/posix_memalign.3:174
6558 "The functions B<memalign>(), B<valloc>(), and B<pvalloc>() have been "
6559 "available in all Linux libc libraries."
6563 #: build/C/man3/posix_memalign.3:178
6564 msgid "The function B<aligned_alloc>() was added to glibc in version 2.16."
6568 #: build/C/man3/posix_memalign.3:182
6569 msgid "The function B<posix_memalign>() is available since glibc 2.1.91."
6573 #: build/C/man3/posix_memalign.3:189
6575 "The function B<valloc>() appeared in 3.0BSD. It is documented as being "
6576 "obsolete in 4.3BSD, and as legacy in SUSv2. It does not appear in "
6581 #: build/C/man3/posix_memalign.3:193
6582 msgid "The function B<pvalloc>() is a GNU extension."
6586 #: build/C/man3/posix_memalign.3:197
6587 msgid "The function B<memalign>() appears in SunOS 4.1.3 but not in 4.4BSD."
6591 #: build/C/man3/posix_memalign.3:201
6592 msgid "The function B<posix_memalign>() comes from POSIX.1d."
6596 #: build/C/man3/posix_memalign.3:206
6597 msgid "The function B<aligned_alloc>() is specified in the C11 standard."
6601 #: build/C/man3/posix_memalign.3:206
6607 #: build/C/man3/posix_memalign.3:210
6609 "Everybody agrees that B<posix_memalign>() is declared in "
6610 "I<E<lt>stdlib.hE<gt>>."
6614 #: build/C/man3/posix_memalign.3:214
6616 "On some systems B<memalign>() is declared in I<E<lt>stdlib.hE<gt>> instead "
6617 "of I<E<lt>malloc.hE<gt>>."
6621 #: build/C/man3/posix_memalign.3:221
6623 "According to SUSv2, B<valloc>() is declared in I<E<lt>stdlib.hE<gt>>. "
6624 "Libc4,5 and glibc declare it in I<E<lt>malloc.hE<gt>>, and also in "
6625 "I<E<lt>stdlib.hE<gt>> if suitable feature test macros are defined (see "
6630 #: build/C/man3/posix_memalign.3:230
6632 "On many systems there are alignment restrictions, for example, on buffers "
6633 "used for direct block device I/O. POSIX specifies the "
6634 "I<pathconf(path,_PC_REC_XFER_ALIGN)> call that tells what alignment is "
6635 "needed. Now one can use B<posix_memalign>() to satisfy this requirement."
6639 #: build/C/man3/posix_memalign.3:239
6641 "B<posix_memalign>() verifies that I<alignment> matches the requirements "
6642 "detailed above. B<memalign>() may not check that the I<alignment> argument "
6646 #. Other systems allow passing the result of
6653 #: build/C/man3/posix_memalign.3:267
6655 "POSIX requires that memory obtained from B<posix_memalign>() can be freed "
6656 "using B<free>(3). Some systems provide no way to reclaim memory allocated "
6657 "with B<memalign>() or B<valloc>() (because one can pass to B<free>(3) "
6658 "only a pointer obtained from B<malloc>(3), while, for example, B<memalign>() "
6659 "would call B<malloc>(3) and then align the obtained value). The glibc "
6660 "implementation allows memory obtained from any of these functions to be "
6661 "reclaimed with B<free>(3)."
6665 #: build/C/man3/posix_memalign.3:272
6667 "The glibc B<malloc>(3) always returns 8-byte aligned memory addresses, so "
6668 "these functions are needed only if you require larger alignment values."
6672 #: build/C/man3/posix_memalign.3:277
6673 msgid "B<brk>(2), B<getpagesize>(2), B<free>(3), B<malloc>(3)"
6677 #: build/C/man2/readahead.2:28
6683 #: build/C/man2/readahead.2:28
6689 #: build/C/man2/readahead.2:31
6690 msgid "readahead - initiate file readahead into page cache"
6694 #: build/C/man2/readahead.2:37
6697 "B<ssize_t readahead(int >I<fd>B<, off64_t >I<offset>B<, size_t "
6702 #: build/C/man2/readahead.2:44
6704 "B<readahead>() initiates readahead on a file so that subsequent reads from "
6705 "that file will be satisfied from the cache, and not block on disk I/O "
6706 "(assuming the readahead was initiated early enough and that other activity "
6707 "on the system did not in the meantime flush pages from the cache)."
6711 #: build/C/man2/readahead.2:66
6713 "The I<fd> argument is a file descriptor identifying the file which is to be "
6714 "read. The I<offset> argument specifies the starting point from which data "
6715 "is to be read and I<count> specifies the number of bytes to be read. I/O is "
6716 "performed in whole pages, so that I<offset> is effectively rounded down to a "
6717 "page boundary and bytes are read up to the next page boundary greater than "
6718 "or equal to I<(offset+count)>. B<readahead>() does not read beyond the end "
6719 "of the file. The current file offset of the open file referred to by I<fd> "
6720 "is left unchanged."
6724 #: build/C/man2/readahead.2:72
6726 "On success, B<readahead>() returns 0; on failure, -1 is returned, with "
6727 "I<errno> set to indicate the cause of the error."
6731 #: build/C/man2/readahead.2:77
6732 msgid "I<fd> is not a valid file descriptor or is not open for reading."
6736 #: build/C/man2/readahead.2:83
6737 msgid "I<fd> does not refer to a file type to which B<readahead>() can be applied."
6741 #: build/C/man2/readahead.2:88
6743 "The B<readahead>() system call appeared in Linux 2.4.13; glibc support has "
6744 "been provided since version 2.3."
6748 #: build/C/man2/readahead.2:93
6750 "The B<readahead>() system call is Linux-specific, and its use should be "
6751 "avoided in portable applications."
6755 #: build/C/man2/readahead.2:98
6757 "On some 32-bit architectures, the calling signature for this system call "
6758 "differs, for the reasons described in B<syscall>(2)."
6762 #: build/C/man2/readahead.2:107
6764 "B<readahead>() attempts to schedule the reads in the background and return "
6765 "immediately. However, it may block while it reads the filesystem metadata "
6766 "needed to locate the requested blocks. This occurs frequently with ext[234] "
6767 "on large files using indirect blocks instead of extents, giving the "
6768 "appearance that the call blocks until the requested data has been read."
6772 #: build/C/man2/readahead.2:113
6773 msgid "B<lseek>(2), B<madvise>(2), B<mmap>(2), B<posix_fadvise>(2), B<read>(2)"
6777 #: build/C/man2/remap_file_pages.2:28
6779 msgid "REMAP_FILE_PAGES"
6783 #: build/C/man2/remap_file_pages.2:31
6784 msgid "remap_file_pages - create a nonlinear file mapping"
6788 #: build/C/man2/remap_file_pages.2:35
6791 "B<#define _GNU_SOURCE> /* See feature_test_macros(7) */\n"
6792 "B<#include E<lt>sys/mman.hE<gt>>\n"
6796 #: build/C/man2/remap_file_pages.2:38
6799 "B<int remap_file_pages(void *>I<addr>B<, size_t >I<size>B<, int "
6801 "B< size_t >I<pgoff>B<, int >I<flags>B<);>\n"
6804 #. commit 33041a0d76d3c3e0aff28ac95a2ffdedf1282dbc
6805 #. http://lwn.net/Articles/597632/
6807 #: build/C/man2/remap_file_pages.2:47
6809 "B<Note>: this system call is (since Linux 3.16) deprecated and will "
6810 "eventually be replaced by a slower in-kernel emulation. Those few "
6811 "applications that use this system call should consider migrating to "
6816 #: build/C/man2/remap_file_pages.2:59
6818 "The B<remap_file_pages>() system call is used to create a nonlinear "
6819 "mapping, that is, a mapping in which the pages of the file are mapped into a "
6820 "nonsequential order in memory. The advantage of using B<remap_file_pages>() "
6821 "over using repeated calls to B<mmap>(2) is that the former approach does "
6822 "not require the kernel to create additional VMA (Virtual Memory Area) data "
6827 #: build/C/man2/remap_file_pages.2:61
6828 msgid "To create a nonlinear mapping we perform the following steps:"
6832 #: build/C/man2/remap_file_pages.2:61
6838 #: build/C/man2/remap_file_pages.2:69
6840 "Use B<mmap>(2) to create a mapping (which is initially linear). This "
6841 "mapping must be created with the B<MAP_SHARED> flag."
6845 #: build/C/man2/remap_file_pages.2:69
6851 #: build/C/man2/remap_file_pages.2:77
6853 "Use one or more calls to B<remap_file_pages>() to rearrange the "
6854 "correspondence between the pages of the mapping and the pages of the file. "
6855 "It is possible to map the same page of a file into multiple locations within "
6856 "the mapped region."
6860 #: build/C/man2/remap_file_pages.2:88
6862 "The I<pgoff> and I<size> arguments specify the region of the file that is to "
6863 "be relocated within the mapping: I<pgoff> is a file offset in units of the "
6864 "system page size; I<size> is the length of the region in bytes."
6868 #: build/C/man2/remap_file_pages.2:106
6870 "The I<addr> argument serves two purposes. First, it identifies the mapping "
6871 "whose pages we want to rearrange. Thus, I<addr> must be an address that "
6872 "falls within a region previously mapped by a call to B<mmap>(2). Second, "
6873 "I<addr> specifies the address at which the file pages identified by I<pgoff> "
6874 "and I<size> will be placed."
6877 #. This rounding is weird, and not consistent with the treatment of
6878 #. the analogous arguments for munmap()/mprotect() and for mlock().
6881 #: build/C/man2/remap_file_pages.2:120
6883 "The values specified in I<addr> and I<size> should be multiples of the "
6884 "system page size. If they are not, then the kernel rounds I<both> values "
6885 "I<down> to the nearest multiple of the page size."
6889 #: build/C/man2/remap_file_pages.2:124
6890 msgid "The I<prot> argument must be specified as 0."
6894 #: build/C/man2/remap_file_pages.2:132
6896 "The I<flags> argument has the same meaning as for B<mmap>(2), but all flags "
6897 "other than B<MAP_NONBLOCK> are ignored."
6901 #: build/C/man2/remap_file_pages.2:139
6903 "On success, B<remap_file_pages>() returns 0. On error, -1 is returned, and "
6904 "I<errno> is set appropriately."
6908 #: build/C/man2/remap_file_pages.2:147
6910 "I<addr> does not refer to a valid mapping created with the B<MAP_SHARED> "
6914 #. And possibly others from vma->vm_ops->populate()
6916 #: build/C/man2/remap_file_pages.2:156
6917 msgid "I<addr>, I<size>, I<prot>, or I<pgoff> is invalid."
6921 #: build/C/man2/remap_file_pages.2:161
6923 "The B<remap_file_pages>() system call appeared in Linux 2.5.46; glibc "
6924 "support was added in version 2.3.3."
6928 #: build/C/man2/remap_file_pages.2:165
6929 msgid "The B<remap_file_pages>() system call is Linux-specific."
6932 #. commit 3ee6dafc677a68e461a7ddafc94a580ebab80735
6934 #: build/C/man2/remap_file_pages.2:176
6936 "Since Linux 2.6.23, B<remap_file_pages>() creates non-linear mappings only "
6937 "on in-memory file systems such as tmpfs, hugetlbfs or ramfs. On filesystems "
6938 "with a backing store, B<remap_file_pages>() is not much more efficient than "
6939 "using B<mmap>(2) to adjust which parts of the file are mapped to which "
6944 #: build/C/man2/remap_file_pages.2:183
6946 "B<getpagesize>(2), B<mmap>(2), B<mmap2>(2), B<mprotect>(2), B<mremap>(2), "
6951 #: build/C/man3/shm_open.3:26
6957 #: build/C/man3/shm_open.3:26
6963 #: build/C/man3/shm_open.3:29
6964 msgid "shm_open, shm_unlink - create/open or unlink POSIX shared memory objects"
6968 #: build/C/man3/shm_open.3:33
6969 msgid "B<#include E<lt>sys/stat.hE<gt>> /* For mode constants */"
6973 #: build/C/man3/shm_open.3:35
6974 msgid "B<#include E<lt>fcntl.hE<gt>> /* For O_* constants */"
6978 #: build/C/man3/shm_open.3:37
6979 msgid "B<int shm_open(const char *>I<name>B<, int >I<oflag>B<, mode_t >I<mode>B<);>"
6983 #: build/C/man3/shm_open.3:39
6984 msgid "B<int shm_unlink(const char *>I<name>B<);>"
6988 #: build/C/man3/shm_open.3:41
6989 msgid "Link with I<-lrt>."
6993 #: build/C/man3/shm_open.3:53
6995 "B<shm_open>() creates and opens a new, or opens an existing, POSIX shared "
6996 "memory object. A POSIX shared memory object is in effect a handle which can "
6997 "be used by unrelated processes to B<mmap>(2) the same region of shared "
6998 "memory. The B<shm_unlink>() function performs the converse operation, "
6999 "removing an object previously created by B<shm_open>()."
7002 #. glibc allows the initial slash to be omitted, and makes
7003 #. multiple initial slashes equivalent to a single slash.
7004 #. This differs from the implementation of POSIX message queues.
7005 #. glibc allows subdirectory components in the name, in which
7006 #. case the subdirectory must exist under /dev/shm, and allow the
7007 #. required permissions if a user wants to create a shared memory
7008 #. object in that subdirectory.
7010 #: build/C/man3/shm_open.3:74
7012 "The operation of B<shm_open>() is analogous to that of B<open>(2). I<name> "
7013 "specifies the shared memory object to be created or opened. For portable "
7014 "use, a shared memory object should be identified by a name of the form "
7015 "I</somename>; that is, a null-terminated string of up to B<NAME_MAX> (i.e., "
7016 "255) characters consisting of an initial slash, followed by one or more "
7017 "characters, none of which are slashes."
7021 #: build/C/man3/shm_open.3:81
7023 "I<oflag> is a bit mask created by ORing together exactly one of B<O_RDONLY> "
7024 "or B<O_RDWR> and any of the other flags listed here:"
7028 #: build/C/man3/shm_open.3:81
7034 #: build/C/man3/shm_open.3:89
7036 "Open the object for read access. A shared memory object opened in this way "
7037 "can be B<mmap>(2)ed only for read (B<PROT_READ>) access."
7041 #: build/C/man3/shm_open.3:89
7047 #: build/C/man3/shm_open.3:92
7048 msgid "Open the object for read-write access."
7052 #: build/C/man3/shm_open.3:92
7057 #. In truth it is actually the filesystem IDs on Linux, but these
7058 #. are nearly always the same as the effective IDs. (MTK, Jul 05)
7060 #: build/C/man3/shm_open.3:112
7062 "Create the shared memory object if it does not exist. The user and group "
7063 "ownership of the object are taken from the corresponding effective IDs of "
7064 "the calling process, and the object's permission bits are set according to "
7065 "the low-order 9 bits of I<mode>, except that those bits set in the process "
7066 "file mode creation mask (see B<umask>(2)) are cleared for the new object. "
7067 "A set of macro constants which can be used to define I<mode> is listed in "
7068 "B<open>(2). (Symbolic definitions of these constants can be obtained by "
7069 "including I<E<lt>sys/stat.hE<gt>>.)"
7073 #: build/C/man3/shm_open.3:118
7075 "A new shared memory object initially has zero length\\(emthe size of the "
7076 "object can be set using B<ftruncate>(2). The newly allocated bytes of a "
7077 "shared memory object are automatically initialized to 0."
7081 #: build/C/man3/shm_open.3:118
7087 #: build/C/man3/shm_open.3:127
7089 "If B<O_CREAT> was also specified, and a shared memory object with the given "
7090 "I<name> already exists, return an error. The check for the existence of the "
7091 "object, and its creation if it does not exist, are performed atomically."
7095 #: build/C/man3/shm_open.3:127
7101 #: build/C/man3/shm_open.3:130
7102 msgid "If the shared memory object already exists, truncate it to zero bytes."
7106 #: build/C/man3/shm_open.3:133
7108 "Definitions of these flag values can be obtained by including "
7109 "I<E<lt>fcntl.hE<gt>>."
7113 #: build/C/man3/shm_open.3:144
7115 "On successful completion B<shm_open>() returns a new file descriptor "
7116 "referring to the shared memory object. This file descriptor is guaranteed "
7117 "to be the lowest-numbered file descriptor not previously opened within the "
7118 "process. The B<FD_CLOEXEC> flag (see B<fcntl>(2)) is set for the file "
7123 #: build/C/man3/shm_open.3:153
7125 "The file descriptor is normally used in subsequent calls to B<ftruncate>(2) "
7126 "(for a newly created object) and B<mmap>(2). After a call to B<mmap>(2) "
7127 "the file descriptor may be closed without affecting the memory mapping."
7131 #: build/C/man3/shm_open.3:171
7133 "The operation of B<shm_unlink>() is analogous to B<unlink>(2): it removes a "
7134 "shared memory object name, and, once all processes have unmapped the object, "
7135 "de-allocates and destroys the contents of the associated memory region. "
7136 "After a successful B<shm_unlink>(), attempts to B<shm_open>() an object "
7137 "with the same I<name> will fail (unless B<O_CREAT> was specified, in which "
7138 "case a new, distinct object is created)."
7142 #: build/C/man3/shm_open.3:180
7144 "On success, B<shm_open>() returns a nonnegative file descriptor. On "
7145 "failure, B<shm_open>() returns -1. B<shm_unlink>() returns 0 on success, "
7150 #: build/C/man3/shm_open.3:187
7152 "On failure, I<errno> is set to indicate the cause of the error. Values "
7153 "which may appear in I<errno> include the following:"
7157 #: build/C/man3/shm_open.3:192
7158 msgid "Permission to B<shm_unlink>() the shared memory object was denied."
7162 #: build/C/man3/shm_open.3:202
7164 "Permission was denied to B<shm_open>() I<name> in the specified I<mode>, or "
7165 "B<O_TRUNC> was specified and the caller does not have write permission on "
7170 #: build/C/man3/shm_open.3:202 build/C/man2/shmget.2:198
7176 #: build/C/man3/shm_open.3:213
7178 "Both B<O_CREAT> and B<O_EXCL> were specified to B<shm_open>() and the "
7179 "shared memory object specified by I<name> already exists."
7183 #: build/C/man3/shm_open.3:220
7184 msgid "The I<name> argument to B<shm_open>() was invalid."
7188 #: build/C/man3/shm_open.3:220
7194 #: build/C/man3/shm_open.3:223
7195 msgid "The process already has the maximum number of files open."
7199 #: build/C/man3/shm_open.3:223
7201 msgid "B<ENAMETOOLONG>"
7205 #: build/C/man3/shm_open.3:229
7206 msgid "The length of I<name> exceeds B<PATH_MAX>."
7210 #: build/C/man3/shm_open.3:233
7211 msgid "The limit on the total number of files open on the system has been reached."
7215 #: build/C/man3/shm_open.3:233 build/C/man3/shm_open.3:242 build/C/man2/shmget.2:225
7221 #: build/C/man3/shm_open.3:242
7223 "An attempt was made to B<shm_open>() a I<name> that did not exist, and "
7224 "B<O_CREAT> was not specified."
7228 #: build/C/man3/shm_open.3:249
7229 msgid "An attempt was to made to B<shm_unlink>() a I<name> that does not exist."
7233 #: build/C/man3/shm_open.3:251
7234 msgid "These functions are provided in glibc 2.2 and later."
7238 #: build/C/man3/shm_open.3:257
7240 "POSIX.1-2001 says that the group ownership of a newly created shared memory "
7241 "object is set to either the calling process's effective group ID or \"a "
7242 "system default group ID\"."
7246 #: build/C/man3/shm_open.3:266
7248 "POSIX leaves the behavior of the combination of B<O_RDONLY> and B<O_TRUNC> "
7249 "unspecified. On Linux, this will successfully truncate an existing shared "
7250 "memory object\\(emthis may not be so on other UNIX systems."
7254 #: build/C/man3/shm_open.3:271
7256 "The POSIX shared memory object implementation on Linux 2.4 makes use of a "
7257 "dedicated filesystem, which is normally mounted under I</dev/shm>."
7261 #: build/C/man3/shm_open.3:282
7263 "B<close>(2), B<fchmod>(2), B<fchown>(2), B<fcntl>(2), B<fstat>(2), "
7264 "B<ftruncate>(2), B<mmap>(2), B<open>(2), B<umask>(2), B<shm_overview>(7)"
7268 #: build/C/man7/shm_overview.7:27
7270 msgid "SHM_OVERVIEW"
7274 #: build/C/man7/shm_overview.7:27
7280 #: build/C/man7/shm_overview.7:30
7281 msgid "shm_overview - overview of POSIX shared memory"
7285 #: build/C/man7/shm_overview.7:33
7287 "The POSIX shared memory API allows processes to communicate information by "
7288 "sharing a region of memory."
7292 #: build/C/man7/shm_overview.7:35
7293 msgid "The interfaces employed in the API are:"
7297 #: build/C/man7/shm_overview.7:35
7299 msgid "B<shm_open>(3)"
7303 #: build/C/man7/shm_overview.7:42
7305 "Create and open a new object, or open an existing object. This is analogous "
7306 "to B<open>(2). The call returns a file descriptor for use by the other "
7307 "interfaces listed below."
7311 #: build/C/man7/shm_overview.7:42
7313 msgid "B<ftruncate>(2)"
7317 #: build/C/man7/shm_overview.7:46
7319 "Set the size of the shared memory object. (A newly created shared memory "
7320 "object has a length of zero.)"
7324 #: build/C/man7/shm_overview.7:50
7326 "Map the shared memory object into the virtual address space of the calling "
7331 #: build/C/man7/shm_overview.7:50
7333 msgid "B<munmap>(2)"
7337 #: build/C/man7/shm_overview.7:54
7339 "Unmap the shared memory object from the virtual address space of the calling "
7344 #: build/C/man7/shm_overview.7:54
7346 msgid "B<shm_unlink>(3)"
7350 #: build/C/man7/shm_overview.7:57
7351 msgid "Remove a shared memory object name."
7355 #: build/C/man7/shm_overview.7:57
7361 #: build/C/man7/shm_overview.7:62
7363 "Close the file descriptor allocated by B<shm_open>(3) when it is no longer "
7368 #: build/C/man7/shm_overview.7:62
7374 #: build/C/man7/shm_overview.7:76
7376 "Obtain a I<stat> structure that describes the shared memory object. Among "
7377 "the information returned by this call are the object's size (I<st_size>), "
7378 "permissions (I<st_mode>), owner (I<st_uid>), and group (I<st_gid>)."
7382 #: build/C/man7/shm_overview.7:76
7384 msgid "B<fchown>(2)"
7388 #: build/C/man7/shm_overview.7:79
7389 msgid "To change the ownership of a shared memory object."
7393 #: build/C/man7/shm_overview.7:79
7395 msgid "B<fchmod>(2)"
7399 #: build/C/man7/shm_overview.7:82
7400 msgid "To change the permissions of a shared memory object."
7404 #: build/C/man7/shm_overview.7:82
7410 #: build/C/man7/shm_overview.7:84
7411 msgid "POSIX shared memory is supported since Linux 2.4 and glibc 2.2."
7415 #: build/C/man7/shm_overview.7:84
7421 #: build/C/man7/shm_overview.7:89
7423 "POSIX shared memory objects have kernel persistence: a shared memory object "
7424 "will exist until the system is shut down, or until all processes have "
7425 "unmapped the object and it has been deleted with B<shm_unlink>(3)"
7429 #: build/C/man7/shm_overview.7:89
7435 #: build/C/man7/shm_overview.7:94
7437 "Programs using the POSIX shared memory API must be compiled with I<cc -lrt> "
7438 "to link against the real-time library, I<librt>."
7442 #: build/C/man7/shm_overview.7:94
7444 msgid "Accessing shared memory objects via the filesystem"
7448 #: build/C/man7/shm_overview.7:101
7450 "On Linux, shared memory objects are created in a (I<tmpfs>) virtual "
7451 "filesystem, normally mounted under I</dev/shm>. Since kernel 2.6.19, Linux "
7452 "supports the use of access control lists (ACLs) to control the permissions "
7453 "of objects in the virtual filesystem."
7457 #: build/C/man7/shm_overview.7:106
7459 "Typically, processes must synchronize their access to a shared memory "
7460 "object, using, for example, POSIX semaphores."
7464 #: build/C/man7/shm_overview.7:114
7466 "System V shared memory (B<shmget>(2), B<shmop>(2), etc.) is an older shared "
7467 "memory API. POSIX shared memory provides a simpler, and better designed "
7468 "interface; on the other hand POSIX shared memory is somewhat less widely "
7469 "available (especially on older systems) than System V shared memory."
7473 #: build/C/man7/shm_overview.7:127
7475 "B<fchmod>(2), B<fchown>(2), B<fstat>(2), B<ftruncate>(2), B<mmap>(2), "
7476 "B<mprotect>(2), B<munmap>(2), B<shmget>(2), B<shmop>(2), B<shm_open>(3), "
7477 "B<shm_unlink>(3), B<sem_overview>(7)"
7481 #: build/C/man2/shmctl.2:45
7487 #: build/C/man2/shmctl.2:45
7493 #: build/C/man2/shmctl.2:48
7494 msgid "shmctl - System V shared memory control"
7498 #: build/C/man2/shmctl.2:51 build/C/man2/shmget.2:44
7499 msgid "B<#include E<lt>sys/ipc.hE<gt>>"
7503 #: build/C/man2/shmctl.2:53 build/C/man2/shmget.2:46
7504 msgid "B<#include E<lt>sys/shm.hE<gt>>"
7508 #: build/C/man2/shmctl.2:55
7509 msgid "B<int shmctl(int >I<shmid>B<, int >I<cmd>B<, struct shmid_ds *>I<buf>B<);>"
7513 #: build/C/man2/shmctl.2:62
7515 "B<shmctl>() performs the control operation specified by I<cmd> on the "
7516 "System\\ V shared memory segment whose identifier is given in I<shmid>."
7520 #: build/C/man2/shmctl.2:67
7522 "The I<buf> argument is a pointer to a I<shmid_ds> structure, defined in "
7523 "I<E<lt>sys/shm.hE<gt>> as follows:"
7527 #: build/C/man2/shmctl.2:81
7530 "struct shmid_ds {\n"
7531 " struct ipc_perm shm_perm; /* Ownership and permissions */\n"
7532 " size_t shm_segsz; /* Size of segment (bytes) */\n"
7533 " time_t shm_atime; /* Last attach time */\n"
7534 " time_t shm_dtime; /* Last detach time */\n"
7535 " time_t shm_ctime; /* Last change time */\n"
7536 " pid_t shm_cpid; /* PID of creator */\n"
7537 " pid_t shm_lpid; /* PID of last shmat(2)/shmdt(2) */\n"
7538 " shmatt_t shm_nattch; /* No. of current attaches */\n"
7544 #: build/C/man2/shmctl.2:89
7546 "The I<ipc_perm> structure is defined as follows (the highlighted fields are "
7547 "settable using B<IPC_SET>):"
7551 #: build/C/man2/shmctl.2:102
7554 "struct ipc_perm {\n"
7555 " key_t __key; /* Key supplied to shmget(2) */\n"
7556 " uid_t B<uid>; /* Effective UID of owner */\n"
7557 " gid_t B<gid>; /* Effective GID of owner */\n"
7558 " uid_t cuid; /* Effective UID of creator */\n"
7559 " gid_t cgid; /* Effective GID of creator */\n"
7560 " unsigned short B<mode>; /* B<Permissions> + SHM_DEST and\n"
7561 " SHM_LOCKED flags */\n"
7562 " unsigned short __seq; /* Sequence number */\n"
7567 #: build/C/man2/shmctl.2:108
7568 msgid "Valid values for I<cmd> are:"
7572 #: build/C/man2/shmctl.2:109
7578 #: build/C/man2/shmctl.2:118
7580 "Copy information from the kernel data structure associated with I<shmid> "
7581 "into the I<shmid_ds> structure pointed to by I<buf>. The caller must have "
7582 "read permission on the shared memory segment."
7586 #: build/C/man2/shmctl.2:118
7592 #: build/C/man2/shmctl.2:136
7594 "Write the values of some members of the I<shmid_ds> structure pointed to by "
7595 "I<buf> to the kernel data structure associated with this shared memory "
7596 "segment, updating also its I<shm_ctime> member. The following fields can be "
7597 "changed: I<shm_perm.uid>, I<shm_perm.gid>, and (the least significant 9 bits "
7598 "of) I<shm_perm.mode>. The effective UID of the calling process must match "
7599 "the owner (I<shm_perm.uid>) or creator (I<shm_perm.cuid>) of the shared "
7600 "memory segment, or the caller must be privileged."
7604 #: build/C/man2/shmctl.2:136
7610 #: build/C/man2/shmctl.2:149
7612 "Mark the segment to be destroyed. The segment will only actually be "
7613 "destroyed after the last process detaches it (i.e., when the I<shm_nattch> "
7614 "member of the associated structure I<shmid_ds> is zero). The caller must be "
7615 "the owner or creator of the segment, or be privileged. The I<buf> argument "
7620 #: build/C/man2/shmctl.2:157
7622 "If a segment has been marked for destruction, then the (nonstandard) "
7623 "B<SHM_DEST> flag of the I<shm_perm.mode> field in the associated data "
7624 "structure retrieved by B<IPC_STAT> will be set."
7628 #: build/C/man2/shmctl.2:160
7630 "The caller I<must> ensure that a segment is eventually destroyed; otherwise "
7631 "its pages that were faulted in will remain in memory or swap."
7635 #: build/C/man2/shmctl.2:165
7637 "See also the description of I</proc/sys/kernel/shm_rmid_forced> in "
7642 #: build/C/man2/shmctl.2:165
7644 msgid "B<IPC_INFO> (Linux-specific)"
7648 #: build/C/man2/shmctl.2:178
7650 "Return information about system-wide shared memory limits and parameters in "
7651 "the structure pointed to by I<buf>. This structure is of type I<shminfo> "
7652 "(thus, a cast is required), defined in I<E<lt>sys/shm.hE<gt>> if the "
7653 "B<_GNU_SOURCE> feature test macro is defined:"
7657 #: build/C/man2/shmctl.2:192
7660 "struct shminfo {\n"
7661 " unsigned long shmmax; /* Maximum segment size */\n"
7662 " unsigned long shmmin; /* Minimum segment size;\n"
7664 " unsigned long shmmni; /* Maximum number of segments */\n"
7665 " unsigned long shmseg; /* Maximum number of segments\n"
7666 " that a process can attach;\n"
7667 " unused within kernel */\n"
7668 " unsigned long shmall; /* Maximum number of pages of\n"
7669 " shared memory, system-wide */\n"
7674 #: build/C/man2/shmctl.2:205
7676 "The I<shmmni>, I<shmmax>, and I<shmall> settings can be changed via I</proc> "
7677 "files of the same name; see B<proc>(5) for details."
7681 #: build/C/man2/shmctl.2:205
7683 msgid "B<SHM_INFO> (Linux-specific)"
7687 #: build/C/man2/shmctl.2:216
7689 "Return a I<shm_info> structure whose fields contain information about system "
7690 "resources consumed by shared memory. This structure is defined in "
7691 "I<E<lt>sys/shm.hE<gt>> if the B<_GNU_SOURCE> feature test macro is defined:"
7695 #: build/C/man2/shmctl.2:233
7698 "struct shm_info {\n"
7699 " int used_ids; /* # of currently existing\n"
7701 " unsigned long shm_tot; /* Total number of shared\n"
7702 " memory pages */\n"
7703 " unsigned long shm_rss; /* # of resident shared\n"
7704 " memory pages */\n"
7705 " unsigned long shm_swp; /* # of swapped shared\n"
7706 " memory pages */\n"
7707 " unsigned long swap_attempts;\n"
7708 " /* Unused since Linux 2.4 */\n"
7709 " unsigned long swap_successes;\n"
7710 " /* Unused since Linux 2.4 */\n"
7715 #: build/C/man2/shmctl.2:235
7717 msgid "B<SHM_STAT> (Linux-specific)"
7721 #: build/C/man2/shmctl.2:246
7723 "Return a I<shmid_ds> structure as for B<IPC_STAT>. However, the I<shmid> "
7724 "argument is not a segment identifier, but instead an index into the kernel's "
7725 "internal array that maintains information about all shared memory segments "
7730 #: build/C/man2/shmctl.2:249
7732 "The caller can prevent or allow swapping of a shared memory segment with the "
7733 "following I<cmd> values:"
7737 #: build/C/man2/shmctl.2:250
7739 msgid "B<SHM_LOCK> (Linux-specific)"
7743 #: build/C/man2/shmctl.2:262
7745 "Prevent swapping of the shared memory segment. The caller must fault in any "
7746 "pages that are required to be present after locking is enabled. If a "
7747 "segment has been locked, then the (nonstandard) B<SHM_LOCKED> flag of the "
7748 "I<shm_perm.mode> field in the associated data structure retrieved by "
7749 "B<IPC_STAT> will be set."
7753 #: build/C/man2/shmctl.2:262
7755 msgid "B<SHM_UNLOCK> (Linux-specific)"
7759 #: build/C/man2/shmctl.2:265
7760 msgid "Unlock the segment, allowing it to be swapped out."
7763 #. There was some weirdness in 2.6.9: SHM_LOCK and SHM_UNLOCK could
7764 #. be applied to a segment, regardless of ownership of the segment.
7765 #. This was a botch-up in the move to RLIMIT_MEMLOCK, and was fixed
7766 #. in 2.6.10. MTK, May 2005
7768 #: build/C/man2/shmctl.2:283
7770 "In kernels before 2.6.10, only a privileged process could employ B<SHM_LOCK> "
7771 "and B<SHM_UNLOCK>. Since kernel 2.6.10, an unprivileged process can employ "
7772 "these operations if its effective UID matches the owner or creator UID of "
7773 "the segment, and (for B<SHM_LOCK>) the amount of memory to be locked falls "
7774 "within the B<RLIMIT_MEMLOCK> resource limit (see B<setrlimit>(2))."
7778 #: build/C/man2/shmctl.2:301
7780 "A successful B<IPC_INFO> or B<SHM_INFO> operation returns the index of the "
7781 "highest used entry in the kernel's internal array recording information "
7782 "about all shared memory segments. (This information can be used with "
7783 "repeated B<SHM_STAT> operations to obtain information about all shared "
7784 "memory segments on the system.) A successful B<SHM_STAT> operation returns "
7785 "the identifier of the shared memory segment whose index was given in "
7786 "I<shmid>. Other operations return 0 on success."
7790 #: build/C/man2/shmctl.2:305
7791 msgid "On error, -1 is returned, and I<errno> is set appropriately."
7795 #: build/C/man2/shmctl.2:314
7797 "B<IPC_STAT> or B<SHM_STAT> is requested and I<shm_perm.mode> does not allow "
7798 "read access for I<shmid>, and the calling process does not have the "
7799 "B<CAP_IPC_OWNER> capability."
7803 #: build/C/man2/shmctl.2:325
7805 "The argument I<cmd> has value B<IPC_SET> or B<IPC_STAT> but the address "
7806 "pointed to by I<buf> isn't accessible."
7810 #: build/C/man2/shmctl.2:325 build/C/man2/shmop.2:194
7816 #: build/C/man2/shmctl.2:328 build/C/man2/shmop.2:197
7817 msgid "I<shmid> points to a removed identifier."
7821 #: build/C/man2/shmctl.2:337
7823 "I<shmid> is not a valid identifier, or I<cmd> is not a valid command. Or: "
7824 "for a B<SHM_STAT> operation, the index value specified in I<shmid> referred "
7825 "to an array slot that is currently unused."
7829 #: build/C/man2/shmctl.2:348
7831 "(In kernels since 2.6.9), B<SHM_LOCK> was specified and the size of the "
7832 "to-be-locked segment would mean that the total bytes in locked shared memory "
7833 "segments would exceed the limit for the real user ID of the calling "
7834 "process. This limit is defined by the B<RLIMIT_MEMLOCK> soft resource limit "
7835 "(see B<setrlimit>(2))."
7839 #: build/C/man2/shmctl.2:353
7841 "B<IPC_STAT> is attempted, and the GID or UID value is too large to be stored "
7842 "in the structure pointed to by I<buf>."
7846 #: build/C/man2/shmctl.2:365
7848 "B<IPC_SET> or B<IPC_RMID> is attempted, and the effective user ID of the "
7849 "calling process is not that of the creator (found in I<shm_perm.cuid>), or "
7850 "the owner (found in I<shm_perm.uid>), and the process was not privileged "
7851 "(Linux: did not have the B<CAP_SYS_ADMIN> capability)."
7855 #: build/C/man2/shmctl.2:377
7857 "Or (in kernels before 2.6.9), B<SHM_LOCK> or B<SHM_UNLOCK> was specified, "
7858 "but the process was not privileged (Linux: did not have the B<CAP_IPC_LOCK> "
7859 "capability). (Since Linux 2.6.9, this error can also occur if the "
7860 "B<RLIMIT_MEMLOCK> is 0 and the caller is not privileged.)"
7863 #. SVr4 documents an additional error condition EMFILE.
7865 #: build/C/man2/shmctl.2:382 build/C/man2/shmget.2:251 build/C/man2/shmop.2:231
7866 msgid "SVr4, POSIX.1-2001."
7869 #. Like Linux, the FreeBSD man pages still document
7870 #. the inclusion of these header files.
7872 #: build/C/man2/shmctl.2:395 build/C/man2/shmget.2:269
7874 "The inclusion of I<E<lt>sys/types.hE<gt>> and I<E<lt>sys/ipc.hE<gt>> isn't "
7875 "required on Linux or by any version of POSIX. However, some old "
7876 "implementations required the inclusion of these header files, and the SVID "
7877 "also documented their inclusion. Applications intended to be portable to "
7878 "such old systems may need to include these header files."
7882 #: build/C/man2/shmctl.2:407
7884 "The B<IPC_INFO>, B<SHM_STAT> and B<SHM_INFO> operations are used by the "
7885 "B<ipcs>(1) program to provide information on allocated resources. In the "
7886 "future, these may modified or moved to a I</proc> filesystem interface."
7890 #: build/C/man2/shmctl.2:415
7892 "Linux permits a process to attach (B<shmat>(2)) a shared memory segment "
7893 "that has already been marked for deletion using I<shmctl(IPC_RMID)>. This "
7894 "feature is not available on other UNIX implementations; portable "
7895 "applications should avoid relying on it."
7899 #: build/C/man2/shmctl.2:428
7901 "Various fields in a I<struct shmid_ds> were typed as I<short> under Linux "
7902 "2.2 and have become I<long> under Linux 2.4. To take advantage of this, a "
7903 "recompilation under glibc-2.1.91 or later should suffice. (The kernel "
7904 "distinguishes old and new calls by an B<IPC_64> flag in I<cmd>.)"
7908 #: build/C/man2/shmctl.2:435
7910 "B<mlock>(2), B<setrlimit>(2), B<shmget>(2), B<shmop>(2), B<capabilities>(7), "
7915 #: build/C/man2/shmget.2:38
7921 #: build/C/man2/shmget.2:38
7927 #: build/C/man2/shmget.2:41
7928 msgid "shmget - allocates a System V shared memory segment"
7932 #: build/C/man2/shmget.2:48
7933 msgid "B<int shmget(key_t >I<key>B<, size_t >I<size>B<, int >I<shmflg>B<);>"
7937 #: build/C/man2/shmget.2:72
7939 "B<shmget>() returns the identifier of the System\\ V shared memory segment "
7940 "associated with the value of the argument I<key>. A new shared memory "
7941 "segment, with size equal to the value of I<size> rounded up to a multiple of "
7942 "B<PAGE_SIZE>, is created if I<key> has the value B<IPC_PRIVATE> or I<key> "
7943 "isn't B<IPC_PRIVATE>, no shared memory segment corresponding to I<key> "
7944 "exists, and B<IPC_CREAT> is specified in I<shmflg>."
7948 #: build/C/man2/shmget.2:91
7950 "If I<shmflg> specifies both B<IPC_CREAT> and B<IPC_EXCL> and a shared memory "
7951 "segment already exists for I<key>, then B<shmget>() fails with I<errno> set "
7952 "to B<EEXIST>. (This is analogous to the effect of the combination B<O_CREAT "
7953 "| O_EXCL> for B<open>(2).)"
7957 #: build/C/man2/shmget.2:95
7958 msgid "The value I<shmflg> is composed of:"
7962 #: build/C/man2/shmget.2:95
7964 msgid "B<IPC_CREAT>"
7968 #: build/C/man2/shmget.2:102
7970 "Create a new segment. If this flag is not used, then B<shmget>() will find "
7971 "the segment associated with I<key> and check to see if the user has "
7972 "permission to access the segment."
7976 #: build/C/man2/shmget.2:102
7982 #: build/C/man2/shmget.2:108
7984 "This flag is used with B<IPC_CREAT> to ensure that this call creates the "
7985 "segment. If the segment already exists, the call fails."
7989 #: build/C/man2/shmget.2:108
7991 msgid "B<SHM_HUGETLB> (since Linux 2.6)"
7995 #: build/C/man2/shmget.2:114
7997 "Allocate the segment using \"huge pages.\" See the Linux kernel source file "
7998 "I<Documentation/vm/hugetlbpage.txt> for further information."
8002 #: build/C/man2/shmget.2:114
8004 msgid "B<SHM_NORESERVE> (since Linux 2.6.15)"
8007 #. As at 2.6.17-rc2, this flag has no effect if SHM_HUGETLB was also
8010 #: build/C/man2/shmget.2:133
8012 "This flag serves the same purpose as the B<mmap>(2) B<MAP_NORESERVE> flag. "
8013 "Do not reserve swap space for this segment. When swap space is reserved, "
8014 "one has the guarantee that it is possible to modify the segment. When swap "
8015 "space is not reserved one might get B<SIGSEGV> upon a write if no physical "
8016 "memory is available. See also the discussion of the file "
8017 "I</proc/sys/vm/overcommit_memory> in B<proc>(5)."
8021 #: build/C/man2/shmget.2:143
8023 "In addition to the above flags, the least significant 9 bits of I<shmflg> "
8024 "specify the permissions granted to the owner, group, and others. These bits "
8025 "have the same format, and the same meaning, as the I<mode> argument of "
8026 "B<open>(2). Presently, execute permissions are not used by the system."
8030 #: build/C/man2/shmget.2:151
8032 "When a new shared memory segment is created, its contents are initialized to "
8033 "zero values, and its associated data structure, I<shmid_ds> (see "
8034 "B<shmctl>(2)), is initialized as follows:"
8038 #: build/C/man2/shmget.2:156
8040 "I<shm_perm.cuid> and I<shm_perm.uid> are set to the effective user ID of the "
8045 #: build/C/man2/shmget.2:161
8047 "I<shm_perm.cgid> and I<shm_perm.gid> are set to the effective group ID of "
8048 "the calling process."
8052 #: build/C/man2/shmget.2:166
8054 "The least significant 9 bits of I<shm_perm.mode> are set to the least "
8055 "significant 9 bit of I<shmflg>."
8059 #: build/C/man2/shmget.2:170
8060 msgid "I<shm_segsz> is set to the value of I<size>."
8064 #: build/C/man2/shmget.2:177
8065 msgid "I<shm_lpid>, I<shm_nattch>, I<shm_atime>, and I<shm_dtime> are set to 0."
8069 #: build/C/man2/shmget.2:180
8070 msgid "I<shm_ctime> is set to the current time."
8074 #: build/C/man2/shmget.2:183
8076 "If the shared memory segment already exists, the permissions are verified, "
8077 "and a check is made to see if it is marked for destruction."
8081 #: build/C/man2/shmget.2:188
8083 "On success, a valid shared memory identifier is returned. On error, -1 is "
8084 "returned, and I<errno> is set to indicate the error."
8088 #: build/C/man2/shmget.2:192
8089 msgid "On failure, I<errno> is set to one of the following:"
8093 #: build/C/man2/shmget.2:198
8095 "The user does not have permission to access the shared memory segment, and "
8096 "does not have the B<CAP_IPC_OWNER> capability."
8100 #: build/C/man2/shmget.2:207
8102 "B<IPC_CREAT> and B<IPC_EXCL> were specified in I<shmflg>, but a shared "
8103 "memory segment already exists for I<key>."
8107 #: build/C/man2/shmget.2:215
8109 "A new segment was to be created and I<size> is less than B<SHMIN> or greater "
8114 #: build/C/man2/shmget.2:221
8116 "A segment for the given I<key> exists, but I<size> is greater than the size "
8121 #: build/C/man2/shmget.2:230
8122 msgid "No segment exists for the given I<key>, and B<IPC_CREAT> was not specified."
8126 #: build/C/man2/shmget.2:233
8127 msgid "No memory could be allocated for segment overhead."
8131 #: build/C/man2/shmget.2:241
8133 "All possible shared memory IDs have been taken (B<SHMMNI>), or allocating a "
8134 "segment of the requested I<size> would cause the system to exceed the "
8135 "system-wide limit on shared memory (B<SHMALL>)."
8139 #: build/C/man2/shmget.2:248
8141 "The B<SHM_HUGETLB> flag was specified, but the caller was not privileged "
8142 "(did not have the B<CAP_IPC_LOCK> capability)."
8146 #: build/C/man2/shmget.2:256
8147 msgid "B<SHM_HUGETLB> and B<SHM_NORESERVE> are Linux extensions."
8151 #: build/C/man2/shmget.2:280
8153 "B<IPC_PRIVATE> isn't a flag field but a I<key_t> type. If this special "
8154 "value is used for I<key>, the system call ignores all but the least "
8155 "significant 9 bits of I<shmflg> and creates a new shared memory segment."
8159 #: build/C/man2/shmget.2:280
8161 msgid "Shared memory limits"
8165 #: build/C/man2/shmget.2:284
8167 "The following limits on shared memory segment resources affect the "
8172 #: build/C/man2/shmget.2:284
8178 #: build/C/man2/shmget.2:289
8179 msgid "System-wide limit on the number of I<pages> of shared memory."
8182 #. commit 060028bac94bf60a65415d1d55a359c3a17d5c31
8184 #: build/C/man2/shmget.2:295
8186 "On Linux, this limit can be read and modified via "
8187 "I</proc/sys/kernel/shmall>. Since Linux 3.16, the default value for this "
8192 #: build/C/man2/shmget.2:297 build/C/man2/shmget.2:332
8194 msgid " ULONG_MAX - 2^24\n"
8198 #: build/C/man2/shmget.2:308
8200 "The effect of this value (which is suitable for both 32-bit and 64-bit "
8201 "systems) is to impose no limitation on allocations. This value, rather "
8202 "than B<ULONG_MAX>, was chosen as the default to prevent some cases where "
8203 "historical applications simply raised the existing limit without first "
8204 "checking its current value. Such applications would cause the value to "
8205 "overflow if the limit was set at B<ULONG_MAX>."
8209 #: build/C/man2/shmget.2:311
8210 msgid "From Linux 2.4 up to Linux 3.15, the default value for this limit was:"
8214 #: build/C/man2/shmget.2:313
8216 msgid " SHMMAX / PAGE_SIZE * (SHMMNI / 16)\n"
8220 #: build/C/man2/shmget.2:321
8222 "If B<SHMMAX> and B<SHMMNI> were not modified, then multiplying the result of "
8223 "this formula by the page size (to get a value in bytes) yielded a value of 8 "
8224 "GB as the limit on the total memory used by all shared memory segments."
8228 #: build/C/man2/shmget.2:321
8234 #: build/C/man2/shmget.2:324
8235 msgid "Maximum size in bytes for a shared memory segment."
8238 #. commit 060028bac94bf60a65415d1d55a359c3a17d5c31
8240 #: build/C/man2/shmget.2:330
8242 "On Linux, this limit can be read and modified via "
8243 "I</proc/sys/kernel/shmmax>. Since Linux 3.16, the default value for this "
8248 #: build/C/man2/shmget.2:341
8250 "The effect of this value (which is suitable for both 32-bit and 64-bit "
8251 "systems) is to impose no limitation on allocations. See the description of "
8252 "B<SHMALL> for a discussion of why this default value (rather than "
8253 "B<ULONG_MAX>) is used."
8257 #: build/C/man2/shmget.2:344
8259 "From Linux 2.2 up to Linux 3.15, the default value of this limit was "
8264 #: build/C/man2/shmget.2:350
8266 "Because it is not possible to map just part of a shared memory segment, the "
8267 "amount of virtual memory places another limit on the maximum size of a "
8268 "usable segment: for example, on i386 the largest segments that can be mapped "
8269 "have a size of around 2.8 GB, and on x86_64 the limit is around 127 TB."
8273 #: build/C/man2/shmget.2:350
8279 #: build/C/man2/shmget.2:356
8281 "Minimum size in bytes for a shared memory segment: implementation dependent "
8282 "(currently 1 byte, though B<PAGE_SIZE> is the effective minimum size)."
8286 #: build/C/man2/shmget.2:356
8292 #: build/C/man2/shmget.2:361
8294 "System-wide limit on the number of shared memory segments. In Linux 2.2, "
8295 "the default value for this limit was 128; since Linux 2.4, the default value "
8299 #. Kernels between 2.4.x and 2.6.8 had an off-by-one error that meant
8300 #. that we could create one more segment than SHMMNI -- MTK
8301 #. This /proc file is not available in Linux 2.2 and earlier -- MTK
8303 #: build/C/man2/shmget.2:367
8305 "On Linux, this limit can be read and modified via "
8306 "I</proc/sys/kernel/shmmni>."
8310 #: build/C/man2/shmget.2:371
8312 "The implementation has no specific limits for the per-process maximum number "
8313 "of shared memory segments (B<SHMSEG>)."
8317 #: build/C/man2/shmget.2:377
8319 "Until version 2.3.30, Linux would return B<EIDRM> for a B<shmget>() on a "
8320 "shared memory segment scheduled for deletion."
8324 #: build/C/man2/shmget.2:383
8326 "The name choice B<IPC_PRIVATE> was perhaps unfortunate, B<IPC_NEW> would "
8327 "more clearly show its function."
8331 #: build/C/man2/shmget.2:391
8333 "B<shmat>(2), B<shmctl>(2), B<shmdt>(2), B<ftok>(3), B<capabilities>(7), "
8334 "B<shm_overview>(7), B<svipc>(7)"
8338 #: build/C/man2/shmop.2:41
8344 #: build/C/man2/shmop.2:44
8345 msgid "shmat, shmdt - System V shared memory operations"
8349 #: build/C/man2/shmop.2:48
8352 "B<#include E<lt>sys/types.hE<gt>>\n"
8353 "B<#include E<lt>sys/shm.hE<gt>>\n"
8357 #: build/C/man2/shmop.2:50
8360 "B<void *shmat(int >I<shmid>B<, const void *>I<shmaddr>B<, int "
8365 #: build/C/man2/shmop.2:52
8367 msgid "B<int shmdt(const void *>I<shmaddr>B<);>\n"
8371 #: build/C/man2/shmop.2:54
8377 #: build/C/man2/shmop.2:62
8379 "B<shmat>() attaches the System\\ V shared memory segment identified by "
8380 "I<shmid> to the address space of the calling process. The attaching address "
8381 "is specified by I<shmaddr> with one of the following criteria:"
8385 #: build/C/man2/shmop.2:68
8387 "If I<shmaddr> is NULL, the system chooses a suitable (unused) address at "
8388 "which to attach the segment."
8392 #: build/C/man2/shmop.2:80
8394 "If I<shmaddr> isn't NULL and B<SHM_RND> is specified in I<shmflg>, the "
8395 "attach occurs at the address equal to I<shmaddr> rounded down to the nearest "
8396 "multiple of B<SHMLBA>."
8400 #: build/C/man2/shmop.2:84
8402 "Otherwise, I<shmaddr> must be a page-aligned address at which the attach "
8407 #: build/C/man2/shmop.2:90
8409 "In addition to B<SHM_RND>, the following flags may be specified in the "
8410 "I<shmflg> bit-mask argument:"
8414 #: build/C/man2/shmop.2:90
8416 msgid "B<SHM_EXEC> (Linux-specific; since Linux 2.6.9)"
8420 #: build/C/man2/shmop.2:94
8422 "Allow the contents of the segment to be executed. The caller must have "
8423 "execute permission on the segment."
8427 #: build/C/man2/shmop.2:94
8429 msgid "B<SHM_RDONLY>"
8433 #: build/C/man2/shmop.2:102
8435 "Attach the segment for read-only access. The process must have read "
8436 "permission for the segment. If this flag is not specified, the segment is "
8437 "attached for read and write access, and the process must have read and write "
8438 "permission for the segment. There is no notion of a write-only shared "
8443 #: build/C/man2/shmop.2:102
8445 msgid "B<SHM_REMAP> (Linux-specific)"
8449 #: build/C/man2/shmop.2:115
8451 "This flag specifies that the mapping of the segment should replace any "
8452 "existing mapping in the range starting at I<shmaddr> and continuing for the "
8453 "size of the segment. (Normally, an B<EINVAL> error would result if a "
8454 "mapping already exists in this address range.) In this case, I<shmaddr> "
8459 #: build/C/man2/shmop.2:122
8461 "The B<brk>(2) value of the calling process is not altered by the attach. "
8462 "The segment will automatically be detached at process exit. The same "
8463 "segment may be attached as a read and as a read-write one, and more than "
8464 "once, in the process's address space."
8468 #: build/C/man2/shmop.2:130
8470 "A successful B<shmat>() call updates the members of the I<shmid_ds> "
8471 "structure (see B<shmctl>(2)) associated with the shared memory segment as "
8476 #: build/C/man2/shmop.2:133
8477 msgid "I<shm_atime> is set to the current time."
8481 #: build/C/man2/shmop.2:136 build/C/man2/shmop.2:163
8482 msgid "I<shm_lpid> is set to the process-ID of the calling process."
8486 #: build/C/man2/shmop.2:140
8487 msgid "I<shm_nattch> is incremented by one."
8491 #: build/C/man2/shmop.2:140
8497 #: build/C/man2/shmop.2:151
8499 "B<shmdt>() detaches the shared memory segment located at the address "
8500 "specified by I<shmaddr> from the address space of the calling process. The "
8501 "to-be-detached segment must be currently attached with I<shmaddr> equal to "
8502 "the value returned by the attaching B<shmat>() call."
8506 #: build/C/man2/shmop.2:157
8508 "On a successful B<shmdt>() call, the system updates the members of the "
8509 "I<shmid_ds> structure associated with the shared memory segment as follows:"
8513 #: build/C/man2/shmop.2:160
8514 msgid "I<shm_dtime> is set to the current time."
8518 #: build/C/man2/shmop.2:168
8520 "I<shm_nattch> is decremented by one. If it becomes 0 and the segment is "
8521 "marked for deletion, the segment is deleted."
8525 #: build/C/man2/shmop.2:176
8527 "On success, B<shmat>() returns the address of the attached shared memory "
8528 "segment; on error, I<(void\\ *)\\ -1> is returned, and I<errno> is set to "
8529 "indicate the cause of the error."
8533 #: build/C/man2/shmop.2:182
8535 "On success, B<shmdt>() returns 0; on error -1 is returned, and I<errno> is "
8536 "set to indicate the cause of the error."
8540 #: build/C/man2/shmop.2:188
8541 msgid "When B<shmat>() fails, I<errno> is set to one of the following:"
8545 #: build/C/man2/shmop.2:194
8547 "The calling process does not have the required permissions for the requested "
8548 "attach type, and does not have the B<CAP_IPC_OWNER> capability."
8552 #: build/C/man2/shmop.2:211
8554 "Invalid I<shmid> value, unaligned (i.e., not page-aligned and B<SHM_RND> was "
8555 "not specified) or invalid I<shmaddr> value, or can't attach segment at "
8556 "I<shmaddr>, or B<SHM_REMAP> was specified and I<shmaddr> was NULL."
8560 #: build/C/man2/shmop.2:214
8561 msgid "Could not allocate memory for the descriptor or for the page tables."
8565 #: build/C/man2/shmop.2:220
8566 msgid "When B<shmdt>() fails, I<errno> is set as follows:"
8569 #. The following since 2.6.17-rc1:
8571 #: build/C/man2/shmop.2:228
8573 "There is no shared memory segment attached at I<shmaddr>; or, I<shmaddr> is "
8574 "not aligned on a page boundary."
8578 #: build/C/man2/shmop.2:243
8580 "In SVID 3 (or perhaps earlier), the type of the I<shmaddr> argument was "
8581 "changed from I<char\\ *> into I<const void\\ *>, and the returned type of "
8582 "B<shmat>() from I<char\\ *> into I<void\\ *>."
8586 #: build/C/man2/shmop.2:248
8587 msgid "After a B<fork>(2), the child inherits the attached shared memory segments."
8591 #: build/C/man2/shmop.2:252
8593 "After an B<execve>(2), all attached shared memory segments are detached from "
8598 #: build/C/man2/shmop.2:256
8600 "Upon B<_exit>(2), all attached shared memory segments are detached from the "
8605 #: build/C/man2/shmop.2:268
8607 "Using B<shmat>() with I<shmaddr> equal to NULL is the preferred, portable "
8608 "way of attaching a shared memory segment. Be aware that the shared memory "
8609 "segment attached in this way may be attached at different addresses in "
8610 "different processes. Therefore, any pointers maintained within the shared "
8611 "memory must be made relative (typically to the starting address of the "
8612 "segment), rather than absolute."
8616 #: build/C/man2/shmop.2:273
8618 "On Linux, it is possible to attach a shared memory segment even if it is "
8619 "already marked to be deleted. However, POSIX.1-2001 does not specify this "
8620 "behavior and many other implementations do not support it."
8624 #: build/C/man2/shmop.2:276
8625 msgid "The following system parameter affects B<shmat>():"
8629 #: build/C/man2/shmop.2:276
8635 #: build/C/man2/shmop.2:289
8637 "Segment low boundary address multiple. When explicitly specifying an attach "
8638 "address in a call to B<shmat>(), the caller should ensure that the address "
8639 "is a multiple of this value. This is necessary on some architectures, in "
8640 "order either to ensure good CPU cache performance or to ensure that "
8641 "different attaches of the same segment have consistent views within the CPU "
8642 "cache. B<SHMLBA> is normally some multiple of the system page size (on many "
8643 "Linux architectures, it is the same as the system page size)."
8647 #: build/C/man2/shmop.2:293
8649 "The implementation places no intrinsic per-process limit on the number of "
8650 "shared memory segments (B<SHMSEG>)."
8654 #: build/C/man2/shmop.2:301
8656 "B<brk>(2), B<mmap>(2), B<shmctl>(2), B<shmget>(2), B<capabilities>(7), "
8657 "B<shm_overview>(7), B<svipc>(7)"
8661 #: build/C/man2/subpage_prot.2:30
8663 msgid "SUBPAGE_PROT"
8667 #: build/C/man2/subpage_prot.2:30
8673 #: build/C/man2/subpage_prot.2:33
8674 msgid "subpage_prot - define a subpage protection for an address range"
8678 #: build/C/man2/subpage_prot.2:37
8681 "B<long subpage_prot(unsigned long >I<addr>B<, unsigned long >I<len>B<,>\n"
8682 "B< uint32_t *>I<map>B<);>\n"
8686 #: build/C/man2/subpage_prot.2:41
8687 msgid "I<Note>: There is no glibc wrapper for this system call; see NOTES."
8691 #: build/C/man2/subpage_prot.2:47
8693 "The PowerPC-specific B<subpage_prot>() system call provides the facility to "
8694 "control the access permissions on individual 4kB subpages on systems "
8695 "configured with a page size of 64kB."
8699 #: build/C/man2/subpage_prot.2:54
8701 "The protection map is applied to the memory pages in the region starting at "
8702 "I<addr> and continuing for I<len> bytes. Both of these arguments must be "
8703 "aligned to a 64-kB boundary."
8707 #: build/C/man2/subpage_prot.2:66
8709 "The protection map is specified in the buffer pointed to by I<map>. The map "
8710 "has 2 bits per 4kB subpage; thus each 32-bit word specifies the protections "
8711 "of 16 4kB subpages inside a 64kB page (so, the number of 32-bit words "
8712 "pointed to by I<map> should equate to the number of 64-kB pages specified by "
8713 "I<len>). Each 2-bit field in the protection map is either 0 to allow any "
8714 "access, 1 to prevent writes, or 2 or 3 to prevent all accesses."
8718 #: build/C/man2/subpage_prot.2:71
8720 "On success, B<subpage_prot>() returns 0. Otherwise, one of the error codes "
8721 "specified below is returned."
8725 #: build/C/man2/subpage_prot.2:77
8726 msgid "The buffer referred to by I<map> is not accessible."
8730 #: build/C/man2/subpage_prot.2:87
8732 "The I<addr> or I<len> arguments are incorrect. Both of these arguments must "
8733 "be aligned to a multiple of the system page size, and they must not refer to "
8734 "a region outside of the address space of the process or to a region that "
8735 "consists of huge pages."
8739 #: build/C/man2/subpage_prot.2:90 build/C/man2/sync_file_range.2:166
8740 msgid "Out of memory."
8744 #: build/C/man2/subpage_prot.2:96
8746 "This system call is provided on the PowerPC architecture since Linux "
8747 "2.6.25. The system call is provided only if the kernel is configured with "
8748 "B<CONFIG_PPC_64K_PAGES>. No library support is provided."
8752 #: build/C/man2/subpage_prot.2:101
8754 "Glibc does not provide a wrapper for this system call; call it using "
8759 #: build/C/man2/subpage_prot.2:106
8761 "Normal page protections (at the 64-kB page level) also apply; the subpage "
8762 "protection mechanism is an additional constraint, so putting 0 in a 2-bit "
8763 "field won't allow writes to a page that is otherwise write-protected."
8767 #: build/C/man2/subpage_prot.2:106
8772 #. In the initial implementation, it was the case that:
8773 #. In fact the whole process is switched to use 4k hardware pages when the
8774 #. subpage_prot system call is used, but this could be improved in future
8775 #. to switch only the affected segments.
8776 #. But Paul Mackerass says (Oct 2010): I'm pretty sure we now only switch
8777 #. the affected segment, not the whole process.
8779 #: build/C/man2/subpage_prot.2:128
8781 "This system call is provided to assist writing emulators that operate using "
8782 "64-kB pages on PowerPC systems. When emulating systems such as x86, which "
8783 "uses a smaller page size, the emulator can no longer use the "
8784 "memory-management unit (MMU) and normal system calls for controlling page "
8785 "protections. (The emulator could emulate the MMU by checking and possibly "
8786 "remapping the address for each memory access in software, but that is slow.) "
8787 "The idea is that the emulator supplies an array of protection masks to apply "
8788 "to a specified range of virtual addresses. These masks are applied at the "
8789 "level where hardware page-table entries (PTEs) are inserted into the "
8790 "hardware page table based on the Linux PTEs, so the Linux PTEs are not "
8791 "affected. Implicit in this is that the regions of the address space that "
8792 "are protected are switched to use 4-kB hardware pages rather than 64-kB "
8793 "hardware pages (on machines with hardware 64-kB page support)."
8797 #: build/C/man2/subpage_prot.2:131
8798 msgid "B<mprotect>(2), B<syscall>(2)"
8802 #: build/C/man2/subpage_prot.2:134
8803 msgid "I<Documentation/vm/hugetlbpage.txt> in the Linux kernel source tree"
8807 #: build/C/man2/sync_file_range.2:30
8809 msgid "SYNC_FILE_RANGE"
8813 #: build/C/man2/sync_file_range.2:33
8814 msgid "sync_file_range - sync a file segment with disk"
8818 #: build/C/man2/sync_file_range.2:37
8821 "B<#define _GNU_SOURCE> /* See feature_test_macros(7) */\n"
8822 "B<#include E<lt>fcntl.hE<gt>>\n"
8826 #: build/C/man2/sync_file_range.2:40
8829 "B<int sync_file_range(int >I<fd>B<, off64_t >I<offset>B<, off64_t "
8831 "B< unsigned int >I<flags>B<);>\n"
8835 #: build/C/man2/sync_file_range.2:47
8837 "B<sync_file_range>() permits fine control when synchronizing the open file "
8838 "referred to by the file descriptor I<fd> with disk."
8842 #: build/C/man2/sync_file_range.2:61
8844 "I<offset> is the starting byte of the file range to be synchronized. "
8845 "I<nbytes> specifies the length of the range to be synchronized, in bytes; if "
8846 "I<nbytes> is zero, then all bytes from I<offset> through to the end of file "
8847 "are synchronized. Synchronization is in units of the system page size: "
8848 "I<offset> is rounded down to a page boundary; I<(offset+nbytes-1)> is "
8849 "rounded up to a page boundary."
8853 #: build/C/man2/sync_file_range.2:65
8854 msgid "The I<flags> bit-mask argument can include any of the following values:"
8858 #: build/C/man2/sync_file_range.2:65
8860 msgid "B<SYNC_FILE_RANGE_WAIT_BEFORE>"
8864 #: build/C/man2/sync_file_range.2:70
8866 "Wait upon write-out of all pages in the specified range that have already "
8867 "been submitted to the device driver for write-out before performing any "
8872 #: build/C/man2/sync_file_range.2:70 build/C/man2/sync_file_range.2:120
8874 msgid "B<SYNC_FILE_RANGE_WRITE>"
8878 #: build/C/man2/sync_file_range.2:76
8880 "Initiate write-out of all dirty pages in the specified range which are not "
8881 "presently submitted write-out. Note that even this may block if you attempt "
8882 "to write more than request queue size."
8886 #: build/C/man2/sync_file_range.2:76
8888 msgid "B<SYNC_FILE_RANGE_WAIT_AFTER>"
8892 #: build/C/man2/sync_file_range.2:80
8893 msgid "Wait upon write-out of all pages in the range after performing any write."
8897 #: build/C/man2/sync_file_range.2:84
8898 msgid "Specifying I<flags> as 0 is permitted, as a no-op."
8902 #: build/C/man2/sync_file_range.2:84
8908 #: build/C/man2/sync_file_range.2:100
8910 "This system call is extremely dangerous and should not be used in portable "
8911 "programs. None of these operations writes out the file's metadata. "
8912 "Therefore, unless the application is strictly performing overwrites of "
8913 "already-instantiated disk blocks, there are no guarantees that the data will "
8914 "be available after a crash. There is no user interface to know if a write "
8915 "is purely an overwrite. On filesystems using copy-on-write semantics (e.g., "
8916 "I<btrfs>) an overwrite of existing allocated blocks is impossible. When "
8917 "writing into preallocated space, many filesystems also require calls into "
8918 "the block allocator, which this system call does not sync out to disk. This "
8919 "system call does not flush disk write caches and thus does not provide any "
8920 "data integrity on systems with volatile disk write caches."
8924 #: build/C/man2/sync_file_range.2:100
8926 msgid "Some details"
8930 #: build/C/man2/sync_file_range.2:108
8932 "B<SYNC_FILE_RANGE_WAIT_BEFORE> and B<SYNC_FILE_RANGE_WAIT_AFTER> will detect "
8933 "any I/O errors or B<ENOSPC> conditions and will return these to the caller."
8937 #: build/C/man2/sync_file_range.2:112
8938 msgid "Useful combinations of the I<flags> bits are:"
8942 #: build/C/man2/sync_file_range.2:112
8944 msgid "B<SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE>"
8948 #: build/C/man2/sync_file_range.2:120
8950 "Ensures that all pages in the specified range which were dirty when "
8951 "B<sync_file_range>() was called are placed under write-out. This is a "
8952 "start-write-for-data-integrity operation."
8956 #: build/C/man2/sync_file_range.2:127
8958 "Start write-out of all dirty pages in the specified range which are not "
8959 "presently under write-out. This is an asynchronous flush-to-disk "
8960 "operation. This is not suitable for data integrity operations."
8964 #: build/C/man2/sync_file_range.2:127
8966 msgid "B<SYNC_FILE_RANGE_WAIT_BEFORE> (or B<SYNC_FILE_RANGE_WAIT_AFTER>)"
8970 #: build/C/man2/sync_file_range.2:134
8972 "Wait for completion of write-out of all pages in the specified range. This "
8973 "can be used after an earlier B<SYNC_FILE_RANGE_WAIT_BEFORE | "
8974 "SYNC_FILE_RANGE_WRITE> operation to wait for completion of that operation, "
8975 "and obtain its result."
8979 #: build/C/man2/sync_file_range.2:134
8982 "B<SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE | "
8983 "SYNC_FILE_RANGE_WAIT_AFTER>"
8987 #: build/C/man2/sync_file_range.2:141
8989 "This is a write-for-data-integrity operation that will ensure that all pages "
8990 "in the specified range which were dirty when B<sync_file_range>() was "
8991 "called are committed to disk."
8995 #: build/C/man2/sync_file_range.2:147
8997 "On success, B<sync_file_range>() returns 0; on failure -1 is returned and "
8998 "I<errno> is set to indicate the error."
9002 #: build/C/man2/sync_file_range.2:152
9003 msgid "I<fd> is not a valid file descriptor."
9007 #: build/C/man2/sync_file_range.2:160
9008 msgid "I<flags> specifies an invalid bit; or I<offset> or I<nbytes> is invalid."
9012 #: build/C/man2/sync_file_range.2:163
9017 #: build/C/man2/sync_file_range.2:169
9018 msgid "Out of disk space."
9021 #. FIXME . (bug?) Actually, how can 'fd' refer to a symbolic link (S_ISLNK)?
9022 #. (In user space at least) it isn't possible to obtain a file descriptor
9023 #. for a symbolic link.
9025 #: build/C/man2/sync_file_range.2:177
9027 "I<fd> refers to something other than a regular file, a block device, a "
9028 "directory, or a symbolic link."
9032 #: build/C/man2/sync_file_range.2:180
9033 msgid "B<sync_file_range>() appeared on Linux in kernel 2.6.17."
9037 #: build/C/man2/sync_file_range.2:183
9039 "This system call is Linux-specific, and should be avoided in portable "
9044 #: build/C/man2/sync_file_range.2:184
9046 msgid "sync_file_range2()"
9049 #. See kernel commit edd5cd4a9424f22b0fa08bef5e299d41befd5622
9051 #: build/C/man2/sync_file_range.2:201
9053 "Some architectures (e.g., PowerPC, ARM) need 64-bit arguments to be aligned "
9054 "in a suitable pair of registers. On such architectures, the call signature "
9055 "of B<sync_file_range>() shown in the SYNOPSIS would force a register to be "
9056 "wasted as padding between the I<fd> and I<offset> arguments. (See "
9057 "B<syscall>(2) for details.) Therefore, these architectures define a "
9058 "different system call that orders the arguments suitably:"
9062 #: build/C/man2/sync_file_range.2:206
9065 "B<int sync_file_range2(int >I<fd>B<, unsigned int >I<flags>B<,>\n"
9066 "B< off64_t >I<offset>B<, off64_t >I<nbytes>B<);>\n"
9070 #: build/C/man2/sync_file_range.2:211
9072 "The behavior of this system call is otherwise exactly the same as "
9073 "B<sync_file_range>()."
9077 #: build/C/man2/sync_file_range.2:222
9079 "A system call with this signature first appeared on the ARM architecture in "
9080 "Linux 2.6.20, with the name B<arm_sync_file_range>(). It was renamed in "
9081 "Linux 2.6.22, when the analogous system call was added for PowerPC. On "
9082 "architectures where glibc support is provided, glibc transparently wraps "
9083 "B<sync_file_range2>() under the name B<sync_file_range>()."
9087 #: build/C/man2/sync_file_range.2:227
9088 msgid "B<fdatasync>(2), B<fsync>(2), B<msync>(2), B<sync>(2)"