Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ brk(2) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

exec(2)

mmap(2)

malloc(3C)

unistd(4)

brk(2)                                                               brk(2)

NAME
     brk, sbrk - Größe des Datensegments verändern

SYNTAX
     #include <unistd.h>

     int brk(void *endds);

     void *sbrk(int incr);

BESCHREIBUNG
     brk() und sbrk() werden zum dynamischen Ändern des Speicherplatzes
     verwendet, der dem Datensegment des aufrufenden Prozesses zugewiesen
     ist [vgl. exec(2)]. Die Änderung wird durch Rücksetzen des Speicher-
     grenzwerts (Break Value) des Prozesses und Zuweisen eines entsprechen-
     den Bereichs vorgenommen. Der Speichergrenzwert ist die erste nicht
     belegte Adresse oberhalb des Datensegments. Der Umfang des zugewiese-
     nen Speicherplatzes erhöht sich mit der Vergrößerung des Speicher-
     grenzwerts. Neu zugewiesener Speicherplatz wird auf Null gesetzt. Wenn
     jedoch derselbe Speicherplatz demselben Prozeß wieder zugewiesen wird,
     ist sein Inhalt undefiniert.

     brk() setzt den Grenzwert auf endds und ändert den zugewiesenen Platz
     entsprechend.

     sbrk() fügt incr Bytes zum Grenzwert hinzu und ändert den zugewiesenen
     Platz entsprechend. incr kann negativ sein. In diesem Fall wird der
     Umfang des zugewiesenen Speicherplatzes verringert.

FEHLER
     Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
     Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
     errno(5).

     Die Funktionen brk() und sbrk() schlagen bei einer der folgenden
     Bedingungen fehl:

     ENOMEM    Durch die angeforderte Änderung würde mehr Speicherplatz als
               zulässig zugewiesen.

     Die Funktionen brk() und sbrk() können bei einer der folgenden Bedin-
     gungen fehlschlagen:

     EAGAIN    Der gesamte Systemspeicherplatz, der für die Zuweisung für
               diesen Prozeß verfügbar ist, reicht temporär nicht aus. Dies
               kann auch dann eintreten, wenn der angeforderte Speicher-
               platz unter der Maximalgröße des Datensegments lag.

     ENOMEM    Die angeforderte Änderung wäre nicht möglich, da der verfüg-
               bare Swap-Bereich nicht ausreicht, oder würde zu einem Kon-
               flikt in der Speicherzuweisung führen.




Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

brk(2)                                                               brk(2)

RÜCKGABEWERT
     Bei erfolgreicher Ausführung gibt brk() den Wert 0 zurück. Andernfalls
     wird -1 zurückgegeben und errno gesetzt, um den Fehler anzuzeigen.

     Bei erfolgreicher Ausführung gibt sbrk() den vorherigen Speichergrenz-
     wert zurück. Andernfalls wird (void *)-1 zurückgegeben und errno
     gesetzt, um den Fehler anzuzeigen.

ANWENDUNGSZWECK
     Die Funktionen brk() und sbrk() wurden bisher in speziellen Fällen
     eingesetzt, wenn keine andere Speicherzuweisungsfunktion die gleichen
     Möglichkeiten geboten hätte. Heute wird allerdings die Verwendung von
     mmap() bevorzugt, da diese portierbare Funktion zusammen mit allen
     anderen Speicherzuweisungsfunktionen sowie mit jeder Funktion, die
     andere Zuweisungsfunktionen verwendet, eingesetzt werden kann.

     Ob der von sbrk() zurückgegebene Zeiger für jeden Zweck korrekt ausge-
     richtet wird, ist nicht angegeben.

SIEHE AUCH
     exec(2), mmap(2), malloc(3C), unistd(4).

































Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026