![]() |
Sperren von Dateien: Sperren von Dateien, die über das Netzwerk eingebunden sind |
Falls eine Datei auf einem Dateisystem liegt, das über das Netzwerk eingebunden ist (zum Beispiel ein Netzlaufwerk unter Windows oder NFS unter UNIX-artigen Betriebssystemen), dann kann das Sperren von Dateien problematisch sein:
flock(2) auf Netzwerkdateisystemen gar nicht. Bestenfalls ermöglicht es das Sperren von Dateien gegenüber anderen Prozessen auf dem gleichen Rechner. Wenn also der Webserver also seine Daten auf einem NFS-Dateisystem liegen hat, er jedoch der einzige Rechner ist, der auf dieses zugreift (zum Beispiel im Rahmen von sogenannten NAS-Lösungen), dann kann flock(2) funktionieren - dies hängt allerdings auch von der Wahl des Betriebssystems ab und ist definitiv vorher zu testen.fcntl(2) im Normalfall das Sperren von Dateien auf Netzwerkdateisystemen.Das heißt: Wenn man Dateien auf Netzwerkdateisystemen sperren will, dann sollte man unter UNIX-artigen Betriebssystemen immer zu Methoden greifen, die fcntl(2) nutzen, also die gleichen Methoden, wie im Abschnitt
Programmiersprachenübergreifende Sperren empfohlen wird - was wiederum Konsequenzen auf die Abschottung gegenüber anderen Threads hat.
Allerdings kann man selbst von der prinzipiellen Unterstützung nicht darauf schließen, dass das Sperren tatsächlich funktioniert. Denn Sperren lassen sich in der Konfiguration des Dateiservers in der Regel auch deaktivieren, ferner sind gerade Betriebssysteme, die eine ältere NFS-Version nutzen, oftmals falsch konfiguriert, so dass die Sperren nicht greifen. Zudem ist es unter Umständen nicht möglich zu erkennen, ob die Sperre funktioniert, oder nicht, denn unter manchen Betriebssystemen reagiert die Sperrfunktion so, als ob sie funktioniert hätte, obwohl nichts passiert ist.
Daher ist eher davon abzuraten, Sperren auf Dateisystemen zu verwenden, die über das Netzwerk eingebunden wurden. Wenn dies unumgänglich ist, sollte vorher gut getestet werden, ob die gewünschte Methode auch tatsächlich wie gewünscht funktioniert. Dafür ist es sinnvoll, mit Testscripten zu arbeiten, die versuchen, Dateien zu sperren, aber zwischendurch immer mal wieder an bestimmten Stellen für einige Zeit warten, bevor sie den nächsten Schritt ausführen, damit man potentielle race conditions gezielt manuell nachstellen kann.