Hi,
die zweite Instanz liest leere Daten, während die erste gerade speichert, und speichert dieselben später ab. Die Daten gehen also verloren.
Das ist ja katastrophal. Jetzt weiß ich wenigstens warum mir letzten eine Datei auf Null gesetzt wurde.
exakt... :-)
perldoc -f flock
ich bin Linux-Neuling und total Windowsverseucht. Deshalb danke auch für diesen Tip. Hier jetzt allerdings ein Loblied auf Linux zu singen, würde wohl den Rahmen sprengen.
Ich benutze auch Windows, aber zumindest kann ich auf einer Linux-Oberfläche "überleben". Soweit sollte man es schon beherrschen, also: üben, üben, üben! ;-)
Ich habe die Sache übrigens sehr umständlich gelöst (weil ich flock selber nicht richtig verstehe *g*)[...]
Da bin ich aber beruhigt, daß auch ein Profi!? seine Schwächen eingesteht.
*g* :-)
Die Idee ist famous. ich habe deshalb eine kleine Funktion erstellt, die genau das macht.
Nicht übel, wirklich. Mit dem -e Switch (vergl. perldoc -f -X) kann man es noch verbessern ("-e $file" prüft, ob eine Datei existiert):
sub waittofileclose
{
$f = $_;
$isopen = "$filename.isopen";
$testagain = 0;
while (-e $isopen && ++$testagain < 20) { select(undef,undef,undef,0.1); }
Die Datei brauchst Du übrigens erst vor dem Schreibzugriff zu erstellen. Nebenbei hoffe ich, daß die Verwendung von $f und $filename gewollt ist? ;-)
Vielleicht kann man ja noch alle 10 oder 100 Aufrufe ein Backup der Datendatei anlegen. Natürlich nur, wenn die Datendatei nicht die Größe Null hat. In diesem Fall müßte man das Backup zurückkopieren.
Auch nicht schlecht. Die Größe eines Files bekommt man mit -s $file ;-)
Fällt mir gerade ein, wo liegt den die Schmerzgrenze für die Größe einer zu lesenden Datei. Ich meine hier speziell, was passt in eine @Liste oder in einen $Scalar.
Kommt darauf an. Wie groß sind Arbeitsspeicher und Swapdatei? ;-)
Prinzipiell gibt es dazu keine Begrenzung.
Cheatah