Hallo,
Aber das ist eben nicht zuende gedacht, weil die Datei zwischen dem erfolgreichen fopen() und dem flock() auch schon wieder verschwunden sein könnte oder sonstiges...
Wenn der Dateiname weg ist, versagt flock() deswegen trotzdem nicht (unter UNIX-artigen Betriebssystemen), sondern sperrt die Datei weiterhin (unter UNIX-artigen Betriebssystemen sind Dateien nicht zwangsläufig an Namen gebunden!) und unter Windows kannst Du eine Datei, die geöffnet wurde, nicht löschen.
Bleibt noch eine Frage: Was macht flock( ... LOCK_EX + LOCK_NB), wenn bereits ein dio_lock gesetzt ist?
Es bekommt die Sperre. Das würde auch nur mit LOCK_EX gehen. Wie auch in meinem Artikel erwähnt ist, nutzt dio_fcntl die Funktion fcntl(2) während flock in der Regel flock(2) nutzt, die aber vollkommen unabhängig voneinander sind.
Theoretisch könnte es ja sagen: Lockanfoerderung nicht möglich, aber ich glaube, es wartet trotzdem (so war es bei PHP4).
Wenn Du NB setzt, wartet gar nichts. Definitiv nihct. Und die Sperre ist möglich, weil's eine komplett verschiede Sperre ist, als die andere Funktion. Deswegen muss man auch beim programmiersprachenübergreifenden Sperren von Dateien höllisch aufpassen.
Kannst Du das ausprobieren oder besser auch nachschauen?
Ich muss weder noch - ich hab's ja genau so, wie ich in diesem Posting noch einmal ausgeführt habe, erst in den Artikel geschrieben (vgl. die Abschnitte über die Betriebsysteminterna mit dem PHP-Abschnitt mit dem Abschnitt über programmiersprachenübergreifende Sperren). Mich beschleicht langsam das Gefühl, Du hättest den nicht vollständig gelesen, sondern nur überflogen...
Viele Grüße,
Christian