Provided by: manpages-pl-dev_4.23.1-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

       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.8                              2 maja 2024 r.                                           brk(2)