Thread Fragen zu gleichzeitigem Dateihandling
(9 answers)
Opened by bianca at 2010-12-06 20:05
"LOCK_NB" ist nicht blockierend und 'flock' gibt damit "true" zurück wenn das sperren funktioniert hat. das ginge dann ungefähr so:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 sysopen(my $fh, ...); if(flock($fh,LOCK_EX|LOCK_NB)) { print $fh ...; $fh->flush; flock($fh,LOCK_UN); } close($fh); In die Datei wird nur geschrieben wenn sie auch gesperrt werden konnte. EDIT: "LOCK_EX" erwirkt einen exklusiven Zugriff auf eine Datei. Das bedeutet kein anderer darf lesen oder schreiben solange der lock existiert. Beim lesenden Programm musst du darauf achten. Es hängt ein wenig damit zusammen wie "flock" auf dem System implementiert ist. Unter einigen Systemen "hängt" das "open" bis der Zugriff gewährt wird, auf anderen gibt das open "false" zurück, bei wider anderen funktioniert das open, nur ist die Datei scheinbar leer. Ich meine mich zu erinnern, das korrekte POSIX-Verhalten wäre das "open" fehlschlägt. Aber sicher bin ich nicht. Last edited: 2010-12-07 08:13:16 +0100 (CET) |