2010-11-24 2 views
0

Ich habe eine Datei von Zeit zu erhöhen, und muss die Datei ohne Race Condition oder etwas in einem anderen Prozess in C++ unter Windows lesen.Eine Datei in einem Prozess lesen, während ein Prozess in C++ schreibt

Schreiben einer Datei ist gegeben, und es gibt keinen Platz, den ich damit spielen kann. Ich kann es nur anmutig lesen.

Haben Sie eine Idee, diesen Fall gut zu behandeln?

TIA

+0

C oder C++? Ihr Betreff sagt C, Ihr Schlüsselwort sagt C++, Ihr Körper erwähnt einen "... Prozess in C++ ...", der überhaupt keinen Sinn ergibt. –

Antwort

0

In Win32 würden Sie sicher machen müssen, dass jeder Autor die Datei mit mindestens lesen Share-Zugriff öffnet, und jeder Leser öffnet die Datei mit mindestens Schreibfreigabezugriff. Ein weiteres Teilen ist erforderlich, wenn Sie> 1 Leser oder> 1 Autor haben.

Siehe hier für CreateFile docs, dwShareMode Parameter.

0

Sie müssen fast sicher CreateFile (in beiden Prozessen) verwenden, um die Freigabe der Datei überhaupt zu ermöglichen. Wenn die Schreibanwendung die Datei im exklusiven Freigabemodus öffnet und sie geöffnet hält, kann die Leseanwendung die Datei überhaupt nicht öffnen.

Von dort ist Rennbedingungen zu verhindern ziemlich einfach: jeder Prozess typischerweise LockFile oder LockFileEx verwendet einen Abschnitt der Datei für exklusiven Zugriff zu sperren, während es Daten in diesem Abschnitt der Datei verwendet. Im Allgemeinen möchten Sie diesen Zeitraum so kurz wie möglich halten, also sperren Sie den Abschnitt, lesen/schreiben und entsperren, alles so schnell wie möglich (dh ohne etwas anderes zu tun, wenn Sie es vermeiden können)).

+0

Ich konnte CreateFile nicht im Schreibprozess verwenden, da das Erstellen und Anhängen einer Datei in der App erfolgt. Kann ich CreateFile und LockFile (Ex) nur während des Leseprozesses verwenden, wenn kein Rennzustand gewährleistet ist? –

+0

@ user518978: Vielleicht, abhängig davon, wie die Schreibanwendung geschrieben wird. Wenn es das Ergebnis von versuchten Schreibvorgängen überprüft und entsprechend reagiert, könnte es funktionieren. Wenn es "blind" schreibt und nur erwartet, dass es funktioniert, gibt es eine ziemlich faire Chance, dass Sie Fehler sehen (Schreibvorgänge, die fehlschlagen, und sie nicht erneut versuchen, so dass die Daten verloren gehen). –

Verwandte Themen