Peter Kaufmann: Wie ist das jetzt genau mit flock?

Beitrag lesen

Hallo $xNeTworKx,

Wenn Script A auf eine Datei zugreifen will und währendessen Script B auch darauf zugreift, sperrt dann Script A Script B solange bis Script A "fertig" ist, oder funktioniert flock nur für das selbe Script?

vorne weg: Der PERL Befehl flock greift, meines Wissens nach, auf eine Funktion der C-Library zurück. Die Speere kann somit auch für Prozesse gelten, die gar nichts mit PERL zu schaffen haben.
Es gibt zwei wichtige Arten von flock:

  1. flock(FILE, LOCK_EX)
    Ein Script wartet solange bis es eine exclusive Spere für FILE erhält. Wenn die Spere erteilt ist kann kein anderer Prozess mehr lesend oder schreibend auf FILE zugreifen (natürlich nur falls der andere Prozess mit flock arbeitet).

  2. flock(FILE, LOCK_SH)
    LOCK_SH steht für shared lock. d.h. mehre Prozesse können gleichzeitig auf FILE lesend zugreifen. LOCK_SH stellt also sicher, daß FILE nicht während des lesens verändert wird.

Wenn du in deinen Scripten nur lesend auf FILE zugreifst, würde ich auf jeden Fall (2) verwenden. Dann wird Script B nämlich nicht angehalten. Im Fall (1) hast du aber vollkommen recht.

Genau genug?

Grüße,

Peter