Provided by:
manpages-de-dev_0.10-1_all 
BEZEICHNUNG
mremap - verlege eine virtuelle Speicheradresse
Diese Handbuchseite ist eventuell veraltet. Im Zweifelsfall ziehen Sie
die englischsprachige Handbuchseite zu Rate, indem Sie
man -LC 2 mremap
eingeben.
"UBERSICHT
#include <unistd.h>
#include <sys/mman.h>
void * mremap(void * old_address, size_t old_size , size_t new_size,
unsigned long flags);
BESCHREIBUNG
mremap erweitert (oder verkleinert) einen bestehenden Speicherbereich,
potenziell durch gleichzeitiges Verschieben (bestimmt durch das
Argument flags und den zur Verfugung stehenden virtuellen
Speicherplatz).
old_address ist die alte Adresse des virtuellen Speicherblocks den man
vergroBern (oder verkleinern) mochte. Beachten Sie, dass old_address
an die Speicherseiten ausgerichtet sein muss. old_size ist die alte
GroBe des virtuellen Speicherblocks. new_size ist die angeforderte
GroBe des virtuellen Speicherblocks nach der GroBenanderung.
Das Argument flags ist ein Bitmuster von Flags.
Unter Linux ist der Speicher in Seiten eingeteilt. Ein Benutzerprozes
hat (eine oder) mehrere lineare virtuelle Speichersegmente. Jedes
virtuelle Speichersegment hat ein oder mehr Verknupfungen zu realen
Speicherseiten (in der Seitentabelle). Jedes virtuelle Speichersegment
hat seine eigenen Schutz (Zugriffsrechte), welcher eine
Segmentverletzung (Segmentation violation) verursachen kann wenn auf
den Speicher unkorrekt zugegriffen wird. Zugreifen auf virtuellen
Speicher auBerhalb der Segmente verursacht auch eine Segmentverletzung.
mremap benutzt das Linux Seitentabellenschema. mremap andert die
Verknupfung zwischen virtuellen Adressen und Speicherseiten. Dies kann
benutzt werden im ein sehr effizientes realloc zu implementieren.
FLAGS
MREMAP_MAYMOVE
zeigt an ob die Operation fehlschlagen oder die virtuelle
Adresse andern soll, wenn die GroBenanderung nicht durchgefuhrt
werden kann bei der aktuellen virtuellen Adresse.
R"UCKGABEWERT
Bei Erfolg gibt mremap einen Pointer auf den neuen virtuellen
Speicherbereich zuruck. Im Fehlerfall wird -1 zuruckgegeben und errno
entsprechend gesetzt.
FEHLER
EINVAL Ein ungultiges Argument wurde angegeben. Sehr wahrscheinlich
war old_address nicht an der Speicherseite ausgerichtet.
EFAULT "Segmentation fault." Eine Adresse im Bereich von old_address
bis old_address+old_size ist eine ungultige Speicheradresse fur
diesen Prozess. Man erhalt sogar EFAULT, wenn Verknupfungen
existieren, die den gesamten angeforderten Adresseraum abdecken,
aber von unterschiedlichem Typ sind.
EAGAIN Das Speichersegment ist gesperrt und kann nicht neu verknupft
werden.
ENOMEM Der Speicherbereich kann an der aktuellen virtuellen Adresse
nicht erweitert werden, und das Flag MREMAP_MAYMOVE ist nicht
gesetzt in flags. Oder es gibt nicht genug freien virtuellen
Speicher.
SIEHE AUCH
getpagesize(2), realloc(3), malloc(3), brk(2), sbrk(2), mmap(2)
Ihr Lieblings-Betriebssystem-Buch fur mehr Informationen uber paged
memory. (Modern Operating Systems von Andrew S. Tannenbaum, Inside
Linux von Randolf Bentson, The Design of the UNIX Operating System von
Maurice J. Bach.)