BEZEICHNUNG
brk, sbrk - Datensegmentgröße ändern
ÜBERSICHT
#include <unistd.h>
int brk(void *adresse);
void *sbrk(intptr_t erhoehung);
Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):
brk(), sbrk():
Seit Glibc 2.19:
_DEFAULT_SOURCE ||
(_XOPEN_SOURCE >= 500) &&
! (_POSIX_C_SOURCE >= 200112L)
Von Glibc 2.12 bis 2.19:
_BSD_SOURCE || _SVID_SOURCE ||
(_XOPEN_SOURCE >= 500) &&
! (_POSIX_C_SOURCE >= 200112L)
Vor Glibc 2.12:
_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500
BESCHREIBUNG
brk() und sbrk() ändern den Ort des program break, der das Ende des Datensegments des Prozesses definiert (d.h. der Program-Break ist der erste Ort nach dem Ende des nicht initialisierten Datensegments). Den Program-Break zu vergrößern hat die Auswirkung, dass für den Prozess Speicher reserviert wird; den Break zu verkleinern gibt reservierten Speicher frei.
brk setzt das Ende des Datensegments auf den Wert, der durch adresse angegeben ist. Wenn dieser Wert vernünftig ist, hat das System genug Speicher und der Prozess überschreitet nicht seine maximale Datengröße (siehe setrlimit(2)).
sbrk vergrößert den Datenbereich des Programms um erhoehung Byte. Der Aufruf von sbrk mit einer erhoehung von 0 kann zum Auffinden des aktuellen Ortes des Program-Breaks benutzt werden.
RÜCKGABEWERT
Bei Erfolg gibt brk Null zurück. Im Fehlerfall wird -1 zurückgegeben und errno auf ENOMEM gesetzt.
Bei Erfolg gibt sbrk den vorherigen Program-Break zurück. (Falls der Break erhöht wurde, ist dieser Wert ein Zeiger auf den Anfang des neu reservierten Speichers). Im Fehlerfall wird (void *) -1 zurückgegeben und errno auf ENOMEM gesetzt.
KONFORM ZU
4.3BSD; SUSv1, in SUSv2 als ALTLAST gekennzeichnet, in POSIX.1-2001 entfernt
ANMERKUNGEN
Vermeiden Sie die Benutzung von brk() und sbrk(): Das Speicherreservierungspaket malloc(3) ist portabel und stellt eine komfortable Möglichkeit der Speicherreservierung bereit.
Verschiedene Systeme benutzen verschieden Typen für das Argument von sbrk(). Üblich sind int, ssize_t, ptrdiff_t und intptr_t.
Unterschiede
C-Bibliothek/Kernel
Der oben beschriebene Rückgabewert für
brk() stellt das durch die Glibc-Wrapper-Funktion
bereitgestellte Verhalten für den Linux-Systemaufruf
brk() bereit. (In den meisten anderen
Implementierungen hat brk() den gleichen
Rückgabewert; dieser Rückgabewert wurde auch in
SUSv2 angegeben.) Der tatsächliche Linux-Systemaufruf
gibt allerdings bei Erfolg den neuen Program-Break
zurück. Bei Misserfolg gibt der Systemaufruf den
aktuellen Break zurück. Die Glibc-Wrapper-Funktion tut
dasselbe (d.h. sie prüft, ob der neue Break kleiner als
adresse ist), um die Rückgabewerte 0 und -1 wie
oben beschrieben zurückzugeben.
Auf Linux ist sbrk() als Bibliotheksfunktion implementiert, die den Systemaufruf brk() benutzt und ein wenig interne Buchführung erledigt, so dass sie den alten Break-Wert zurückgeben kann.
SIEHE AUCH
execve(2), getrlimit(2), end(3), malloc(3)
KOLOPHON
Diese Seite ist Teil der Veröffentlichung 5.07 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother <krd [AT] gulu.net>, Chris Leick <c.leick [AT] vollbio.de> und Mario Blättermann <mario.blaettermann [AT] gmail.com> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <debian-l10n-german [AT] lists.org>.