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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.