diff options
Diffstat (limited to 'man2/mremap.2')
-rw-r--r-- | man2/mremap.2 | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/man2/mremap.2 b/man2/mremap.2 new file mode 100644 index 000000000..6416395cf --- /dev/null +++ b/man2/mremap.2 @@ -0,0 +1,119 @@ +.\" Hey Emacs! This file is -*- nroff -*- source. +.\" +.\" Copyright (c) 1996 Tom Bjorkholm <tomb@mydata.se> +.\" +.\" This is free documentation; you can redistribute it and/or +.\" modify it under the terms of the GNU General Public License as +.\" published by the Free Software Foundation; either version 2 of +.\" the License, or (at your option) any later version. +.\" +.\" The GNU General Public License's references to "object code" +.\" and "executables" are to be interpreted as the output of any +.\" document formatting or typesetting system, including +.\" intermediate and printed output. +.\" +.\" This manual is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public +.\" License along with this manual; if not, write to the Free +.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, +.\" USA. +.\" +.\" 1996-04-11 Tom Bjorkholm <tomb@mydata.se> +.\" First version written (1.3.86) +.\" 1996-04-12 Tom Bjorkholm <tomb@mydata.se> +.\" Update for Linux 1.3.87 and later +.\" +.TH MREMAP 2 1996-04-12 "Linux 1.3.87" "Linux Programmer's Manual" +.SH NAME +mremap \- re-map a virtual memory address +.SH SYNOPSIS +.B #include <unistd.h> +.br +.B #include <sys/mman.h> +.sp +.BI "void * mremap(void *" old_address ", size_t " old_size +.BI ", size_t " new_size ", unsigned long " flags ); +.fi +.SH DESCRIPTION +\fBmremap\fR expands (or shrinks) an existing memory mapping, potentially +moving it at the same time (controlled by the \fIflags\fR argument and +the available virtual address space). + +\fIold_address\fR is the old address of the virtual memory block that you +want to expand (or shrink). Note that \fIold_address\fR has to be page +aligned. \fIold_size\fR is the old size of the +virtual memory block. \fInew_size\fR is the requested size of the +virtual memory block after the resize. + +The \fIflags\fR argument is a bitmap of flags. + +In Linux the memory is divided into pages. A user process has (one or) +several linear virtual memory segments. Each virtual memory segment has one +or more mappings to real memory pages (in the page table). Each virtual +memory segment has its own protection (access rights), which may cause +a segmentation violation if the memory is accessed incorrectly (e.g., +writing to a read-only segment). Accessing virtual memory outside of the +segments will also cause a segmentation violation. + +\fBmremap\fR uses the Linux page table scheme. \fBmremap\fR changes the +mapping between virtual addresses and memory pages. This can be used to +implement a very efficient \fBrealloc\fR. + +.SH FLAGS +.TP +.B MREMAP_MAYMOVE +indicates if the operation should fail, or change the virtual address +if the resize cannot be done at the current virtual address. + +.SH "RETURN VALUE" +On success \fBmremap\fR returns a pointer to the new virtual memory area. +On error, the value +.B MAP_FAILED +(that is, (void *) \-1) is returned, and \fIerrno\fR is set appropriately. + +.SH ERRORS +.TP +.B EAGAIN +The memory segment is locked and cannot be re-mapped. +.TP +.B EFAULT +"Segmentation fault." Some address in the range +\fIold_address\fP to \fIold_address\fP+\fIold_size\fP is an invalid +virtual memory address for this process. +You can also get EFAULT even if there exist mappings that cover the +whole address space requested, but those mappings are of different types. +.TP +.B EINVAL +An invalid argument was given. Most likely \fIold_address\fR was not +page aligned. +.TP +.B ENOMEM +The memory area cannot be expanded at the current virtual address, and the +.B MREMAP_MAYMOVE +flag is not set in \fIflags\fP. +Or, there is not enough (virtual) memory available. +.SH NOTES +With current glibc includes, in order to get the definition of +.BR MREMAP_MAYMOVE , +you need to define _GNU_SOURCE before including <sys/mman.h>. +.SH "CONFORMING TO" +This call is Linux-specific, and should not be used in programs +intended to be portable. 4.2BSD had a (never actually implemented) +.BR mremap (2) +call with completely different semantics. +.SH "SEE ALSO" +.BR brk (2), +.BR getpagesize (2), +.BR mmap (2), +.BR sbrk (2), +.BR malloc (3), +.BR realloc (3) +.P +Your favorite OS text book for more information on paged memory. +(\fIModern Operating Systems\fR by Andrew S. Tannenbaum, +\fIInside Linux\fR by Randolf Bentson, +\fIThe Design of the UNIX Operating System\fR by Maurice J. Bach.) |