hi Chris, hi Gregor
2 Bemerkungen:
open (HANDLE,">>$DATEI") die || print "Datei $DATEI kann nicht geoeffnet werden\n";
Ergänze die open-Anweisung um $!:
open (HANDLE,">>$DATEI") die || print "Datei $DATEI kann nicht geoeffnet werden $!\n";
In der Variable $! steht der Fehlercode des letzten Systemaufrufs. Dann siehst Du auch gleich noch den Grund, wenn das Open fehlschlägt.
danach die Datei für andere Zugriffe sperren:
flock (HANDLE,2); # nicht unter Windows
Richig und sehr wichtig! Es gibt - glaube ich ;-) - durchaus Perl-Distributionen, die flock auch unter Windows unterstützen.
jetzt kannst Du schreiben:
print HANDLE "bla bla bla\n";
nicht vergessen, die Datei wieder freizugeben:
flock (HANDLE,8); # nicht unter Windows
Das solltest Du auf keine Fall tun! Warum? Zwischen diesen beiden Befehlen ist der Prozess unterbrechbar. Du hast keine Einfluß darauf, wann der Prozess mal wieder drankommt... Du gibst hier die Datei frei. Wenn nun der Ablauf des Programms unterbrochen wird und ein anderer Prozess genau zu diesem Zeitpunkt dieselbe Datei beschreibt und schließt, steht dessen Inhalt in der Datei. Nun kommt nach endlicher Zeit Dein Prozess wieder an die Reihe, der das locking aufgehoben hat, und schließt die Datei. Damit landen die im Buffer gespeicherten Daten in der Datei und der vorherige Inhalt ist futsch.
und nun zu das Ding:
close (HANDLE);
Und beim Schließen wird das lock implizit wieder aufgehoben.
Gruß Frank