Provided by: manpages-pl-dev_4.27.0-1_all bug

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)