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.

"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.)