Provided by: manpages-pl-dev_4.13-4_all bug

NAZWA

       flockfile, ftrylockfile, funlockfile - blokowanie strumienia FILE dla stdio

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:
           /* Od glibc 2.24: */ _POSIX_C_SOURCE >= 199309L
               || /* Wersje glibc <= 2.23: */ _POSIX_C_SOURCE
               || /* Wersje 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(), │ Bezpieczeństwo wątkowe │ MT-Safe │
       │funlockfile()                 │                        │         │
       └──────────────────────────────┴────────────────────────┴─────────┘

ZGODNE Z

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

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

ZOBACZ TAKŻE

       unlocked_stdio(3)

O STRONIE

       Angielska  wersja  tej  strony  pochodzi  z  wydania  5.10  projektu Linux man-pages. Opis
       projektu, informacje dotyczące zgłaszania błędów oraz  najnowszą  wersję  oryginału  można
       znaleźć pod adresem https://www.kernel.org/doc/man-pages/.

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

                                        9 czerwca 2020 r.                            FLOCKFILE(3)