Mein Ziel in dieser Frage war, eine Datei zu sperren, die als Datenspeicher für mehrere Skripts verwendet wird. Am Ende habe ich einen ähnlichen Code der folgenden (von Chris):
open (FILE, '>>', test.dat') ; # open the file
flock FILE, 2; # try to lock the file
# do something with the file here
close(FILE); # close the file
In seinem Beispiel entfernte ich die Herde FILE, 8 als close (FILE) führt diese Aktion auch. Das eigentliche Problem war, wenn das Skript gestartet wird, muss es den aktuellen Zähler halten, und wenn es endet, muss es den Zähler aktualisieren. Dies ist, wo Perl ein Problem hat, um die Datei zu lesen:
open (FILE, '<', test.dat');
flock FILE, 2;
Jetzt möchte ich die Ergebnisse schreiben, und da will ich die Datei ich wieder zu öffnen, müssen überschreiben und gestutzt, die in den folgenden Ergebnissen:
open (FILE, '>', test.dat'); #single arrow truncates double appends
flock FILE, 2;
In diesem Fall ist die Datei tatsächlich für eine kurze Zeit entsperrt, während die Datei erneut geöffnet wird. Dies demonstriert den Fall für die externe Sperrdatei. Wenn Sie die Kontexte der Datei ändern möchten, verwenden Sie eine Sperrdatei. Der modifizierte Code:
open (LOCK_FILE, '<', test.dat.lock') or die "Could not obtain lock";
flock LOCK_FILE, 2;
open (FILE, '<', test.dat') or die "Could not open file";
# read file
# ...
open (FILE, '>', test.dat') or die "Could not reopen file";
#write file
close (FILE);
close (LOCK_FILE);
Seite beachten, wie Perl schreiben: http://stackoverflow.com/questions/72312/how-should-i-capitalize- perl – szabgab
nicht sicher, ob die Perl-Jungs hier sind Lily zu tun, eine "faq" wie C++ hat, aber ich würde sagen, das ist ein schönes Beispiel für eine – thecoshman