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 Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: 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.06 31 pazdziernika 2023 r. brk(2)