oracular (2) sbrk.2.gz

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⟩.