Thread flock funktioniert nicht (64 answers)
Opened by x-man at 2006-04-17 19:11

betterworld
 2006-04-18 20:20
#7378 #7378
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=pq,18.04.2006, 14:31]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
use Fcntl qw(:flock :seek);
open my $fh, "+<", "datei" or die $!;
flock $fh, LOCK_EX;
seek $fh, 0, SEEK_SET;
chomp(my $count = <$fh>);
$count++;
seek $fh, 0, SEEK_SET;
truncate $fh, 0;
print $fh "$count\n";
close $fh;
[/quote]
Sorry, dass ich mich auch noch einmische: Imho ist es in der zitierte Code nicht 100% sicher. Wenn direkt nach dem "truncate" der Prozess gekillt wird (z. B. wegen einem Server-Neustart), ist die Datei leer. Meine vorgeschlagene Loesung: In eine zweite (gelockte) Datei schreiben, und wenn man fertig ist, ein atomares rename() benutzen, um die alte Datei zu ersetzen.

Edit: Anmerkung: Dieses Vorgehen wuerde auch im Falle eines vollen Dateisystemes einer Korruption der Datei vorbeugen, wenn man die Rueckgabewerte von print und close ueberprueft.\n\n

<!--EDIT|betterworld|1145377953-->

View full thread flock funktioniert nicht