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