Provided by: manpages-de-dev_0.10-1_all bug

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.

ÜBERSICHT

       #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 Verfügung
       stehenden virtuellen Speicherplatz).

       old_address ist die alte Adresse des virtuellen Speicherblocks den  man  vergrößern  (oder
       verkleinern)  möchte.  Beachten  Sie,  dass old_address an die Speicherseiten ausgerichtet
       sein muss. old_size ist die alte Größe des virtuellen  Speicherblocks.  new_size  ist  die
       angeforderte Größe des virtuellen Speicherblocks nach der Größenänderung.

       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  Verknüpfungen  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  außerhalb  der  Segmente  verursacht  auch  eine
       Segmentverletzung.

       mremap  benutzt  das  Linux  Seitentabellenschema.  mremap ändert die Verknüpfung 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 ändern soll, wenn
              die Größenänderung nicht durchgeführt werden  kann  bei  der  aktuellen  virtuellen
              Adresse.

RÜCKGABEWERT

       Bei  Erfolg  gibt mremap einen Pointer auf den neuen virtuellen Speicherbereich zurück. Im
       Fehlerfall wird -1 zurückgegeben und errno entsprechend gesetzt.

FEHLER

       EINVAL Ein ungültiges 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 ungültige Speicheradresse  für  diesen  Prozess.  Man
              erhält  sogar EFAULT, wenn Verknüpfungen existieren, die den gesamten angeforderten
              Adresseraum abdecken, aber von unterschiedlichem Typ sind.

       EAGAIN Das Speichersegment ist gesperrt und kann nicht neu verknüpft 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  für  mehr  Informationen  über  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.)