NOM¶
flock - Placer ou enlever un verrou coopératif sur un fichier ouvert
SYNOPSIS¶
#include <sys/file.h>
int flock(int fd, int operation);
DESCRIPTION¶
Place ou enlève un verrou consultatif sur un fichier ouvert dont le
descripteur est
fd. Le paramètre
operation est l'un des
suivants :
- LOCK_SH
- Verrouillage partagé. Plusieurs processus peuvent
disposer d'un verrouillage partagé simultanément sur un
même fichier.
- LOCK_EX
- Verrouillage exclusif. Un seul processus dispose d'un
verrouillage exclusif sur un fichier, à un moment donné.
- LOCK_UN
- Déverrouillage 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 requête soit non‐bloquante, il faut
inclure
LOCK_NB (par un
OU binaire « | » )
avec la constante précisant l'opération.
Un même fichier ne peut pas avoir simultanément des verrous
partagés et exclusifs.
Les verrous créés avec
flock() sont associés à un
fichier, ou plus précisément une entrée de la table des
fichiers ouverts. Ainsi, les descripteurs de fichier dupliqués (par
exemple avec
fork(2) ou
dup(2)) réfèrent au même
verrou, et celui‐ci peut être relâché ou modifié
à travers n'importe lequel des descripteurs. De plus, un verrou est
relâché par une opération explicite
LOCK_UN sur l'un
quelconque des descripteurs, ou lorsqu'ils ont tous été fermés.
Si un processus utilise
open(2) (ou équivalent) plusieurs fois pour
obtenir plusieurs descripteurs sur le même fichier, ces descripteurs sont
traités indépendamment par
flock(). Une tentative de
verrouiller le fichier avec l'un de ces descripteurs peut être
refusée si le processus appelant a déjà 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 conséquence un appel
flock() sur un fichier
déjà verrouillé modifiera le type de verrouillage.
Les verrous créés 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.
VALEUR RENVOYÉE¶
S'il réussit, cet appel système renvoie 0. S'il échoue, il
renvoie -1 et remplit
errno en conséquence.
ERREURS¶
- EBADF
- fd n'est pas un descripteur de fichier ouvert.
- EINTR
- Durant l'attente pour acquérir le verrou, l'appel a
été interrompu par un signal capturé par un
gestionnaire ; consultez signal(7).
- EINVAL
- operation est invalide.
- ENOLCK
- Le noyau n'a pas assez de mémoire pour les allocations
de verrou.
- EWOULDBLOCK
- Le fichier est verrouillé et l'attribut LOCK_NB
a été précisé.
BSD 4.4 (l'appel système
flock() est apparu dans BSD 4.2).
Une version de
flock() parfois implémenté à partir de
fcntl(2), est apparue sur la plupart des systèmes UNIX.
NOTES¶
flock() ne verrouille par les fichiers à travers NFS. Utilisez
fcntl(2) à la place : il fonctionne avec NFS si la version de
Linux est suffisamment récente et si le serveur accepte les
verrouillages.
Depuis le noyau 2.0,
flock() est implémenté par un appel
système plutôt que d'être émulé par une routine de la
bibliothèque C invoquant
fcntl(2). Ceci correspond à la
véritable sémantique BSD : il n'y a pas d'interaction entre les
verrous placés par
flock() et
fcntl(2), et
flock()
ne détecte pas les cas de blocage (deadlock).
flock() place uniquement des verrous coopératifs : suivant les
permissions du fichier un processus peut ignorer l'utilisation de
flock() et faire des entrées-sorties sur le fichier.
Les sémantiques des verrous placés par
flock() et
fcntl(2) sont différentes en ce qui concerne
fork(2) et
dup(2). Sur les systèmes qui implémentent
flock() en
utilisant
fcntl(2), la sémantique de
flock() ne sera pas
celle décrite 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
implémentations.)
VOIR AUSSI¶
close(2),
dup(2),
execve(2),
fcntl(2),
fork(2),
open(2),
lockf(3)
Documentation/filesystem/locks.txt dans les sources du noyau Linux (
Documentation/locks.txt pour les anciens noyaux)
COLOPHON¶
Cette page fait partie de la publication 3.44 du projet
man-pages Linux.
Une description du projet et des instructions pour signaler des anomalies
peuvent être trouvées à l'adresse
<
http://www.kernel.org/doc/man-pages/>.
TRADUCTION¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Christophe Blaess <
http://www.blaess.fr/christophe/> (1996-2003), Alain
Portal <
http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et
l'équipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet
manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande «
man -L C
<section> <page_de_man> ».