Hi!
Was hälst Du von folgender Vorgehensweise:
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 :-)
Ich bin jetzt nicht ganz sicher, ob die goto-Geschichte so ganz korrekt ist. Abgesehen davon (und davon, daß ich ein paar Variablen voraussetze), würde dies Deiner Meinung nach sicher sein?
Eigentlich wollte ich mit der Prozess-ID Sache den Aufwand DRASTISCH reduzieren. Deine Lösung nutzt aber zumindest immer noch flock ...
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 ...
ciao,
Jörk