Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[C] Verrou exclusif sur un fichier : flock, lockf...

1 réponse
Avatar
Vincent Richard
Bonjour,

J'essaye actuellement d'empêcher l'accès, mais surtout la suppression d'un
fichier auparavant ouvert avec la fonction "open" puis verrouillé avec
"lockf" (j'ai aussi essayé "flock").

Malheureusement, ça ne fonctionne pas : on (un autre programme) peut
toujours supprimer le fichier verrouillé.

Voici le code :

int f = open("/tmp/fic", O_WRONLY | O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO);

lockf(f, F_TLOCK, 0); /* ou flock(f, LOCK_EX | LOCK_NB); */

/* ... entre temps, le fichier peut être supprimé !!! ... */

lockf(f, F_ULOCK, 0);
close(f);

Je précise que les appels à "open" et "lockf" réussissent tous les 2.

Comment résoudre le problème et empêcher _vraiment_ la modification et/ou la
suppression du fichier par un autre processus ?

Merci d'avance pour vos réponses.

Vincent

--
SL> Au fait elle est mieux ma signature maintenant ?
Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon.
-+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-

1 réponse

Avatar
J. Mayer
On Mon, 25 Aug 2003 01:34:23 +0200, Vincent Richard wrote:

Bonjour,

Bonjour,


J'essaye actuellement d'empêcher l'accès, mais surtout la suppression d'un
fichier auparavant ouvert avec la fonction "open" puis verrouillé avec
"lockf" (j'ai aussi essayé "flock").

Malheureusement, ça ne fonctionne pas : on (un autre programme) peut
toujours supprimer le fichier verrouillé.


Je viens de sortir ma spec POSIX...
Apparement, flock ne verouille que les datas du fichier,
pas son inode.
La solution (que je ne trouve pas vraiment propre, mais bon...)
peut-être de locker l'entrée de répertoire. Ainsi, personne
ne pourra la modifier.
En gros, tu ouvre le répertoire père, tu retrouves l'entrée
correspondant à ton fichier (readdir & telldir) et tu fais
un lockf sur le répertoire uniquement pour cette entrée.
Ca fait un peu bidouille, mais ça doit marcher...