brk(2) System Calls Manual brk(2) NAZWA brk, sbrk - zmienia wielkosc segmentu danych BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include 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() zmieniaja polozenie punktu zakonczenia programu, definiujacego koniec segmentu danych procesu (tzn. punkt zakonczenie programu jest pierwszym polozeniem po koncu niezainicjowanego segmentu danych). Zwiekszenie punktu zakonczenia programu w efekcie zwieksza przydzielona procesowi pamiec; zmniejszenie - cofa przydzielenie pamieci. brk() ustawia koniec segmentu danych na wartosc podana jako argument addr, o ile wartosc ta jest sensowna, system posiada dostateczna ilosc pamieci oraz nie zostanie przekroczona maksymalna wielkosc segmentu danych dla procesu (zobacz setrlimit(2)). sbrk() zwieksza przestrzen danych programu o wartosc increment bajtow. Wywolanie sbrk() z increment rownym 0 moze sluzyc do znalezienia aktualnej lokalizacji punktu zakonczenia programu. WARTOSC ZWRACANA Po pomyslnym zakonczeniu brk() zwraca zero. Po bledzie zwracane jest -1, a errno ustawiane jest na ENOMEM. Po pomyslnym zakonczeniu, sbrk() zwraca poprzedni punkt zakonczenia programu (jesli go zwiekszono, to wartosc ta wskazuje na poczatek nowo przydzielonej pamieci). W przypadku bledu zwracane jest (void *) -1 a errno nadawana jest wartosc ENOMEM. STANDARDY Brak. HISTORIA 4.3BSD; SUSv1, oznaczone jako LEGACY (przestarzale) w SUSv2, usuniete w POSIX.1-2001. UWAGI Nie zaleca sie uzywania brk() i sbrk(): przenosnym i wygodnym sposobem przydzielania pamieci jest pakiet malloc(3). Rozne systemy uzywaja roznych typow argumentu sbrk(). Powszechne sa: int, ssize_t, ptrdiff_t, intptr_t. Roznice biblioteki C/jadra Zwracana wartosc opisana powyzej dla brk() jest zachowaniem udostepnianym przez funkcje opakowujaca z glibc dla wywolania systemowego brk() Linuksa (w wiekszosci innych implementacji, zwracana wartosc brk() jest taka sama; takaz okreslono rowniez w SUSv2). Jednak rzeczywiste linuksowe wywolanie systemowe zwraca przy pomyslnym zakonczeniu nowy punkt zakonczenia programu. W przypadku bledu, wywolanie systemowe zwraca biezacy punkt zakonczenia. Funkcja opakowujaca z glibc czyni pewne starania (tj. sprawdza, czy nowy punkt zakonczenia wynosi mniej niz addr), aby udostepnic opisane wyzej zwracane wartosci 0 i -1. W Linuksie, sbrk() zaimplementowano jako funkcje biblioteczna korzystajaca z wywolania systemowego brk(), ktora dokonuje pewnego wewnetrznego ksiegowania, dzieki czemu moze zwrocic wartosc starego punktu zakonczenia programu. ZOBACZ TAKZE execve(2), getrlimit(2), end(3), malloc(3) TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: Przemek Borys , Andrzej Krzysztofowicz i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.18 8 lutego 2026 r. brk(2)