Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
NOM
flock - Placer ou enlever un verrou cooperatif sur un fichier ouvert
SYNOPSIS
#include <sys/file.h>
int flock(int fd, int operation);
DESCRIPTION
Place ou enleve un verrou consultatif sur un fichier ouvert dont le
descripteur est fd. Le parametre operation est l'un des suivants :
LOCK_SH Verrouillage partage. Plusieurs processus peuvent disposer
d'un verrouillage partage simultanement sur un meme
fichier.
LOCK_EX Verrouillage exclusif. Un seul processus dispose d'un
verrouillage exclusif sur un fichier, a un moment donne.
LOCK_UN Deverrouillage 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 requete soit non-bloquante, il faut
inclure LOCK_NB (par un OU binaire << | >> ) avec la constante
precisant l'operation.
Un meme fichier ne peut pas avoir simultanement des verrous partages et
exclusifs.
Les verrous crees avec flock() sont associes a un fichier, ou plus
precisement une entree de la table des fichiers ouverts. Ainsi, les
descripteurs de fichier dupliques (par exemple avec fork(2) ou dup(2))
referent au meme verrou, et celui-ci peut etre relache ou modifie a
travers n'importe lequel des descripteurs. De plus, un verrou est
relache par une operation explicite LOCK_UN sur l'un quelconque des
descripteurs, ou lorsqu'ils ont tous ete fermes.
Si un processus utilise open(2) (ou equivalent) plusieurs fois pour
obtenir plusieurs descripteurs sur le meme fichier, ces descripteurs
sont traites independamment par flock(). Une tentative de verrouiller
le fichier avec l'un de ces descripteurs peut etre refusee si le
processus appelant a deja place un verrou en utilisant un autre
descripteur.
Un processus ne peut avoir qu'un seul type de verrou (partage ou
exclusif) sur un fichier. En consequence un appel flock() sur un
fichier deja verrouille modifiera le type de verrouillage.
Les verrous crees par flock() sont conserve au travers d'un execve(2).
Un verrou partage ou exclusif peut etre place sur un fichier quel que
soit le mode d'ouverture du fichier.
VALEUR RENVOY'EE
S'il reussit, cet appel systeme renvoie 0. S'il echoue, il renvoie -1
et remplit errno en consequence.
ERREURS
EBADF fd n'est pas un descripteur de fichier ouvert.
EINTR Durant l'attente pour acquerir le verrou, l'appel a ete
interrompu par un signal capture par un gestionnaire ; consultez
signal(7).
EINVAL operation est invalide.
ENOLCK Le noyau n'a pas assez de memoire pour les allocations de
verrou.
EWOULDBLOCK
Le fichier est verrouille et l'attribut LOCK_NB a ete precise.
CONFORMIT'E
BSD 4.4 (l'appel systeme flock() est apparu dans BSD 4.2). Une version
de flock() parfois implemente a partir de fcntl(2), est apparue sur la
plupart des systemes Unix.
NOTES
flock() ne verrouille par les fichiers a travers NFS. Utilisez fcntl(2)
a la place : il fonctionne avec NFS si la version de Linux est
suffisamment recente et si le serveur accepte les verrouillages.
Depuis le noyau 2.0, flock() est implemente par un appel systeme plutot
que d'etre emule par une routine de la bibliotheque C invoquant
fcntl(2). Ceci correspond a la veritable semantique BSD : il n'y a pas
d'interaction entre les verrous places par flock() et fcntl(2), et
flock() ne detecte pas les cas de blocage (deadlock).
flock() place uniquement des verrous cooperatifs : suivant les
permissions du fichier un processus peut ignorer l'utilisation de
flock() et faire des entrees-sorties sur le fichier.
Les semantiques des verrous places par flock() et fcntl(2) sont
differentes en ce qui concerne fork(2) et dup(2). Sur les systemes qui
implementent flock() en utilisant fcntl(2), la semantique de flock() ne
sera pas celle decrite ici.
La conversion d'un verrou (de partage a exclusif et vice versa) n'est
pas toujours atomique : tout d'abord le verrou existant est supprime,
puis un nouveau verrou est etabli. Entre ces deux etapes, un verrou
demande par un autre processus peut etre accorde, ce qui peut causer
soit un blocage de la conversion, soit son echec, si LOCK_NB etait
indique. (Ceci est le comportement BSD d'origine, et est partage par de
nombreuses implementations.)
VOIR AUSSI
close(2), dup(2), execve(2), fcntl(2), fork(2), open(2), lockf(3)
Consultez aussi Documentation/filesystem/locks.txt dans les sources du
noyau (Documentation/locks.txt pour les anciens noyaux).
COLOPHON
Cette page fait partie de la publication 3.27 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Julien
Cristau et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.