Scroll to navigation

brk(2) System Calls Manual brk(2)

NUME

brk, sbrk - modifică dimensiunea segmentului de date

BIBLIOTECA

Biblioteca C standard (libc, -lc)

REZUMAT

#include <unistd.h>
int brk(void *addr);
void *sbrk(intptr_t increment);

Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

brk(), sbrk():


Începând cu glibc 2.19:
_DEFAULT_SOURCE
|| ((_XOPEN_SOURCE >= 500) &&
! (_POSIX_C_SOURCE >= 200112L))
De la glibc 2.12 la glibc 2.19:
_BSD_SOURCE || _SVID_SOURCE
|| ((_XOPEN_SOURCE >= 500) &&
! (_POSIX_C_SOURCE >= 200112L))
Înainte de glibc 2.12:
_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500

DESCRIERE

brk() și sbrk() modifică locația lui program break, care definește sfârșitul segmentului de date al procesului (de exemplu, pauza de program este prima locație după sfârșitul segmentului de date neinițializat). Creșterea întreruperii de program are ca efect alocarea de memorie pentru proces; scăderea întreruperii are ca efect eliberarea de memorie.

brk() stabilește sfârșitul segmentului de date la valoarea specificată de addr, atunci când această valoare este rezonabilă, sistemul are suficientă memorie, iar procesul nu depășește dimensiunea maximă a datelor (a se vedea setrlimit(2)).

sbrk() mărește spațiul de date al programului cu increment octeți. Apelarea sbrk() cu un increment de 0 poate fi utilizată pentru a găsi locația curentă a întreruperii programului.

VALOAREA RETURNATĂ

În caz de succes, brk() returnează zero. În caz de eroare, se returnează -1, iar errno este stabilită la ENOMEM.

În caz de succes, sbrk() returnează întreruperea anterioară a programului (dacă pauza a fost mărită, atunci această valoare este un indicator la începutul memoriei nou alocate). În caz de eroare, se returnează (void *) -1, iar errno este stabilită la ENOMEM.

STANDARDE

Niciunul.

ISTORIC

4.3BSD; SUSv1, marcată ca „LEGACY” în SUSv2, eliminată în POSIX.1-2001.

NOTE

Evitați utilizarea brk() și sbrk(): pachetul de alocare a memoriei malloc(3) este modul portabil și confortabil de alocare a memoriei.

Diferite sisteme utilizează diferite tipuri pentru argumentul lui sbrk(). Cele mai comune sunt int, ssize_t, ptrdiff_t, intr_t.

Diferențe între biblioteca C și nucleu

Valoarea de retur descrisă mai sus pentru brk() este comportamentul oferit de funcția de învăluire glibc pentru apelul de sistem Linux brk(); (în majoritatea celorlalte implementări, valoarea de returnare de la brk() este aceeași; această valoare de returnare a fost, de asemenea, specificată în SUSv2). Cu toate acestea, apelul de sistem Linux efectiv returnează noua întrerupere a programului în caz de succes. În caz de eșec, apelul de sistem returnează întreruperea curentă. Funcția de învăluire glibc face o anumită muncă (de exemplu, verifică dacă noua întrerupere este mai mică decât addr) pentru a furniza valorile de returnare 0 și -1 descrise mai sus.

În Linux, sbrk() este implementată ca o funcție de bibliotecă care utilizează apelul de sistem brk() și face o anumită contabilitate internă pentru a putea returna vechea valoare de întrerupere.

CONSULTAȚI ȘI

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

TRADUCERE

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

30 martie 2023 Pagini de manual de Linux 6.05.01