Michael Marzoll: flock Problem!

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);

  1. 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