Teil von SELFHTML aktuell Teil von Artikel Teil von Programmiertechnik Teil von Sperren von Dateien

Sperren von Dateien: Dateisperren in verschiedenen Betriebssystemen

nach unten Allgemeines
nach unten Dateisperren unter UNIX-artigen Betriebsystemen
nach unten Dateisperren unter Microsoft Windows
nach unten Weiterführende Links

Allgemeines

In diesem Abschnitt werden die Locking-Mechanismen unter den verschiedenen Betriebssystemen näher erläutert. Dies sind Hintergrundinformationen, die für den praktischen Einsatz nicht unbedingt relevant sind, da viele Sprachen wie Java, PHP oder Perl Abstraktionsschichten anbieten, die es ermöglichen, Dateien zu sperren, ohne sich um die Eigenheiten des Betriebssystems Sorgen zu machen. Daher kann dieser Abschnitt auch gerne übersprungen werden.

nach obennach unten

Dateisperren unter UNIX-artigen Betriebssystemen

Unter UNIX-artigen Betriebssystemen wie Linux, FreeBSD oder Mac OS X sind Dateisperren im Normalfall immer kooperativ. Zudem gibt es aus historischen Gründen drei verschiedene Mechanismen, mit deren Hilfe eine Datei gesperrt werden kann. Hinzu kommt noch, dass die verschiedenen Spezifikationen nicht fordern, dass diese Mechanismen kompatibel zueinander sind - was auf Grund der Freiwilligkeit dazu führt, dass man als Programmierer Sorge tragen muss, dass alle Programme den gleichen Mechanismus verwenden.

Folgende Mechanismen stehen zur Auswahl, sie werden von allen oben genannten UNIX-artigen Betriebssystemen unterstützt:

flock(2)
Dies ist der einfachste Sperrmechanismus. Er sperrt immer die vollständige Datei und unterstützt beide Sperrstufen (exklusiv und mitbenutzbar). Die Betriebssystemfunktion besitzt nur zwei Parameter: Den Dateideskriptor der geöffneten Datei, die gesperrt werden soll und die Operation (exklusiv sperren, mitbenutzbar sperren oder entsperren).
fcntl(2)
Dieser Mechanismus ermöglicht das Sperren von Dateibereichen anstelle von ganzen Dateien. Auch hier werden beide Sperrstufen unterstützt. Allerdings muss hierzu eine Struktur initialisiert werden, die dann die Sperreinstellungen (Sperrstufe sowie Position und Länge des zu sperrenden Bereichs) enthält. Die Funktion fcntl ist ferner eine allgemeine Systemfunktion zur Manipulation von Dateideskriptoren, das Setzen von Sperren ist nur eine Aufgabe, die mit ihrer Hilfe erledigt werden kann. Zudem besitzen Sperren, die durch fcntl(2) angelegt wurden, den Nachteil, dass alle Sperren auf eine Datei, die ein Prozess geöffnet hat, beim Schließen eines Dateideskriptors aufgehoben werden - selbst wenn die Datei anderweitig vom selbstn Prozess noch geöffnet ist.
lockf(3)
Dies ist auch ein einfacher Sperrmechanismus, der nur exklusive Sperren untersützt, dafür jedoch auch Dateibereiche. Der Dateibereich fängt immer bei der aktuellen Position in der Datei an (an der auch gelesen/geschrieben werden würde), die Länge wird über einen Parameter übergeben. Auf den meisten Betriebssystemen ruft diese Funktion intern nur fcntl auf, dies ist jedoch nicht im Standard vorgeschrieben, und man sollte sich nicht darauf verlassen, dass diese beiden Locking-Mechanismen miteinander kompatibel sind.

Verpflichtende Dateisperren unter Linux

Um sogenanntes mandatory locking unter Linux zu aktivieren, muss man das Dateisystem mit der Option mand mounten (die man zum Beispiel in die /etc/fstab schreiben kann), und bei jeder Datei, die so gesperrt werden soll, muss das Set-Group-ID-Bit in den Dateirechten gesetzt und das Group-Executable-Bit gelöscht sein, was man über chmod g-x+s datei erreichen kann. In dem Fall sind alle Sperren, die über fcntl (nicht jedoch flock!) eingerichtet werden, verpflichtend anstelle von freiwillig. Allerdings schützt dies auf Grund der Dateizugriffssemantiken von Linux nicht vor dem Löschen der Datei selbst (und beispielsweise anschließendem Wiederanlegen).

nach obennach unten

Dateisperren unter Microsoft Windows

Dateisperren unter Microsoft Windos sind immer verpflichtend. Sobald eine Datei über die Windows-API-Funktion CreateFile geöffnet wurde, kann sie über die API-Funktion LockFileEx gesperrt werden. Diese unterstützt sowohl exklusive als auch mitbenutzbare Sperren sowie auch Dateibereiche. Kooperative Sperren werden von Windows dagegen nicht unterstützt (auch wenn sie über bestimmte Tricks mit verpflichtenden Sperren simuliert werden können).

Zu beachten ist, dass Dateisperren nur unter NT-basierten Betriebssystemen (wie Windows NT, 2000, XP, 2003 oder Vista) mit NTFS als Dateisystem zuverlässig funktionieren.

nach obennach unten

Weiterführende Links

weiter Seite Typische Fehler beim Sperren von Dateien

zurück Seite Gleichzeitige Zugriffe auf Dateien

Teil von SELFHTML aktuell Teil von Artikel Teil von Programmiertechnik Teil von Sperren von Dateien

© 2006 bereichsübergreifende Seite Impressum