flockfile(3)

NAZWA
flockfile, ftrylockfile, funlockfile - blokowanie strumienia FILE dla stdio

BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)

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:
    /* Since glibc 2.24: */ _POSIX_C_SOURCE >= 199309L
        || /* glibc <= 2.23: */ _POSIX_C_SOURCE
        || /* 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).
Interfejs | Atrybut | Wartość
flockfile(), ftrylockfile(), funlockfile() | Bezpieczeństwo wątkowe | MT-Safe

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

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

ZOBACZ TAKŻE
unlocked_stdio(3)

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.