Michel: Ein Graus - File lock

Beitrag lesen

Hi zusammen,

ich weiss, es wurde schon x-mal diskutiert. Nie befriedigend wie ich finde. File locking unter Unix. Schaut Euch das mal an, unter dem Aspekt, dass ich eine Datei lese, den Inhalt auf irgendwas prüfe, den Inhalt veraendere und die Datei dann neu schreibe:

open(DATA, "<datei.dat");
flock (DATA,2);
  @temp = <DATA>;
close(DATA);

Ich weiss, dass ich hier ein flock (DATA,1) setzen muesste, ich will aber exclusiv locken. Erstmal egal. Weiter...

$temp[12] = "Neuer text"; # Hier bastel ich also an meinem Inhalt

open(DATA, ">datei.dat"); # und schreib neu
flock (DATA,2);
foreach $mline (@temp) {print DATA $mline . "\n";};
close(DATA);

Soweit so schlecht. Denn was kann alles zwischen den beiden "Open" passieren? Alles! Ich bin ja nicht der einzige Prozess. Ausserdem schuetzt flock (DATA,2) nicht vor einem Lesen der (vielleicht gerade leeren Datei weil geschrieben wird) und und und. Kurz, dieser Code ist Muell.

Simpel: HILFE! WIE IST ES RICHTIG?

Ich hab all das ueber selbst angelegte Semaphoren etc. gelesen, auch das ist keine Lösung. Wie einige richtig erkannt haben gibt es auch dort kritische Momente wo eine Abfrage schieflaufen muss.

Sicher, ich könnte "richtige" Datenbanken nehmen, hab ich aber im Moment nicht und irgendwie muss das doch gehen.

Danke im voraus.

Verzweifelt (Datei schon einmal zerschossen)

Michel