FLOCK
Section: Manuel du programmeur Linux (2) Updated: 18 juillet 2003 Index
NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
CONFORMITÉ
NOTES
VOIR AUSSI
TRADUCTION
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 fichiers dupliqués (par exemple avec
fork(2) ou dup(2))
se 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âche par une opération explicite
LOCK_UN
sur l'un quelconque des descripteurs, ou lorsqu'ils ont tous été
fermés.
Un processus ne peut avoir qu'une 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é lors d'un appel
execve().
Un verrou partagé ou exclusif peut être placé sur un fichier quelque soit le
mode d'ouverture du fichier.
VALEUR RENVOYÉE
flock
renvoie 0 s'il réussit, ou -1 en cas d'échec, auquel cas
errno
contient le code d'erreur.
ERREURS
- EWOULDBLOCK
-
Le fichier est verrouillé et l'attribut
LOCK_NB
a été précisé.
- 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.
- EINVAL
-
operation
est invalide.
- ENOLCK
-
Le noyau n'a pas assez de mémoire pour les allocations de verrou.
CONFORMITÉ
4.4BSD (l'appel système
flock(2)
est apparu pour la première fois dans 4.2BSD).
Une version de
flock(2)
parfois implémenté à partir de
fcntl(2),
est apparue sur la plupart des Unix.
NOTES
flock(2)
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(2)
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
flock(2)
et
fcntl(2),
et
flock(2)
ne détecte pas les cas de blocage (deadlock).
flock(2)
place uniquement des verrous coopératifs : suivant les permissions du fichier
un processus peut ignorer l'utilisation de
flock(2)
et faire des entrées/sorties sur le fichier.
flock(2)
et
fcntl(2)
ont des sémantiques différents par rapport aux processus "forkés" et
dup(2).
VOIR AUSSI
open(2),
close(2),
dup(2),
execve(2),
fcntl(2),
fork(2),
lockf(3)
On peut également se reporter aux fichiers
locks.txt
et
mandatory.txt
dans le répertoire
/usr/src/linux/Documentation.
TRADUCTION
Christophe Blaess, 1996-2003.
|