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¶
flock(1),
close(2),
dup(2),
execve(2),
fcntl(2),
fork(2),
open(2),
lockf(3)
Documentation/filesystems/locks.txt dans les sources du noyau Linux (
Documentation/locks.txt pour les anciens noyaux)
COLOPHON¶
Cette page fait partie de la publication 3.65 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> ».