Provided by: manpages-pl-dev_4.26.0-1_all 

NAZWA
brk, sbrk - zmienia wielkość segmentu danych
BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)
SKŁADNIA
#include <unistd.h>
int brk(void *addr);
void *sbrk(intptr_t increment);
Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):
brk(), sbrk():
Od glibc 2.19:
_DEFAULT_SOURCE
|| ((_XOPEN_SOURCE >= 500) &&
! (_POSIX_C_SOURCE >= 200112L))
glibc 2.12 do glibc 2.19:
_BSD_SOURCE || _SVID_SOURCE
|| ((_XOPEN_SOURCE >= 500) &&
! (_POSIX_C_SOURCE >= 200112L))
Przed glibc 2.12:
_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500
OPIS
brk() i sbrk() zmieniają położenie punktu zakończenia programu, definiującego koniec segmentu danych
procesu (tzn. punkt zakończenie programu jest pierwszym położeniem po końcu niezainicjowanego segmentu
danych). Zwiększenie punktu zakończenia programu w efekcie zwiększa przydzieloną procesowi pamięć;
zmniejszenie - cofa przydzielenie pamięci.
brk() ustawia koniec segmentu danych na wartość podaną jako argument addr, o ile wartość ta jest
sensowna, system posiada dostateczną ilość pamięci oraz nie zostanie przekroczona maksymalna wielkość
segmentu danych dla procesu (zobacz setrlimit(2)).
sbrk() zwiększa przestrzeń danych programu o wartość increment bajtów. Wywołanie sbrk() z increment
równym 0 może służyć do znalezienia aktualnej lokalizacji punktu zakończenia programu.
WARTOŚĆ ZWRACANA
Po pomyślnym zakończeniu brk() zwraca zero. Po błędzie zwracane jest -1, a errno ustawiane jest na
ENOMEM.
Po pomyślnym zakończeniu, sbrk() zwraca poprzedni punkt zakończenia programu (jeśli go zwiększono, to
wartość ta wskazuje na początek nowo przydzielonej pamięci). W przypadku błędu zwracane jest (void *) -1
a errno nadawana jest wartość ENOMEM.
STANDARDY
Brak.
HISTORIA
4.3BSD; SUSv1, oznaczone jako LEGACY (przestarzałe) w SUSv2, usunięte w POSIX.1-2001.
UWAGI
Nie zaleca się używania brk() i sbrk(): przenośnym i wygodnym sposobem przydzielania pamięci jest pakiet
malloc(3).
Różne systemy używają różnych typów argumentu sbrk(). Powszechne są: int, ssize_t, ptrdiff_t, intptr_t.
Różnice biblioteki C/jądra
Zwracana wartość opisana powyżej dla brk() jest zachowaniem udostępnianym przez funkcję opakowującą z
glibc dla wywołania systemowego brk() Linuksa (w większości innych implementacji, zwracana wartość brk()
jest taka sama; takąż określono również w SUSv2). Jednak rzeczywiste linuksowe wywołanie systemowe zwraca
przy pomyślnym zakończeniu nowy punkt zakończenia programu. W przypadku błędu, wywołanie systemowe zwraca
bieżący punkt zakończenia. Funkcja opakowująca z glibc czyni pewne starania (tj. sprawdza, czy nowy punkt
zakończenia wynosi mniej niż addr), aby udostępnić opisane wyżej zwracane wartości 0 i -1.
W Linuksie, sbrk() zaimplementowano jako funkcję biblioteczną korzystającą z wywołania systemowego brk(),
która dokonuje pewnego wewnętrznego księgowania, dzięki czemu może zwrócić wartość starego punktu
zakończenia programu.
ZOBACZ TAKŻE
execve(2), getrlimit(2), end(3), malloc(3)
TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys <pborys@dione.ids.pl>,
Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl> i Michał Kułach <michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ
ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-
list@lists.sourceforge.net.
Linux man-pages 6.9.1 2 maja 2024 r. brk(2)