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