summaryrefslogtreecommitdiffstats
path: root/man2/mremap.2
diff options
context:
space:
mode:
Diffstat (limited to 'man2/mremap.2')
-rw-r--r--man2/mremap.2119
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.)