Provided by: manpages-pl-dev_4.27.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
Tłumaczenie niniejszej strony podręcznika: 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)