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¶
Uwaga! To tłumaczenie może być nieaktualne!
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)
Powyższe tłumaczenie pochodzi z nieistniejącego już
Projektu Tłumaczenia Manuali i
może nie być
aktualne. W razie zauważenia różnic między
powyższym opisem a rzeczywistym zachowaniem opisywanego programu lub
funkcji, prosimy o zapoznanie się z oryginalną
(angielską) wersją strony podręcznika za pomocą
polecenia:
- man --locale=C 3 flockfile
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.