Page 1 sur 1

[R] Fichier protégé en écriture lors de sa lecture

Posté : ven. 15 nov. 2013 13:44
par yohan8
Bonjour,

J'ai 3 machines virtuelles travaillant sur un même lecteur réseau sur VirtualBox. Sur ce lecteur réseau existe un fichier ini qui est fréquemment utilisé par les 3 machines en tant que lecture comme écriture.

Pour éviter que les 3 machines s'affole sur le fichier ini j'ai créer une variable "Etat" qui indique si le fichier ini est utilisé par une machine ou s'il est libre.
J'ai donc sur mes machines des scripts comportant ce genre de code :

Code : Tout sélectionner

Do
    Sleep(200)
Until IniRead("F:\Fichier.ini","Opération Lecture/Ecriture","Etat",0) = "Libre"
IniWrite("F:\Fichier.ini","Opération Lecture/Ecriture","Etat","Occupé par "&@ComputerName)

[..]

IniWrite("F:\Fichier.ini","Opération Lecture/Ecriture","Etat","Libre")
 
Sauf que parfois la commande d'écriture du changement d'état ne fonctionne pas car lorsqu'une machine "occupe" le fichier, il se peut que les 2 autres tente toute les 200ms de lire la clé "Etat" donc lorsque la première machine à terminé d'occuper le fichier je pense qu'elle échoue l'écriture du changement d'état car windows ne peut pas supporter l'écriture et la lecture d'une même clé/ d'un même fichier.

J'aimerais savoir ce qu'en ai de la politique d'Autoit sur la lecture et écriture d'un même fichier en même temps.
EDIT : J'ai cependant une question qui pourrais résoudre gros de mes problèmes : Lors d'une lecture d'une clé d'un fichier ini, est-ce la totalité du fichier qui est protéger en écriture ou seulement le clé de lecture concerné ?
► Afficher le texteimpossible d'enregistrer une autre valeur à la clé "test"

Re: [..] Fichier protégé en écriture lors de sa lecture

Posté : ven. 15 nov. 2013 14:05
par timmalos
Si vraiment vous ne pouvez pas faire autrement le must du must dans ce genre de cas(mais plus difficile à mettre en place) est l'utilsiation des _NamedPipes (cf docs et forum americain pour les exemples) qui seront beaucoup plus fiable que votre systeme.


Edit: Sinon utilisez un temps aléatoire au lieu de 200ms à la manière d'un protocole CSMA/CA.

Re: [..] Fichier protégé en écriture lors de sa lecture

Posté : ven. 15 nov. 2013 15:28
par jchd
Rechercher MailSlot, une bonne solution simple et robuste, aussi.

Re: [..] Fichier protégé en écriture lors de sa lecture

Posté : sam. 16 nov. 2013 22:31
par yohan8
Étant sous Linux avec 3 machines virtuelles sous windows XP, sa rend les choses tout de suis plus compliqué.

J'ai découvert le protocole CSMA/CA, très intéressent d'ailleurs :)
J'ai pas réussi à comprendre le fonctionnement des _NamedPipes
Je crois que MailSlot n'est pas utilisable dans mon cas :|

J'ai donc prit un sleep(Random(100,1000)) pour espérer ne jamais tomber dans le cas ou les 3 script de mes 3 machine virtuelle utilisent le fichier en même temps ! Sa serait franchement manque de pot.!



Pour ceux désirant travailler sur les communications inter-processus voila 9 moyens de les réaliser sous windows :
  • le presse-papier
    COM
    les messages Windows (et en particulier le message WM_COPYDATA)
    DDE
    les fichiers mappés (file mapping)
    les mailslots
    les pipes (anonymes ou nommés)
    RPC
    les sockets Windows

Re: [..] Fichier protégé en écriture lors de sa lecture

Posté : dim. 17 nov. 2013 01:11
par jchd
yohan8 a écrit :J'ai donc prit un sleep(Random(100,1000)) pour espérer ne jamais tomber dans le cas ou les 3 script de mes 3 machine virtuelle utilisent le fichier en même temps ! Sa serait franchement manque de pot.!
Tout ce qui a une probabilité non nulle d'arriver arrivera certainement. Il te suffit juste d'attendre le jour où ça aura les conséquences les pires pour toi.