lockf - Poser, examiner ou supprimer un verrou POSIX sur un fichier ouvert
Bibliothèque C standard (
libc,
-lc)
#include <unistd.h>
int lockf(int fd, int cmd, off_t len);
lockf() :
_XOPEN_SOURCE >= 500
|| /* glibc >= 2.19: */ _DEFAULT_SOURCE
|| /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
Apply, test, or remove a POSIX lock on a section of an open file. The file is
specified by
fd, a file descriptor open for writing, the action by
cmd, and the section consists of byte positions
pos..
pos+
len-1 if
len is positive, and
pos-
len..
pos-1 if
len is negative, where
pos is the current file position, and if
len is zero, the
section extends from the current file position to infinity, encompassing the
present and future end-of-file positions. In all cases, the section may extend
past current end-of-file.
On Linux,
lockf() is just an interface on top of
fcntl(2) locking.
Many other systems implement
lockf() in this way, but note that POSIX.1
leaves the relationship between
lockf() and
fcntl(2) locks
unspecified. A portable application should probably avoid mixing calls to
these interfaces.
Les opérations valides sont les suivantes :
- F_LOCK
- Poser un verrou exclusif sur la section indiquée du
fichier. Si (une partie de) la section est déjà
verrouillée, l'appel bloque jusqu'à la suppression du verrou
précédent. Si la section recouvre un verrou existant (du
même processus), les deux sont regroupés. Les verrouillages
sont libérés lorsque le processus ferme un descripteur du
fichier. Un processus fils n'hérite pas du verrou.
- F_TLOCK
- Comme F_LOCK mais l'appel n'est pas bloquant, il
renvoie une erreur si le fichier est déjà
verrouillé.
- F_ULOCK
- Déverrouiller la section indiquée du fichier.
Ceci peut conduire une section verrouillée à être
découpée en deux sections.
- F_TEST
- Vérifier s'il y a un verrou : l'appel renvoie
0 si la section indiquée est libre ou verrouillée par le
processus appelant, et -1 avec EAGAIN ( EACCES sur d'autres
systèmes) dans errno si un autre processus possède le
verrou.
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.
-
EACCES ou EAGAIN
- Le fichier est verrouillé et F_TLOCK ou
F_TEST étaient indiqués, ou encore l'opération
est impossible car le fichier est projetée dans la mémoire
d'un autre processus.
- EBADF
-
fd n'est pas un descripteur de fichier ouvert, ou
cmd vaut F_LOCK ou F_TLOCK et fd n'est pas un
descripteur de fichier en écriture.
- EDEADLK
- L'opération F_LOCK demandée
amènerait à un cas d’interblocage.
- 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
- Une opération invalide a été
réclamée sur cmd.
- ENOLCK
- La table des verrous est pleine.
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface |
Attribut |
Valeur |
lockf() |
Sécurité des threads |
MT-Safe |
POSIX.1-2001, POSIX.1-2008, SVr4.
fcntl(2),
flock(2)
locks.txt et
mandatory-locking.txt dans le répertoire
Documentation/filesystems des sources du noyau Linux. (Sur d'anciens
noyaux, ces fichiers se trouvent dans le répertoire
Documentation et
mandatory-locking.txt est appelé
mandatory.txt.)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]> et David Prévot <
[email protected]>
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 à
[email protected]