Hallo Stefan,
Das ist falsch! RFTM "perldoc -f flock". Zitat:
Hab' ich wohl, allein mir fehlt die Gruetze ;-)
Du hast da etwas bei LOCK_SH und LOCK_NB durcheinander geworfen. Auf mangelnde Gruetze wuerde ich aber noch nicht schliessen wollen :-)
Ich bin halt immer eher fuer die nachvollziehbaren und verstaendlichen Loesungen. Und in dem Buch "CGI Programming" von Shishir Grundavaram fand ich auf S.123f.:
"You simply call flock and pass the name of the file handle like this:
flock(FILE,2);
This call grants you the exclusive right to use the file."
...
"When you're finished with the file, issue the following call:
flock(FILE,8);"Kann also nicht ganz verkehrt sein, es so zu machen. Und wenn du anderer Ansicht bist bzw. begruenden kannst, was daran falsch ist, dann waere es fein, wenn du das tun wuerdest!
Ganz verkehrt ist es auch nicht. Aber aus zwei Gründen sollte man es der Einfachheit halber weglassen:
1. Es ist unnötig, da ein close wie bereits gesagt ein Lock impliziert. Man kann sich also Code sparen.
2. Kann es Probleme bei älteren Perl-Interpretern geben, nämlich dann wenn die Ausgabe gepuffert ist. Zum Zeitpunkt des unlocks muß das File nämlich noch gar nicht komplett geschrieben sein. Dies ist es erst beim close. Also: Ein explizites Unlock macht es nötig, den Schreibbuffer zu flushen (bei neueren Perlversionen geschieht das wohl automatisch) - oder eben nur close benutzen.
Das Thema wurde etliche Male in de.comp.lang.perl.misc behandelt. Bei deja.com läßt's sich nachlesen.
Viele Grüße,
Daniel Bradler