[Toulibre] Verrouiller un fichier sous Linux

Yves DUF yves.duf at gmail.com
Ven 21 Sep 17:32:01 CEST 2007


Bonjour.

Je cherche à faire quelque chose que je croyais simple :
Écrire un petit programme en C, qui ouvre un fichier, et se le réserve
en écriture, pendant que d'autres programmes en font la lecture.
Mais dans le même temps je veux être certain qu'aucun autre programme
externe quelconque ne peut pas ouvrir en écriture mon fichier, pour y
rajouter des choses, à mon insu.

La solution d'après ma bible de chevet "Unix Network Programming IPC"
de W. Richard Stevens ( http://www.lavoisier.fr/notice/fr163172.html
), c'est d'utiliser les mandatory locks :
- Monter le filesystem avec l'option -o mand  (ce que je fait dans un
répertoire bidon /tmp/gha )
- Un chmod +l sur le fichier pour rendre ce verrou obligatoire (Je ne
l'ai pas dans mon système, donc je contourne en faisant un chmod g-x
et g+s)
- Un appel à fnctl pour verrouiller le fichier
(http://pwet.fr/man/linux/appels_systemes/fcntl )

Mais hélas sur mon Linux Redhat 4.4, cela ne fonctionne pas. Il
méprise mon verrou, comme le montre ce petit programme ci-joint
(désolé, c'est un moche programme de test)

Et je ne vois plus dans la config du noyau le moyen d'activer les
"MANDATORY LOCK", ce qui est peut-être ce qui me manque.

Ma question : "Quelqu'un sait-il comment verrouiller un fichier en
lecture/écriture pour un processus, et en lecture seule pour tous les
autres, qu'ils soient coopératifs ou non."

Merci d'avance pour vos lumières.
Yves

-- 
Un autre monde est possible,
il suffit juste qu'on s'y mette tous !
-------------- section suivante --------------
Une pièce jointe autre que texte a été nettoyée...
Nom: flock_test.c
Type: application/octet-stream
Taille: 1266 octets
Desc: non disponible
URL: <http://toulibre.org/pipermail/toulouse-ll/attachments/20070921/8aa7e610/attachment.obj>


Plus d'informations sur la liste de diffusion Toulouse-ll