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