Thread Schreibsperre: use Fcntl ':flock'; (4 answers)
Opened by Free Faq at 2004-01-05 15:26

Relais
 2004-01-05 15:38
#78088 #78088
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
Jein, das funktioniert vermutlich schon...
doch sollte oder will man dazu vielleicht noch wissen, warum:

Code: (dl )
1
2
3
4
5
use Fcntl ':flock';
open (FILE, "> $Datei"); # Datei wird geöffnet, ist aber noch nicht geschützt.
flock(FILE, LOCK_EX); # Jetzt wird sie geschützt (*). In der Zwischenzeit hätte ein anderer Prozess unbehelligt schreiben können.
print FILE $Data; # Nun schreibst nur Du.
close (FILE);


*) Wenn das noch nicht durch ein anderes Flock der Fall ist. Dann wird gewartet, bis die Datei wieder frei ist, und später geht es bei (*) weiter.

Weitere Probleme:

Manche W32-Betriebssysteme unterstützen kein Flock. Perl kann das unter Umständen emulieren (meint mein Halbwissen), jedoch gilt das nur für Perl. Andere nichtperlige Prozesse kriegen davon vermutlich nichts mit und können dann das Lock nicht respektieren.

Auf allen Betriebssystemen könnten Prozesse das Flock absichtlich ignorieren. Flock zu beachten ist freiwillig (und geschieht etwa mit obigem Code).

[quote=Free Faq,05.01.2004, 14:26]Wie kann ich das testen?[/quote]

Etwa mit mehreren Prozessen, die Du in kurzer Folge nacheinander beauftragst, immer wieder mal in die Datei zu schreiben, während die anderen noch laufen.
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming

View full thread Schreibsperre: use Fcntl ':flock';