Thread Fragen zu gleichzeitigem Dateihandling (9 answers)
Opened by bianca at 2010-12-06 20:05

topeg
 2010-12-07 07:58
#143359 #143359
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
"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)

View full thread Fragen zu gleichzeitigem Dateihandling