Scroll to navigation

BRK(2) Linux Programmeurs Handleiding BRK(2)

NAAM

brk, sbrk - verander data segment grootte

SAMENVATTING

#include <unistd.h>

int brk(void *adres);

void *sbrk(intptr_t increment);

Test Macro´s in glibc (zie feature_test_macros(7)):

brk(), sbrk():

_DEFAULT_SOURCE ||

(_XOPEN_SOURCE >= 500) &&
! (_POSIX_C_SOURCE >= 200112L)
_BSD_SOURCE || _SVID_SOURCE ||

(_XOPEN_SOURCE >= 500) &&
! (_POSIX_C_SOURCE >= 200112L)
_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500

BESCHRIJVING

brk() eb sbrk() veranderen de locatie van het programma einde, die het einde het het data segment van het proces markeert (m.a.w., het programma einde is de eerste locatie ná het einde van het niet-geïnitialiseerde data segment). Verhogen van het programma einde heeft een effect op het toekennen van geheugen aan het proces; verlagen van het einde geeft geheugen vrij.

brk() zet het einde van het data segment op de waarde gegeven door addr, wanneer die waarde redelijk is, het systeem genoeg geheugen heeft, en het proces overschrijdt niet de maximale data grootte (zie setrlimit(2)).

sbrk() vergroot de data ruimte van het programma met increment bytes. Aanroepen van sbrk() met een increment waarde 0 kan gebruikt worden om de huidige locatie van het programma einde te vinden.

EIND WAARDE

Bij succes geeft brk() nul terug. Bij falen wordt -1 teruggegeven en wordt errno naar behoren gezet.

Bij succes retourneert sbrk() het vorige programma einden. (Als het einde werd vergroot dan is deze waarde een wijzer naar het begin van het nieuw toegewezen geheugen). Bij een fout wordt (void *) -1 teruggegeven, en errno wordt op ENOMEM gezet.

VOLDOET AAN

4.3BSD; SUSv1, markeerden erfenis in SUSv2, verwijderd in POSIX.1-2001.

OPMERKINGEN

Vermijd het gebruik van brk() en sbrk(): het malloc(3) geheugen toewijs pakket is overdraagbaar en een comfortabele manier om geheugen toe te wijzen.

Verschillende systemen gebruiken verschillende typen voor het argument van sbrk(). Gebruikt worden int, ssize_t, ptrdiff_t, intptr_t.

C library/kernel verschillen

De uitvoer waarde zoals boven beschreven voor brk() is het gedrag voorzien door de glibc omwikkel functie voor de Linux brk() systeem aanroep. (In de meeste andere implementaties, is de uitvoer waarde van brk() hetzelfde; deze uitvoer waarde werd ook gespecificeerd in SUSv2.) Echter, de huidige Linux systeem aanroep retourneert een nieuw programma einde bij succes. Bij een fout, retourneert de systeem aanroep het huidige einde. De glibc omwikkel functie doet werk (m.a.w., controleert of het nieuwe einde kleiner is dan addr) om te voorzien in de 0 en -1 uitvoer waarden zoals hierboven beschreven.

Op Linux is sbrk() geïmplementeerd als een bibliotheek functie die de brk systeem aanroep gebruikt, en die interne administratie uitvoert zodat het oude einde teruggegeven kan worden.

ZIE OOK

execve(2), getrlimit(2), end(3), malloc(3)

COLOFON

Deze pagina is onderdeel van release 5.10 van het Linux man-pages-project. Een beschrijving van het project, informatie over het melden van bugs en de nieuwste versie van deze pagina zijn op https://www.kernel.org/doc/man-pages/ te vinden.

VERTALING

De Nederlandse vertaling van deze handleiding is geschreven door Mario Blättermann <mario.blaettermann@gmail.com> en Luc Castermans <luc.castermans@gmail.com>

Deze vertaling is vrije documentatie; lees de GNU General Public License Version 3 of later over de Copyright-voorwaarden. Er is geen AANSPRAKELIJKHEID.

Indien U fouten in de vertaling van deze handleiding zou vinden, stuur een e-mail naar debian-l10n-dutch@lists.debian.org.

15 maart 2016 Linux