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