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