Provided by: manpages-de-dev_0.5-4.1ubuntu1_all bug

BEZEICHNUNG

       mremap - verlege eine virtuelle Speicheradresse

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