Man page - flock(2)

Packages contains this manual

Available languages:

en fr pl ja ru ro de

Manual

flock

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
VERSIONS
Détails CIFS
STANDARDS
HISTORIQUE
Détails NFS
NOTES
VOIR AUSSI
TRADUCTION

NOM

flock - Placer ou enlever un verrou partagé sur un fichier ouvert

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <sys/file.h>

int flock(int fd , int op );

DESCRIPTION

Placer ou enlever un verrou partagĂ© sur un fichier ouvert dont le descripteur est fd . Le paramĂštre op est l’un des suivants :

LOCK_SH

Verrouillage partagĂ©. Plusieurs processus peuvent disposer d’un verrouillage partagĂ© simultanĂ©ment sur un mĂȘme fichier Ă  un moment donnĂ©.

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 qu’une requĂȘte soit non-bloquante, il faut inclure LOCK_NB (par un OU binaire « | » ) avec n’importe quelle opĂ©ration ci-dessus.

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 descripteur de fichier ouvert (consultez open (2)). 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Ă© en utilisant un des ces descripteurs de fichier. De plus, un verrou est relĂąchĂ© par une opĂ©ration explicite LOCK_UN sur l’un quelconque de ces descripteurs de fichier dupliquĂ©s ou lorsqu’ils ont tous Ă©tĂ© fermĂ©s.

Si un processus utilise open (2) (ou Ă©quivalent) pour avoir plus d’un descripteur de fichier pour un mĂȘme fichier, ces descripteurs de fichier 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 de fichier.

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Ă©s Ă  la fin 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 est dĂ©finie pour prĂ©ciser l’erreur.

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

op n’est pas acceptable.

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Ă©.

VERSIONS

Depuis Linux 2.0, flock () est implĂ©mentĂ© comme un appel systĂšme Ă  part entiĂšre plutĂŽt que d’ĂȘtre Ă©mulĂ© par une routine de la bibliothĂšque GNU C invoquant fcntl (2). Avec cette implĂ©mentation, 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 d’interblocage (deadlock) (remarquez, cependant, que sur certains BSD modernes, les verrouillages flock () et fcntl (2) interagissent entre eux).

Détails CIFS

Jusqu’à Linux 5.4, flock () n’est pas propagĂ© par SMB. Un fichier ayant de tels verrous n’apparaitra pas verrouillĂ© pour les clients distants.

Depuis Linux 5.5, flock (), les verrous sont Ă©mulĂ©s 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 partagé : n’importe quelle E/S sur un fichier verrouillĂ© Ă©chouera toujours avec l’erreur EACCES si elle vient d’un autre descripteur de fichier. Cette diffĂ©rence vient de la conception mĂȘme des verrous dans le protocole SMB, qui fournit une sĂ©mantique de verrouillage exclusif.

La sémantique 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 supplémentaires.

STANDARDS

BSD.

HISTORIQUE

4.4BSD (l’appel systĂšme flock () est apparu dans 4.2BSD). Une version de flock (), parfois implĂ©mentĂ©e Ă  partir de fcntl (2), est apparue sur la plupart des systĂšmes UNIX.

Détails NFS

Jusqu’à Linux 2.6.11, flock () ne verrouille pas les fichiers Ă  travers NFS (Ă  savoir que le but des verrous a Ă©tĂ© limitĂ© au systĂšme local). Utilisez plutĂŽt fcntl (2) pour verrouiller une plage d’octets, qui fonctionne avec NFS si la version de Linux est suffisamment rĂ©cente et si le serveur accepte les verrouillages.

Depuis Linux 2.6.12, les clients NFS prennent en charge les verrouillages flock () en les Ă©mulant 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 ĂȘtre ouvert en Ă©criture.

Depuis Linux 2.6.37, le noyau gĂšre un mode de compatibilitĂ© qui permet aux verrouillages flock () (et aux verrous d’une plage d’octets fcntl (2)) d’ĂȘtre traitĂ©s en local ; voir le point sur l’option local_lock dans nfs (5).

NOTES

flock () place uniquement des verrous partagĂ©s : 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 () sera différente de 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Ă©. (Cela est le comportement BSD d’origine, et est partagĂ© par de nombreuses implĂ©mentations.)

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)

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@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Philippe MENGUAL <jpmengual@debian.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@lists.debian.org .