Provided by: manpages-fr-dev_3.32d0.2p4-1_all bug

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é.

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

       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)

       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.32 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       être       trouvées      à      l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis 2010, cette traduction est maintenue à l'aide  de  l'outil  po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'équipe   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'é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> ».