table of contents
brk(2) | System Calls Manual | brk(2) |
NUME¶
brk, sbrk - modifică dimensiunea segmentului de date
BIBLIOTECA¶
Biblioteca C standard (libc, -lc)
SINOPSIS¶
#include <unistd.h>
int brk(void *addr); void *sbrk(intptr_t increment);
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¶
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.
2 mai 2024 | Pagini de manual Linux (nepublicate) |