La structure de verrou flock:
struct flock {
short l_type; /* F_RDLCK, F_WRLCK,F_UNLCK */
short l_whence; /* SEEK_SET,SEEK_CUR,SEEK_END */
off_t l_start; /* position relative a l_whence */
off_t l_len; /* longueur de l'intervalle */
pid_t l_pid; /* PID du processus propriétaire */
};
le champ l_type
Les manipulations de verrous se font avec la primitive fcntl, c'est-à-dire par le biais d'un descripteur. Pour poser un verrou partagé, ce descripteur doit pointer sur une ouverture en lecture. De même, il faut un descripteur sur une ouverture en écriture pour un verrou de type exclusif
.
Pour décrire la portée du verrou que l'on veut poser, on utilise la même syntaxe que pour la primitive lseek, le début de l'intervalle est whence+l_start:
l_whence = SEEK_SET whence = 0
l_whence = SEEK_CUR whence = offset courrant
l_whence = SEEK_END whence = taille du fichier.
La longueur du verrou est définie par le champ l_len. Si cette
valeur est nulle, le verrou va jusqu'à la fin du fichier (même si le
processus change cette fin).
Remarque: il est possible de poser un verrou dont la portée est supérieure à la taille du fichier.
Le champ l_pid contient le pid du processus propriétaire du verrou, ce champ est rempli par fcntl dans le cas d'un appel consultatif (F_GETLK).