FLOCK(2) Manuel du programmeur Linux FLOCK(2)
flock - Placer ou enlever un verrou coopratif sur un fichier ouvert
#include <sys/file.h>
int flock(int fd, int operation);
Place ou enlve un verrou consultatif sur un fichier ouvert dont le
descripteur est fd. Le paramtre operation est l'un des suivants :
LOCK_SH Verrouillage partag. Plusieurs processus peuvent disposer
d'un verrouillage partag simultanment sur un mme fichier.
LOCK_EX Verrouillage exclusif. Un seul processus dispose d'un ver-
rouillage exclusif sur un fichier, un moment donn.
LOCK_UN Dverrouillage d'un verrou tenu par le processus.
Un appel flock() peut bloquer si un verrou incompatible est tenu par un
autre processus. Pour que la requte soit non-bloquante, il faut inclure
LOCK_NB (par un OU binaire | ) avec la constante prcisant l'opration.
Un mme fichier ne peut pas avoir simultanment des verrous partags et
exclusifs.
Les verrous crs avec flock() sont associs un fichier, ou plus prcis-
ment une entre de la table des fichiers ouverts. Ainsi, les descrip-
teurs de fichier dupliqus (par exemple avec fork(2) ou dup(2)) rfrent
au mme verrou, et celui-ci peut tre relch ou modifi travers n'importe
lequel des descripteurs. De plus, un verrou est relch par une opration
explicite LOCK_UN sur l'un quelconque des descripteurs, ou lorsqu'ils
ont tous t ferms.
Si un processus utilise open(2) (ou quivalent) plusieurs fois pour
obtenir plusieurs descripteurs sur le mme fichier, ces descripteurs
sont traits indpendamment par flock(). Une tentative de verrouiller le
fichier avec l'un de ces descripteurs peut tre refuse si le processus
appelant a dj plac un verrou en utilisant un autre descripteur.
Un processus ne peut avoir qu'un seul type de verrou (partag ou
exclusif) sur un fichier. En consquence un appel flock() sur un fichier
dj verrouill modifiera le type de verrouillage.
Les verrous crs par flock() sont conserv au travers d'un execve(2).
Un verrou partag ou exclusif peut tre plac sur un fichier quel que soit
le mode d'ouverture du fichier.
En cas de russite, zro est renvoy, sinon -1 est renvoy et errno con-
tient le code d'erreur.
EBADF fd n'est pas un descripteur de fichier ouvert.
EINTR Durant l'attente pour acqurir le verrou, l'appel a t interrompu
par un signal captur par un gestionnaire ; voir signal(7).
EINVAL operation est invalide.
ENOLCK Le noyau n'a pas assez de mmoire pour les allocations de verrou.
EWOULDBLOCK
Le fichier est verrouill et l'attribut LOCK_NB a t prcis.
BSD 4.4 (l'appel systme flock() est apparu dans BSD 4.2). Une version
de flock() parfois implment partir de fcntl(2), est apparue sur la
plupart des systmes Unix.
flock() ne verrouille par les fichiers travers NFS. Utilisez fcntl(2)
la place : il fonctionne avec NFS si la version de Linux est suffisam-
ment rcente et si le serveur accepte les verrouillages.
Depuis le noyau 2.0, flock() est implment par un appel systme plutt que
d'tre mul par une routine de la bibliothque C invoquant fcntl(2). Ceci
correspond la vritable smantique BSD : il n'y a pas d'interaction
entre les verrous placs par flock() et fcntl(2), et flock() ne dtecte
pas les cas de blocage (deadlock).
flock() place uniquement des verrous coopratifs : suivant les permis-
sions du fichier un processus peut ignorer l'utilisation de flock() et
faire des entres-sorties sur le fichier.
Les smantiques des verrous placs par flock() et fcntl(2) sont
diffrentes en ce qui concerne fork(2) et dup(2). Sur les systmes qui
implmentent flock() en utilisant fcntl(2), la smantique de flock() ne
sera pas celle dcrite ici.
La conversion d'un verrou (de partag exclusif et vice versa) n'est pas
toujours atomique : tout d'abord le verrou existant est supprim, puis
un nouveau verrou est tabli. Entre ces deux tapes, un verrou demand par
un autre processus peut tre accord, ce qui peut causer soit un blocage
de la conversion, soit son chec, si LOCK_NB tait indiqu. (Ceci est le
comportement BSD d'origine, et est partag par de nombreuses implmenta-
tions.)
close(2), dup(2), execve(2), fcntl(2), fork(2), open(2), lockf(3)
Voir aussi Documentation/locks.txt et Documentation/mandatory.txt dans
les sources du noyau.
Cette page fait partie de la publication 3.07 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent tre trouves l'adresse http://www.ker-
nel.org/doc/man-pages/.
Cette page de manuel a t traduite et mise jour par Christophe Blaess
<http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par Alain
Portal <aportal AT univ-montp2 DOT fr> jusqu'en 2006, et mise disposi-
tion sur http://manpagesfr.free.fr/.
Les mises jour et corrections de la version prsente dans Debian sont
directement gres par Julien Cristau <jcristau [AT] debian.org> et l'quipe
francophone de traduction de Debian.
Veuillez signaler toute erreur de traduction en crivant
<debian-l10n-french [AT] lists.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir accs la version anglaise de ce document en
utilisant la commande man -L C <section> <page_de_man> .
Linux 24 avril 2002 FLOCK(2)