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