La pose d'un verrou sur un fichier se fait à l'aide de la fonction système fcntl().
Un exemple que j'ai là, sous la main :
struct flock verrou;
int fd;
int no_err;
/* création d'un verrou en lecture sur tout le fichier de données */
verrou.l_type = F_RDLCK;
verrou.l_start = 0;
verrou.l_len = 0;
verrou.l_whence = SEEK_SET;
verrou.l_pid = getpid();
/* ouverture du fichier de données */
fd = open ("data.txt", O_RDONLY);
/* pose du verrou */
fcntl (fd, F_SETLKW, &verrou);
/* affichage des données */
lit_et_affiche_donnees (fd);
/* deverouillage et fermeture */
verrou.l_type = F_UNLCK;
fcntl (fd, F_SETLKW, &verrou);
close (fd);
Réfère toi à la page man pour tous les détails et les options possibles (verrous en lecture/écriture, etc).
# fcntl
Posté par Meku (site web personnel) . En réponse au message Locker un fichier. Évalué à 1.
Un exemple que j'ai là, sous la main :
struct flock verrou;
int fd;
int no_err;
/* création d'un verrou en lecture sur tout le fichier de données */
verrou.l_type = F_RDLCK;
verrou.l_start = 0;
verrou.l_len = 0;
verrou.l_whence = SEEK_SET;
verrou.l_pid = getpid();
/* ouverture du fichier de données */
fd = open ("data.txt", O_RDONLY);
/* pose du verrou */
fcntl (fd, F_SETLKW, &verrou);
/* affichage des données */
lit_et_affiche_donnees (fd);
/* deverouillage et fermeture */
verrou.l_type = F_UNLCK;
fcntl (fd, F_SETLKW, &verrou);
close (fd);
Réfère toi à la page man pour tous les détails et les options possibles (verrous en lecture/écriture, etc).