Cheatah: Directory lesen mit Perl

Beitrag lesen

Hi,

LABEL:
my $flockcount=0;
while (-e $flockdatei && $flockcount < 5) { $flockcount++; sleep(1); }
open(FLOCK,">$flockdatei");
print FLOCK $prozess-id;
close(FLOCK);

Hier könnte sicherheitshalber noch eine kurze Pause eingelegt werden, vor allem folgt jetzt der Test:

open(FLOCK,$flockdatei);
my $pid=<FLOCK>;
close(FLOCK);
if ($pid != $prozess-id) { goto LABEL; }

Schreibzugriff gewährt :-)

Eigentlich wollte ich mit der Prozess-ID Sache den Aufwand DRASTISCH reduzieren. Deine Lösung nutzt aber zumindest immer noch flock ...

nein, nur das FileHandle heißt so. Ein flock() ist aber nicht mehr dabei.

Ich dachte eher an so etwas wie:

open(NUMMER, "$$.dummy");
print NUMMER, 'blablabla';
close NUMMER;

$zahl = 42;
until (rename("$$.dummy", "$zahl.log")) {$zahl ++}

Bin mir grad' aber nicht sicher, ob rename wirklich so reagiert, wie wir das brauchen ...

Halte ich nicht für besonders sinnvoll. Zunächst einmal würde ich das OS nicht mit dauernden Fehlermeldungen belasten... also mit while(-e) arbeiten ;-) Vor allem aber funktioniert dies ausschließlich bei einem System, das fortlaufend Dateien der Form "xyz.log" erstellt, also nur bei z.B. Foren oder Guestbooks. Das Flock-Problem gibt es aber auch bei Scripts, die nur auf eine einzige Datei zugreifen - und sei es nur ein Counter!

Jedenfalls habe ich jetzt gelernt, daß die Prozess-ID in $$ gespeichert ist, und daß ich doch öfter mal perldoc perlvar durchlesen sollte ;-) Da gibt es doch mehr Variablen, als ich ursprünglich dachte...

Cheatah