Locker un fichier

Locker un fichier - Perl - Programmation

Marsh Posté le 01-12-2005 à 23:23:39    

j'ai plusieurs serveurs qui doivent allez mettre à jour de l'info dans un fichier sur un drive réseau.
 
Ceux-ci doivent au départ lire le fichier, ensuite modifier des valeurs, puis le réécrire. J'ouvre le fichier en lecture, place le tout dans un array, le referme. Je fais mon traitement, j'ouvre le fichier en écriture, je réécris le data puis je referme le fichier.
 
Je voudrais éviter que 2 serveurs fassent ce traitement en meme temps. Placer un lock sur le fichier avant la première ouverture (en lecture) et le retirer seulement après la 2e fermeture du fichier (écriture)
 
flock ne semble pas être en mesure de s'aider et les fichier temporaire (du genre .lck) ne sont pas vraiment jolies
 
vous voyez une autre méthode?

Reply

Marsh Posté le 01-12-2005 à 23:23:39   

Reply

Marsh Posté le 02-12-2005 à 06:32:30    

Sous Windows il doit y avoir moyen de verrouiller un fichier à l'aide de l'API, il y a peut-être même un module PERL qui le fait.
 
Sous Unix, je ne connais aucun autre moyen fiable que le fichier de lock.

Reply

Marsh Posté le 02-12-2005 à 06:55:33    

Qu'est-ce qui ne te conviens pas dans flock() ?
 
Elmoricq, en C POSIX, fcntl() offre des locks via les opérations F_GETLK, F_SETLK et F_SETLKW.

Reply

Marsh Posté le 02-12-2005 à 09:59:42    

Ce ne sont pas des locks coopératifs ?

Reply

Marsh Posté le 02-12-2005 à 14:01:59    

matafan a écrit :

Qu'est-ce qui ne te conviens pas dans flock() ?
 
Elmoricq, en C POSIX, fcntl() offre des locks via les opérations F_GETLK, F_SETLK et F_SETLKW.


 
parce que flock s'applique à un filehandle de fichier ouvert. Or,  moi j'ai ca:
 

Code :
  1. # j'aimerais locker le fichier ici
  2. open(FENT, '< /tmp/toto.txt');
  3. for my $line (<FENT> ) {
  4.   # création d'une structure à partir du fichier
  5. }
  6. close(FENT);
  7. # Traitement de la structure
  8. open(FSOR, '> /tmp/toto.txt');
  9. # réécriture du fichier
  10. close(FSOR);
  11. # j'aimerais unlocker le fichier ici

Reply

Marsh Posté le 02-12-2005 à 18:21:37    

Elmoricq a écrit :

Ce ne sont pas des locks coopératifs ?


Si, mais c'est suffisant dans la plupart des cas, et probablement de le cas present. Ce qu'on veut generalement c'est que les process "in the know" ne se marchent pas dessus. Apres evidemment si un utilisateur vient editer ou supprimer le fichier a la main, on n'est pas protege.

Reply

Marsh Posté le 02-12-2005 à 18:40:13    

C'est ce qui me semblait. Par contre sous Windows on peut vraiment locker un fichier apparemment (à moins que ce ne soit une feinte ?).
 
Sinon oui, les rares cas où un lock coopératif ne suffit pas, c'est parce qu'il faut passer à un niveau de sécurité supérieur. ;)

Reply

Marsh Posté le 02-12-2005 à 20:36:16    

en utilisant sysopen, je peux ouvrir un fichier en read/write, ce qui ferait mon bonheur puisque j'ouvre le fichier, le locker avec flock, puis je peux tout faire mon traitement, réécrire le fichier sans qu'un autre serveur puisse l'utiliser

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed