Provided by: manpages-pl-dev_4.21.0-2_all bug

NAZWA

       flockfile, ftrylockfile, funlockfile - blokowanie strumienia FILE dla stdio

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <stdio.h>

       void flockfile(FILE *filehandle);
       int ftrylockfile(FILE *filehandle);
       void funlockfile(FILE *filehandle);

   Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):

       Wszystkie funkcje powyżej:
           /* Since glibc 2.24: */ _POSIX_C_SOURCE >= 199309L
               || /* glibc <= 2.23: */ _POSIX_C_SOURCE
               || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

OPIS

       Powyższe  funkcje  stdio  są  przystosowane  do pracy wielowątkowej. Uzyskuje się to przez
       przypisanie każdemu z obiektów FILE licznika blokad oraz  (jeśli  wartość   licznika  jest
       niezerowa)  wątku  będącego jego właścicielem. Przy każdym wywołaniu funkcji bibliotecznej
       funkcje te czekają, aż obiekt FILE nie będzie już blokowany przez inny wątek, a  następnie
       go blokują, wykonują żądane operacje wejścia/wyjścia i odblokowują obiekt ponownie.

       (Uwaga:  blokowanie  to  nie  ma  nic  wspólnego  z blokowaniem plików za pomocą funkcji w
       rodzaju flock(2) i lockf(3)).

       Wszystko to dzieje się w sposób niewidoczny dla programisty C, jednak mogą pojawić się dwa
       powody  wymagające  bardziej  szczegółowej  kontroli.  Z  jednej  strony  szereg  operacji
       wejścia/wyjścia wykonywanych w jednym wątku może stanowić całość, która  nie  może  zostać
       przerwana  przez  operację wejścia/wyjścia innego wątku. Z drugiej zaś strony może istnieć
       potrzeba uniknięcia narzutu wywołanego przez pojedyncze blokady w celu uzyskania  większej
       wydajności.

       W  takich  sytuacjach  wątek  może  jawnie zablokować obiekt FILE, wykonać szereg operacji
       wejścia/wyjścia  i  odblokować  go.  Uniemożliwia  to  innym   wątkom   przeszkadzanie   w
       międzyczasie.  Jeśli  powodem  założenia  blokady  ma być osiągnięcie większej wydajności,
       wykonuje się operacje wejścia/wyjścia  za  pomocą  nieblokujących  wersji  funkcji  stdio:
       getc_unlocked(3) oraz putc_unlocked(3) zamiast getc(3) i putc(3).

       Funkcja  flockfile()  czeka  aż  *filehandle  nie  będzie  zablokowany przez inny wątek, a
       następnie czyni bieżący wątek właścicielem *filehandle i zwiększa o jeden licznik blokad.

       Funkcja funlockfile() zmniejsza licznik blokad o jeden.

       Funkcja ftrylockfile() jest nieblokującą wersją flockfile(). Nie robi nic, gdy inny  wątek
       jest  właścicielem  *filehandle,  a  w  przeciwnym przypadku przejmuje własność i zwiększa
       licznik blokad o jeden.

WARTOŚĆ ZWRACANA

       Funkcja ftrylockfile() zwraca zero w  przypadku  sukcesu  (blokada  została  założona),  a
       wartość niezerową w razie niepowodzenia.

BŁĘDY

       Brak.

ATRYBUTY

       Informacje   o   pojęciach   używanych   w  tym  rozdziale  można  znaleźć  w  podręczniku
       attributes(7).

       ┌──────────────────────────────────────────────────────┬────────────────────────┬─────────┐
       │InterfejsAtrybutWartość │
       ├──────────────────────────────────────────────────────┼────────────────────────┼─────────┤
       │flockfile(), ftrylockfile(), funlockfile()            │ Bezpieczeństwo wątkowe │ MT-Safe │
       └──────────────────────────────────────────────────────┴────────────────────────┴─────────┘

STANDARDY

       POSIX.1-2001, POSIX.1-2008.

       Funkcje te są dostępne, gdy zdefiniowane jest _POSIX_THREAD_SAFE_FUNCTIONS.

ZOBACZ TAKŻE

       unlocked_stdio(3)

TŁUMACZENIE

       Autorami polskiego tłumaczenia niniejszej strony podręcznika  są:  Andrzej  Krzysztofowicz
       <ankry@green.mf.pg.gda.pl> i Robert Luberda <robert@debian.org>

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