flock(2) System Calls Manual flock(2) NOM flock - Placer ou enlever un verrou partage sur un fichier ouvert BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int flock(int fd, int op); DESCRIPTION Placer ou enlever un verrou partage sur un fichier ouvert dont le descripteur est fd. Le parametre op est l'un des suivants : LOCK_SH Verrouillage partage. Plusieurs processus peuvent disposer d'un verrouillage partage simultanement sur un meme fichier a un moment donne. 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 qu'une requete soit non-bloquante, il faut inclure LOCK_NB (par un OU binaire << | >> ) avec n'importe quelle operation ci-dessus. Un meme fichier ne peut pas avoir simultanement des verrous partages et exclusifs. Les verrous crees avec flock() sont associes a un descripteur de fichier ouvert (consultez open(2)). 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 en utilisant un des ces descripteurs de fichier. De plus, un verrou est relache par une operation explicite LOCK_UN sur l'un quelconque de ces descripteurs de fichier dupliques ou lorsqu'ils ont tous ete fermes. Si un processus utilise open(2) (ou equivalent) pour avoir plus d'un descripteur de fichier pour un meme fichier, ces descripteurs de fichier 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 de fichier. 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 conserves a la fin 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 RENVOYEE En cas de succes, zero est renvoye. En cas d'erreur, -1 est renvoye et errno est definie pour preciser l'erreur. 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 op n'est pas acceptable. 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. VERSIONS Depuis Linux 2.0, flock() est implemente comme un appel systeme a part entiere plutot que d'etre emule par une routine de la bibliotheque GNU C invoquant fcntl(2). Avec cette implementation, il n'y a pas d'interaction entre les verrous places par flock() et fcntl(2), et flock() ne detecte pas les cas d'interblocage (deadlock) (remarquez, cependant, que sur certains BSD modernes, les verrouillages flock() et fcntl(2) interagissent entre eux). Details CIFS Jusqu'a Linux 5.4, flock() n'est pas propage par SMB. Un fichier ayant de tels verrous n'apparaitra pas verrouille pour les clients distants. Depuis Linux 5.5, flock(), les verrous sont emules avec ceux par plage d'octets SMB sur tout le fichier. Comme pour NFS, cela veut dire que les verrous fcntl(2) et flock() interagissent entre eux. Un autre effet de bord important est que les verrous ne sont plus partage : n'importe quelle E/S sur un fichier verrouille echouera toujours avec l'erreur EACCES si elle vient d'un autre descripteur de fichier. Cette difference vient de la conception meme des verrous dans le protocole SMB, qui fournit une semantique de verrouillage exclusif. La semantique des verrous distants et exclusifs peut varier selon le protocole SMB, les options de montage et le type de serveur. Voir mount.cifs(8) pour des informations supplementaires. NORMES BSD. HISTORIQUE 4.4BSD (l'appel systeme flock() est apparu dans 4.2BSD). Une version de flock(), parfois implementee a partir de fcntl(2), est apparue sur la plupart des systemes UNIX. Details NFS Jusqu'a Linux 2.6.11, flock() ne verrouille pas les fichiers a travers NFS (a savoir que le but des verrous a ete limite au systeme local). Utilisez plutot fcntl(2) pour verrouiller une plage d'octets, qui fonctionne avec NFS si la version de Linux est suffisamment recente et si le serveur accepte les verrouillages. Depuis Linux 2.6.12, les clients NFS prennent en charge les verrouillages flock() en les emulant sous la forme de verrous de plages d'octets fcntl(2) sur tout le fichier. Cela signifie que les verrouillages fcntl(2) et flock() interagissent entre eux avec NFS. Cela veut dire que pour poser un verrouillage exclusif, le fichier doit etre ouvert en ecriture. Depuis Linux 2.6.37, le noyau gere un mode de compatibilite qui permet aux verrouillages flock() (et aux verrous d'une plage d'octets fcntl(2)) d'etre traites en local ; voir le point sur l'option local_lock dans nfs(5). NOTES flock() place uniquement des verrous partages : 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() sera differente de 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. (Cela est le comportement BSD d'origine, et est partage par de nombreuses implementations.) Release of a lock when a file descriptor is closed is not sequenced after all observable effects of close(2). For example, if one process writes a file while holding an exclusive lock, then closes that file, and another process blocks placing a shared lock on that file to wait until it is closed, it may observe that a subsequent execve(2) of that file fails with ETXTBSY, and umount(2) of its underlying filesystem fails with EBUSY, as if the file were still open in the first process. VOIR AUSSI flock(1), close(2), dup(2), execve(2), fcntl(2), fork(2), open(2), lockf(3), lslocks(8) Documentation/filesystems/locks.rst in the Linux kernel source tree TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.18 8 fevrier 2026 flock(2)