Calocybe: Welche Anweisung ist korrekt?

Beitrag lesen

Moin moin!

open (HANDLE,">>$DATEI") die || print "Datei $DATEI kann nicht geoeffnet werden\n";

^^^^^^^^^^^^  aeh bitte?
Du meinst sicher
  open (HANDLE,">> $DATEI") || die("Datei $DATEI kann nicht geoeffnet werden weil: $!");

danach die Datei für andere Zugriffe sperren:

flock (HANDLE,2); # nicht unter Windows

Dazu waeren drei Dinge zu sagen:

1.) Es ist ratsam, Namen statt der Zahlen zu verwenden, damit man einfacher erkennt, was da getan wird. Dazu mit
  use Fcntl ':flock';
die Namen fuer die flock-Konstanten importieren und flock dann mit
  flock (HANDLE, LOCK_EX);
aufrufen.

2.) flock funktioniert auch unter Windows NT ff., aber vermutlich nicht unter den Spiele-Windowsen (Win95 ff.).

3.) "Datei fuer andere Zugriffe sperren" geht nicht! flock sperrt ueberhaupt nichts, es sagt nur, dass Du *wuenschst*, dass kein anderer Prozess jetzt diese Datei liest oder schreibt. Dazu muss *jeder* andere Prozess diesen Wunsch aber auch respektieren! D.h. er muss auch flock aufrufen. Wenn Du sicher sein kannst, dass nur Deine eigenen Programme die Datei oeffnen (z.B. in CGI-Umgebung ueblich), dann nuetzt Dir flock was, aber sonst nicht.

Spaetestens wenn Dein Programm mehrere Dateien oeffnet, wirst Du mit flock kaum mehr etwas anfangen koennen. Es empfiehlt sich fuer CGI-Scripts dann, andere Synchronisierungsverfahren einzusetzen, wie z.B. das, was ich mal auf http://calocybe.dyndns.org/temp/FileSemaphore/ hingeladen habe. Damit wird aber genauso wie bei flock vorausgesetzt, das nur Programme die fraglichen Dateien oeffnen, die sich an die Regeln halten.

So long

--
Rule of thumb -- every time Microsoft use the word "smart," be on the lookout for something dumb.
    -- http://www.fourmilab.ch/webtools/demoroniser/