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

Beitrag lesen

Hallo,

Also hier nochmal das Beispiel.:
und zwar is t mir noch immer nicht klar ob das BLOCKEN der Datei automatisch abläuft ...

»»

also ich meine USER A ruft per Script die DATEI A zum schreiben auf,  diese wird geflockt...

»»

jetzt kommt USER B will auch schreiben... kann/darf aber nicht....
und hier die entscheidene Frage (die mir immer noch nicht klar is...) wird das Script(Ausgabe) von USER B nun Abgebrochen mit Error  oder wartet das Script AUTOMATISCH bis USER A fertig ist und fängt dann sein schreiben/bzw. lesen der Datei an?

»»

das häng davon ab, _wie_ Du lockst ;-)
wie Frank schon sagte, gibt es mehrere Werte für den 2. Parameter:
LOCK_SH = 1
LOCK_EX = 2
LOCK_NB = 4
LOCK_UN = 8

Als erfahrener Programmierer siehst Du sicherlich, daß die Werte Potenzen von 2 sind, d.h es werden Bits gesetzt. Das sollte Dich eigentlich aufhorchen lassen. Wenn solche Werte verwendet werden, gibts meist auch mögliche Kombinationen.

Wichtig sind eigentlich nur Kombinationen von LOCK_SH bzw LOCK_EX mit LOCK_NB. LOCK_NB steht, siehe perldoc, für 'non-breaking lock'. also _nur_ wenn Du eine Kombination mit LOCK_NB verwendest wartet das Script nicht, bis die Datei wieder frei ist.

das heißt im klartext und ohne schwafelschwafel:
mit flock(HDL,LOCK_SH) bzw. flock(HDL,LOCK_EX) wartet das Script bis die Datei frei ist, falls sie beim Aufruf gelockt ist, und lockst sie dann selbst.

mit flock(HDL,LOCK_SH+LOCK_NB) bzw. flock(HDL,LOCK_EX+LOCK_NB) wartet das Script _nicht_. (siehe auch das Beispiel von Frank)

Aber eigentlich steht das ja alles sowieso in der Doku
perldoc -f flock

Grüße
   Klaus

oder muss ich dann doch soeine Lösung mit einer Temporären Datei verwenden ???
thx nochmal

»»

mfG
Steffen