Le verrouillage des fichiers permet de régler les problèmes d'accès concurrents à une ressource critique. Le partage d'un fichier entre plusieurs processus peut en effet entraîner une incohérence du fonctionnement. La solution consiste à verrouiller l'accès au fichier lorsqu'un processus désire y accéder de manière à bloquer les autres processus et à libérer l'accès au fichier dès que possible.
Il existe différents types de verrous :
Par défaut un verrou est consultatif et devient impératif après modification du bit sgid.
[linewidth=1pt,fillstyle=solid,shadow=true](-0.5,0)(16,-20)
Exemple de verrou externe :
#include <sys/types.h> <sys/stat.h> #include <fcntl.h> <stdio.h> void main(int argc, char **argv) { char * verrou="my_verrou"; int fd; close(fd); if (fork()) { if(fd=open(verrou, O_CREAT | O_EXCL, 0)) { printf("Pere : fd=%d\n",fd); } else printf("Pere : fd=%d\n",fd); sleep(10); close(fd); wait(0); } else { if(fd=open(verrou, O_CREAT | O_EXCL, 0)) { printf("Fils : fd=%d\n",fd); } else printf("Fils : fd=%d\n",fd); sleep(10); close(fd); } }