.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1996 Tom Bjorkholm .\" .\" %%%LICENSE_START(GPLv2+_DOC_FULL) .\" 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, see .\" . .\" %%%LICENSE_END .\" .\" 1996-04-11 Tom Bjorkholm .\" First version written (1.3.86) .\" 1996-04-12 Tom Bjorkholm .\" Update for Linux 1.3.87 and later .\" 2005-10-11 mtk: Added NOTES for MREMAP_FIXED; revised EINVAL text. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH MREMAP 2 "5. Dezember 2015" Linux Linux\-Programmierhandbuch .SH BEZEICHNUNG mremap \- verlegt eine virtuelle Speicheradresse .SH ÜBERSICHT .nf \fB#define _GNU_SOURCE\fP /* Siehe feature_test_macros(7) */ .br \fB#include \fP .sp \fBvoid *mremap(void *\fP\fIold_address\fP\fB, size_t \fP\fIold_size\fP\fB,\fP \fB size_t \fP\fInew_size\fP\fB, int \fP\fIflags\fP\fB, … /* void *\fP\fInew_address\fP\fB */);\fP .fi .SH BESCHREIBUNG \fBmremap\fP() expands (or shrinks) an existing memory mapping, potentially moving it at the same time (controlled by the \fIflags\fP argument and the available virtual address space). \fIold_address\fP ist die alte Adresse des virtuellen Speicherblocks, den man vergrößern (oder verkleinern) möchte. Beachten Sie, dass \fIold_address\fP an den Speicherseiten ausgerichtet sein muss. \fIold_size\fP ist die alte Größe des virtuellen Speicherblocks. \fInew_size\fP ist die angeforderte Größe des virtuellen Speicherblocks nach der Größenänderung. Optional kann ein fünftes Argument, \fInew_address\fP angegeben werden; siehe die folgende Beschreibung von \fBMREMAP_FIXED\fP. 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\fP() benutzt das Linux\-Schema für »page tables« (Seitentabellen). \fBmremap\fP() ändert die Verknüpfung zwischen virtuellen Adressen und Speicherseiten. Dies kann benutzt werden, um ein sehr effizientes \fBrealloc\fP(3) zu implementieren. Das Bitmasken\-Argument \fIflags\fP kann 0 sein oder die folgenden Schalter enthalten: .TP \fBMREMAP_MAYMOVE\fP By default, if there is not sufficient space to expand a mapping at its current location, then \fBmremap\fP() fails. If this flag is specified, then the kernel is permitted to relocate the mapping to a new virtual address, if necessary. If the mapping is relocated, then absolute pointers into the old mapping location become invalid (offsets relative to the starting address of the mapping should be employed). .TP \fBMREMAP_FIXED\fP (seit Linux 2.3.31) This flag serves a similar purpose to the \fBMAP_FIXED\fP flag of \fBmmap\fP(2). If this flag is specified, then \fBmremap\fP() accepts a fifth argument, \fIvoid\ *new_address\fP, which specifies a page\-aligned address to which the mapping must be moved. Any previous mapping at the address range specified by \fInew_address\fP and \fInew_size\fP is unmapped. If \fBMREMAP_FIXED\fP is specified, then \fBMREMAP_MAYMOVE\fP must also be specified. .PP Falls das von \fIold_address\fP und \fIold_size\fP angegebene Speichersegment gesperrt ist (mittels \fBmlock\fP(2) oder etwas Ähnlichem), wird diese Sperre aufrecht erhalten, wenn das Speichersegment verschoben oder seine Größe geändert wird. Als Folge davon kann sich die Größe des durch einen Prozess gesperrten Speichers ändern. .SH RÜCKGABEWERT Bei Erfolg gibt \fBmremap\fP() einen Zeiger auf den neuen virtuellen Speicherbereich zurück. Im Fehlerfall wird der Wert von \fBMAP_FAILED\fP (d.h. \fI(void\ *)\ \-1\fP) zurückgegeben und \fIerrno\fP entsprechend gesetzt. .SH FEHLER .TP \fBEAGAIN\fP Der Aufrufende versuchte, ein gesperrtes Speichersegment zu vergrößern. Das war nicht möglich, ohne die Resourcen\-Begrenzung \fBRLIMIT_MEMLOCK\fP zu überschreiten. .TP \fBEFAULT\fP "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 \fBEFAULT\fP even if there exist mappings that cover the whole address space requested, but those mappings are of different types. .TP \fBEINVAL\fP Es wurde ein unzulässiges Argument angegeben. Mögliche Ursachen sind: \fIold_address\fP war nicht an einer Speicherseite ausgerichtet; in \fIflags\fP wurde ein anderer Wert als \fBMREMAP_MAYMOVE\fP oder \fBMREMAP_FIXED\fP angegeben; \fInew_size\fP war null; \fInew_size\fP oder \fInew_address\fP war ungültig; oder der durch \fInew_address\fP and \fInew_size\fP angegebene neue Adressbereich überschnitt sich mit dem durch \fIold_address\fP und \fIold_size\fP angegebenen alten Adressbereich oder \fBMREMAP_FIXED\fP wurde angegeben, ohne zugleich auch \fBMREMAP_MAYMOVE\fP anzugeben. .TP \fBENOMEM\fP Der Speicherbereich kann an der aktuellen virtuellen Adresse nicht erweitert werden und in \fIflags\fP ist der Schalter \fIMREMAP_MAYMOVE\fP nicht gesetzt. Oder es gibt nicht genug freien (virtuellen) Speicher. .SH "KONFORM ZU" .\" 4.2BSD had a (never actually implemented) .\" .BR mremap (2) .\" call with completely different semantics. Dieser Aufruf ist Linux\-spezifisch und sollte nicht in Programmen verwendet werden, die portierbar sein sollen. .SH ANMERKUNGEN Vor Version 2.4 machte die Glibc die Definition von \fBMREMAP_FIXED\fP nicht verfügbar und der Prototyp für \fBmremap\fP() ließ das Argument \fInew_address\fP nicht zu. Falls \fBmremap\fP() dazu verwandt wird, einen mit \fBmlock\fP(2) oder äquivalentem gesperrten Bereich zu verschieben oder zu erweitern, wird der Aufruf \fBmremap\fP() sich die beste Mühe geben, den neuen Bereich zu bestücken, wird aber nicht mit \fBENOMEM\fP fehlschlagen, falls der Bereich nicht bestückt werden kann. .SH "SIEHE AUCH" \fBbrk\fP(2), \fBgetpagesize\fP(2), \fBgetrlimit\fP(2), \fBmlock\fP(2), \fBmmap\fP(2), \fBsbrk\fP(2), \fBmalloc\fP(3), \fBrealloc\fP(3) Ihr Lieblingsbuch über Betriebssysteme für weitere Informationen über »paged memory«. (\fIModern Operating Systems\fP von Andrew S. Tannenbaum, \fIInside Linux\fP von Randolf Bentson, \fIThe Design of the UNIX Operating System\fP von Maurice J. Bach.) .SH KOLOPHON Diese Seite ist Teil der Veröffentlichung 4.09 des Projekts Linux\-\fIman\-pages\fP. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter \%https://www.kernel.org/doc/man\-pages/. .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von FIXME: Once mapping is properly translated, Patrick Rother , Martin Eberhard Schauer und Mario Blättermann erstellt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an .