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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
yohan8
Niveau 6
Niveau 6
Messages : 245
Enregistré le : mer. 07 déc. 2011 22:34
Localisation : Rhône
Status : Hors ligne

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

#1

Message 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"
Modifié en dernier par yohan8 le sam. 16 nov. 2013 22:31, modifié 1 fois.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

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

#2

Message 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.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

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

#3

Message par jchd »

Rechercher MailSlot, une bonne solution simple et robuste, aussi.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
yohan8
Niveau 6
Niveau 6
Messages : 245
Enregistré le : mer. 07 déc. 2011 22:34
Localisation : Rhône
Status : Hors ligne

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

#4

Message 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
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

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

#5

Message 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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre