Poser un verrou sur un fichier

Problème

Vous voulez signaler aux autres processus qu’un fichier est en cours de lecture ou d’écriture.

Solution

Posez un verrou avec lockf(), ou, dans le cas de la création d’un nouveau fichier, créez-le avec open() et le drapeau O_CREAT | O_EXCL ou, si votre compilateur respecte la norme C11, avec fopen() et l’attribut "x".

Discussion

La fonction lockf() permet de poser un verrou POSIX sur un fichier ouvert. Tout processus qui souhaite tester si le fichier est ainsi verrouillé peut utiliser cette même fonction pour le savoir.


int fd; 
if(-1 == (fd = open (filename, O_RDWR | O_CREAT, 0640))) 
  { 
    printf ("Impossible d'ouvrir '%s' en écriture\n", filename); 
    exit (EXIT_FAILURE); 
  } 
if (0 > lockf (fd, F_TLOCK, 0)) 
  { 
    printf ("Le fichier %s était déjà verrouillé\n", filename); 
  } 
else 
  { 
    printf ("Nous venons de verrouiller le fichier %s\n", filename); 
    lockf (fd, F_ULOCK, 0); 
    printf ("Nous venons de déverrouiller le fichier %s\n", filename); 
  } 
close (fd);
 

Le code ci-dessus verrouille le fichier s’il ne l’est pas déjà, et le déverrouille juste après. Nous pouvons également tester si le fichier est verrouillé sans pour autant le verrouiller nous-même. Cela s’effectue ainsi : lockf(fd, F_TEST, 0) renvoie 0 s’il n’y...

Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Lire un fichier au format DOS
Suivant
Créer des fichiers temporaires