flockfile, ftrylockfile, funlockfile - Verrouiller un flux FILE pour stdio
Bibliothèque C standard (
libc,
-lc)
#include <stdio.h>
void flockfile(FILE *filehandle);
int ftrylockfile(FILE *filehandle);
void funlockfile(FILE *filehandle);
Pour toutes les fonctions ci-dessus :
/* Depuis la glibc 2.24 : */ _POSIX_C_SOURCE >= 199309L
|| /* glibc <= 2.23 : */ _POSIX_C_SOURCE
|| /* glibc <= 2.19 : */ _BSD_SOURCE || _SVID_SOURCE
Les fonctions stdio peuvent être utilisées dans un contexte
multithread. Ceci est réalisé en affectant à chaque objet
de type
FILE un « compteur de
verrouillage » et (si le « compteur de
verrouillage » est non nul) un thread propriétaire. Lors
de chaque appel à la bibliothèque, ces fonctions attendent
jusqu'à ce que l'objet
FILE ne soit plus verrouillé par
un thread différent, puis elles le verrouillent, réalisent les
entrées/sorties demandées, et libèrent l'objet.
(Remarque : ce verrouillage n'a rien à voir avec le verrouillage
de fichier réalisé par des fonctions comme
flock(2) et
lockf(3).)
Tout ceci est invisible au programmeur en C, mais il existe deux raisons de
souhaiter un contrôle plus fin. D'une part, un thread peut
réaliser une série d'entrées/sorties
interdépendantes, ces opérations ne devant pas être
interrompues par les entrées/sorties d'autres threads. D'autre part, on
peut désirer supprimer la surcharge induite par ce verrouillage afin
d'obtenir de meilleures performances.
À cette fin, un thread peut verrouiller explicitement un objet de type
FILE, puis réaliser sa série d'entrées/sorties, et
enfin, relâcher le verrou. Cela empêche les autres threads
d'intervenir sur le flux. Si la motivation du verrouillage est la recherche de
meilleures performances, on peut réaliser l'entrée/sortie
à l'aide des versions non bloquantes des fonctions stdio : avec
getc_unlocked(3) et
putc_unlocked(3) au lieu de
getc(3)
et
putc(3).
La fonction
flockfile() attend jusqu'à ce que
*filehandle
ne soit plus verrouillé par un autre thread, puis affecte
*filehandle au thread actuel, et incrémente le
« compteur de verrouillage ».
La fonction
funlockfile() décrémente le
« compteur de verrouillage ».
La fonction
ftrylockfile() est une version non bloquante de
flockfile(). Elle ne fait rien lorsqu'un autre thread est
propriétaire de
*filehandle, sinon, elle se l'approprie et
incrémente le « compteur de verrouillage ».
La fonction
ftrylockfile() renvoie zéro en cas de succès
(le verrou a été obtenu), et une valeur non nulle en cas
d'échec.
Aucun.
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface |
Attribut |
Valeur |
flockfile(), ftrylockfile(), funlockfile() |
Sécurité des threads |
MT-Safe |
POSIX.1-2001, POSIX.1-2008.
Ces fonctions sont disponibles lorsque
_POSIX_THREAD_SAFE_FUNCTIONS est
défini.
unlocked_stdio(3)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]> et
Frédéric Hantrais <
[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter
à la
GNU
General Public License version 3 concernant les conditions de copie
et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
[email protected]