P
Dann arbeite mit zwei Dateien.
Die eine ist eine "Lock" Datei, die andere enthält die Daten "Data".
Eine Lock Datei hat keinen Inhalt sie muss nur existieren oder nicht existieren.
Schritt 1: Immer wenn du Daten in der "Data" ändern möchtest erzeugst du die "Lock" Datei
Schritt 2: Dann änderst du "Data"
Schritt 3: Du löscht die "Lock" Datei
Alle anderen Programm dürfen die "Data" nur dann neu öffnen wenn die Lock Datei nicht existiert.
Damit stellst du sicher das nur wenn gültige Daten in der Datei sind gelesen wird.
kritisch ist der Zeitpunkt zwischen erzeugen der "lock" datei und "ändern", denn es kann passieren das jemand
nach dem "Lock" schaut ihn nicht findet und just in dem Moment wo er auf die Datei zugreift wir der lock gesetzt.
Solche Probleme lassen sich dann besser mit Betriebssystemfunktionen wie Signalen und pipes umgehen.
Vielleicht kann man zusammen mit entelechie´s Lösung das Problem umgehen.
Du erzeugst die Daten Datei
Ordnest jedem Datum im File eine feste Position zu offset 0 im File für Datum 1, offset 100 Bytes für Datum 2, offset 250 für Datum3,...
Im ersten Byte dieser Position hälst du ein lokales Flag 0 wenn daten gültig, !=0 wenn update in Progress und unmittelbar dahinter die Daten
- Im erzeugenden Programm schreibst du wenn du ändern möchtest zuerst an diesem Offset das Flag !=0,
- scheibst dann die Daten
- setzt das Flag an diesem Offset =0
* Im lesenden Programm liest du alles einschließlich flag an diesem Offset
* Danach überprüfst du ob das Flag 0 ist wenn ja hast du gültige Daten, wenn nein wiederhol den Vorgang solange bis das Flag 0 ist,
oder bis du nach 10 mal lesen sagst hier ist ein Fehler
Wenn du im Lesen irgendwie Sorge hast das währende des lesens die Daten verändert werden , in jedem OS gibt es mehtoden um Actionen als nicht unterprechbar zu kennzeichnen (critikal section, atomic,... oder wie es auch immer im OS heißt, so etwas abr nur mit größter Vorsicht nutzen)
Wenn noch fragen sind, vielleicht haben wir eine Antwort