flock Problem!
Michael Marzoll
- perl
Benutze folgenden Code um zu überprüfen ob eine Datei geflockt ist, oder so...
Klappt aber nicht :(((
Weiss jemand wieso?
Bzw. sollte es doch funktionieren?
#!/usr/bin/perl
use Fcntl ':flock';
$timeoffset = "0";
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = (localtime(time + 3600*$timeoffset));
$date = sprintf("%02d-%02d",$year-100,$mon+1);
open (STAT, "<stat/$date.views");
if(!flock(STAT,2)) {
until ($released eq TRUE) {
if (flock(STAT,2)) {$released=TRUE;}
$x++;
if ($x>100) {
close(STAT);
die;
}}}
flock(STAT,2);
fseek(STAT, 0,0);
@stat = <STAT>;
$stat[0]++;
close (STAT);
open (STAT, ">stat/$date.views");
if(!flock(STAT,2)) {
until ($released eq TRUE) {
if (flock(STAT,2)) {$released=TRUE;}
$x++;
if ($x>100) {
close(STAT);
die;
}}}
flock(STAT,2);
fseek(STAT, 0,0);
print STAT "$stat[0]";
close (STAT);
Halihallo Michael
Benutze folgenden Code um zu überprüfen ob eine Datei geflockt ist, oder so...
flicken, flockt, geflockt... schönes Denglish ;)
Klappt aber nicht :(((
Das ist anzunehmen, sonst wüsste ich nicht, warum du hier die Frage stellst... Viel
wichtiger zu wissen wäre, ob eine Fehlermeldung kommt (was bei dir wohl nicht der Fall
sein wird) oder was du dir von dem Programm erwartest.
Bzw. sollte es doch funktionieren?
Ehrlichgesagt habe ich mir nicht die Mühe gemacht den Code wirklich zu lesen, da er für
mein Auge zu unformatiert ist. Mir ist jedoch aufgefallen, dass du mit if immer den
Rückgabewert von flock testest. Dir ist hoffentlich gekannt, dass der Rückgabewert keine
Abfrage ist, ob die Datei so gelockt ist, sondern er informiert über (Miss-)Erfolg des
lockings.
Du kannst nicht überprüfen, ob eine Datei locked ist. Du kannst sie nur locken und dann
warten alle anderen Prozesse, bis die Datei wieder entlockt ist (naja kommt auch auf
den LOCK_TYPE an)...
Irgendwo hab ich ein until gesehen... Das brauchst du nicht wirklich, da dieses until
vom Betriebssystem übernommen wird, wenn du so willst.
perldoc -f flock
Viele Grüsse
Philipp