FrankS: Datei Schreiben/lesen, wann wirds kritisch ? (Bsp. dieses Forum)

Beitrag lesen

Hallo!

Als Ergänzung zu Klaus' Posting:

Der 2. Parameter beim flock kann folgende Werte annehmen.
LOCK_SH = 1
LOCK_EX = 2
LOCK_NB = 4
LOCK_UN = 8

LOCK_SH, shared lock
Datei ist gesperrt fürs schreiben, alle können lesen, ein flock(FH,4) eines Prozesses B wird blockiert, bis lock von Prozess A beendet wird

LOCK_EX, exclusive lock
Datei ist gesperrt füe alle anderen, nur der "Eigentümer" des lock darf zugreifen (schreibend und lesend). Alle anderen Prozesse werden bei flock(FH,1) oder flock(FH,2) blockiert.

LOCK_NB, non-blocking request
Datei wird gesperrt, es wird aber nicht gewartet, bis ein eventueller lock eines anderen Prozesse auf diese Datei beendet wird.

LOCK_UN, free the lock
Freigabe des locks, NICHT BENUTZEN!!!!. lock wird bei close(FH) implizit ausgeführt. Wird Prozess A zwischen flock(FH,8) und close(FH)  unterbrochen und ein bereits wartender Prozess B greift schreibend auf FH zu, dann...

Ein Beispiel aus dem Perl Kochbuch für LOCK_NB:
unless (flock(FH, LOCK_EXLOCK_NB)) {
    warn "can't immediately write-lock the file ($!), blocking ...";
    unless (flock(FH, LOCK_EX)) {
        die "can't get write-lock on numfile: $!";
    }
}

Gruß Frank