Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1666 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Locker un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Locker un fichier

n°1257190
burgergold
5$? va chez l'diable!
Posté le 01-12-2005 à 23:23:39  profilanswer
 

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?

mood
Publicité
Posté le 01-12-2005 à 23:23:39  profilanswer
 

n°1257224
Elmoricq
Modérateur
Posté le 02-12-2005 à 06:32:30  profilanswer
 

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.

n°1257226
matafan
Posté le 02-12-2005 à 06:55:33  profilanswer
 

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.

n°1257272
Elmoricq
Modérateur
Posté le 02-12-2005 à 09:59:42  profilanswer
 

Ce ne sont pas des locks coopératifs ?

n°1257484
burgergold
5$? va chez l'diable!
Posté le 02-12-2005 à 14:01:59  profilanswer
 

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

n°1257729
matafan
Posté le 02-12-2005 à 18:21:37  profilanswer
 

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.

n°1257742
Elmoricq
Modérateur
Posté le 02-12-2005 à 18:40:13  profilanswer
 

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. ;)

n°1257790
burgergold
5$? va chez l'diable!
Posté le 02-12-2005 à 20:36:16  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Locker un fichier

 

Sujets relatifs
Comment acceder un fichier en CStructure binaire d'un fichier JPEG
Compter le nombre de ligne dans un fichier texte sous WindowsRESOLU coller des formules ss lien de fichier
Fichier CHM et HHCTRL.OCXSupprimer HEX 1A en fin de fichier
[serveur dédié] cmt prendre en compte les modifs du fichier de conf?Modification d'un fichier vbscript
[ASP] Lecture dans un fichier texte[C++] comment locker un fichier (Classe MFC)
Plus de sujets relatifs à : Locker un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR