Kann ich mehreren Programmen erlauben, gleichzeitig aus derselben Datei zu lesen?

8

Ich habe eine Anwendung, die eine Reihe von Datendateien liest und einige Modellberechnungen durchführt. Das Programm muss die Datendateien selbst nicht ändern, daher öffne ich sie momentan mit dem schreibgeschützten Flag, wie unten gezeigt:

%Vor%

Ich möchte mehrere Instanzen meines Programms gleichzeitig ausführen, die denselben Datensatz verwenden, aber unterschiedliche Berechnungen an den Daten durchführen. Keines meiner Programme muss die Datendateien ändern. Da die Datendateien sehr groß sind, kann ich keine separaten Kopien der Daten für jedes Programm erstellen.

Ich habe angenommen, dass zwei Programme aus derselben Datei zur gleichen Zeit lesen, da ich die Dateien mit schreibgeschützten Berechtigungen öffne. Stattdessen erhalte ich verschiedene Fehler wie "die Datei konnte nicht geöffnet werden, weil sie von einem anderen Prozess verwendet wird".

Da meine Entwicklungsumgebung Windows 7 ist, schlägt diese Frage vor, dass es möglicherweise darum geht, Lesezugriff zu ermöglichen . Alle Antworten in diesem Thread basieren jedoch auf CreateFile . in der Erwägung, dass es sich um Legacy-Code handelt, der mit stdio.h geschrieben wurde.

Gibt es eine Möglichkeit, mehrere Programme gleichzeitig aus einer Datei mit der fopen-Klasse von Funktionen lesen zu können?

    
Troyen 19.07.2012, 18:17
quelle

1 Antwort

6

Wenn Sie die Routine fopen ändern können, versuchen Sie, fopen Aufrufe durch _fsopen , zum gemeinsamen Lesen / Schreiben. _fsopen ist msrt-spezifisch.

Wenn Sie % CreateFile verwenden können und nicht den gesamten Legacy-Code für Lese- / Schreibvorgänge neu schreiben möchten, können Sie auch versuchen, ein FILE * mit einem winapi-Datei-Handle zu verknüpfen . Verwenden Sie _open_osfhandle , um einen Dateideskriptor aus einer Datei zu erhalten handle, die von CreateFile zurückgegeben wird, verwenden Sie dann _fdopen um einen FILE * von diesem Dateideskriptor zu erhalten.

    
pb2q 19.07.2012, 18:23
quelle

Tags und Links