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.
Locks created by flock() are associated with an open file description (see open(2)). This means that duplicate file descriptors (created by, for example, fork(2) or dup(2)) refer to the same lock, and this lock may be modified or released using any of these file descriptors. Furthermore, the lock is released either by an explicit LOCK_UN operation on any of these duplicate file descriptors, or when all such file descriptors have been closed.
If a process uses open(2) (or similar) to obtain more than one file descriptor for the same file, these file descriptors are treated independently by flock(). An attempt to lock the file using one of these file descriptors may be denied by a lock that the calling process has already placed via another file descriptor.
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
En cas de succès, zéro est renvoyé. En cas d’erreur, -1 est renvoyé et errno reçoit une valeur adéquate.
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é.
CONFORMITÉ
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
Since kernel 2.0, flock() is implemented as a system call in its own right rather than being emulated in the GNU C library as a call to fcntl(2). With this implementation, there is no interaction between the types of lock placed by flock() and fcntl(2), and flock() does not detect deadlock. (Note, however, that on some systems, such as the modern BSDs, flock() and fcntl(2) locks do interact with one another.)
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.)
NFS
details
In Linux kernels up to 2.6.11, flock() does not lock
files over NFS (i.e., the scope of locks was limited to the
local system). Instead, one could use fcntl(2)
byte-range locking, which does work over NFS, given a
sufficiently recent version of Linux and a server which
supports locking.
Since Linux 2.6.12, NFS clients support flock() locks by emulating them as fcntl(2) byte-range locks on the entire file. This means that fcntl(2) and flock() locks do interact with one another over NFS. It also means that in order to place an exclusive lock, the file must be opened for writing.
Since Linux 2.6.37, the kernel supports a compatibility mode that allows flock() locks (and also fcntl(2) byte region locks) to be treated as local; see the discussion of the local_lock option in nfs(5).
VOIR AUSSI
flock(1), close(2), dup(2), execve(2), fcntl(2), fork(2), open(2), lockf(3), lslocks(8)
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 5.07 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page, peuvent être trouvées à l’adresse https://www.kernel.org/doc/man-pages/.
TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin [AT] laposte.net>, Thierry Vignaud <tvignaud [AT] mandriva.com>, François Micaux, Alain Portal <aportal [AT] univ-montp2.fr>, Jean-Philippe Guérard <fevrier [AT] tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon [AT] wanadoo.fr>, Julien Cristau <jcristau [AT] debian.org>, Thomas Huriaux <thomas.huriaux [AT] gmail.com>, Nicolas François <nicolas.francois [AT] centraliens.net>, Florentin Duneau <fduneau [AT] gmail.com>, Simon Paillard <simon.paillard [AT] resel.fr>, Denis Barbier <barbier [AT] debian.org> et David Prévot <david [AT] tilapin.org>
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 à <debian-l10n-french [AT] lists.org>.