Provided by: manpages-pl-dev_20060617-1_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);

OPIS

       Powyższe  funkcje  stdio  są  przystosowane  do  pracy   wielowątkowej.
       Uzyskuje  się  to  poprzez przypisanie każdemu z obiektów FILE licznika
       blokad oraz (dla niezerowej  wartości  licznika)  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 we/wy 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 we/wy wykonywanych w jednym wątku może
       stanowić całość, która nie może zostać przerwana przez  operację  we/wy
       innego  wątku.  Z  drugiej  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 we/wy 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 we/wy za  pomocą
       nieblokujących  wersji funkcji stdio: getc_unlocked() i putc_unlocked()
       zamiast getc() i putc().

       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() zminiejsza licznik blokad o jeden.

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

WARTOŚĆ ZWRACANA

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

BŁĘDY

       Brak.

DOSTĘPNOŚĆ

       Funkcje      te      są     dostępne,     gdy     zdefiniowane     jest
       _POSIX_THREAD_SAFE_FUNCTIONS.  Znajdują się one  w  libc  począwszy  od
       libc 5.1.1 oraz w glibc począwszy od glibc 2.0.

ZGODNE Z

       POSIX.1

ZOBACZ TAKŻE

       unlocked_stdio(3)

                                  2001-10-18                       LOCKFILE(3)