Erik Wagner: Alles klar, aber eine Frage hab ich dann doch noch...

Beitrag lesen

Noch einmal zum Mitschreiben: flock ist ein "advisory lock". Du kannst eíne so gelockte Datei ohne Probleme oeffnen. open nimmt keine Ruecksicht darauf, ob eine Datei gelockt ist oder nicht.

Hmm... das würde aber meinen gestrigen Beobachtungen wiedersprechen:

Ich habe ein Script A welches eine Datei öffnet, flockt, mit sleep() 7 Sekunden wartet und die Datei dann wieder schließt!

Dann habe ich ein Script B welches die SELBE Datei auch öffnet, flockt und sie sofort wieder schließt!

Dann hatte ich 2 Browserfenster offen das eine mit Script A, daß andere mit Script B. Ich starte nun Script A einfach so, es dauert 7 Sekunden, dann ist das Script fertig. Ich starte das Script B, ist SOFORT fertig. Nun ich starte ich Script A, 1 Sekunde später starte ich Script B und Script B (welches ja sofort fertig sein sollte) wird auch erst dann fertig, wenn Script A fertig ist. Folglich hat open() darauf gewartet, daß die Datei freigegeben ist! Um dies zu testen habe ich den flock()-Vefehl aus Script A mal rausgenommen und siehe da, obwohl Script A die Datei noch geöffnet hatte war Script B wieder sofort fertig (hat also diesmal nicht gewartet.)

Das open() solange wartet bis eine Datei freigegeben ist, steht übrigens auch im CGI-Tutorial und XWolf.com unter folgender URL:

http://cgi.xwolf.com/faq/cgitutor4.shtml

Zitat: "Wird eine Datei zum Schreiben geöffnet wird die Datei gelockt. Dies hat zur Folge, daß kein anderer Lesender oder Schreibender Prozess auf diese Datei zugreifen kann; Trifft ein open() auf eine gelockte Datei, wartet dieses so lange, bis die Datei geunlockt wurde und öffnet erst dann die Datei."

Was ist denn nun richtig? Ich kann mir irgendwie nicht vorstellen, daß open() sich nicht um das flock() schert, weil flock() ja sonst völlig sinnlos wäre, da man ja nicht VOR dem Öffnen der Datei prüfen kann ob eine Datei geflockt ist (hat man mir jedenfalls gesagt) und wenn ich dann einfach eine Datei zum schreiben öffne, die geflockt ist und open() sich nicht drum kümmert, ist der Inhalt ja bereits nach dem öffnen weg, was bringt es mir also, wenn ich dann NACH dem open() prüfe ob die Datei geflockt ist???