Provided by: manpages-de-dev_1.4-1_all 

BEZEICHNUNG
flock - sperrt und entsperrt beratend Dateien
ÜBERSICHT
#include <sys/file.h>
int flock(int fd, int operation);
BESCHREIBUNG
Diese Funktion sperrt oder entsperrt beratend die offenen Datei, die fd angibt. Das Argument operation
ist eines der folgenden:
LOCK_SH Richtet eine gemeinsame Sperre ein. Mehrere Prozesse können eine Datei zur selben Zeit
sperren.
LOCK_EX Richtet eine exklusive Sperre ein. Nur ein Prozess kann zu einer Zeit eine Datei sperren.
LOCK_UN entfernt eine von diesem Prozess gehaltene Sperre.
Ein Aufruf von flock() kann blockieren, wenn von einem anderen Prozess eine inkompatible Sperre gehalten
wird. Um eine nichtblockierende Anfrage zu machen, verbinden Sie LOCK_NB (mittels ODER) mit irgendeiner
der obigen Operationen.
Eine einzelne Datei kann nicht gleichzeitig gemeinsame und alleinige Sperren haben.
Mit flock() erstellte Sperren sind mit einem offenen Eintrag in der Dateitabelle verbunden. Dies
bedeutet, dass Kopien der Dateideskriptoren (erzeugt durch zum Beispiel fork(2) oder dup(2)) sich auf die
gleiche Sperre beziehen. Diese Sperre kann von jedem dieser Deskriptoren modifiziert oder freigegeben
werden. Weiterhin wird die Sperre entweder durch eine explizite LOCK_UN-Operation auf jedem dieser
doppelten Deskriptoren freigegeben oder wenn alle derartigen Deskriptoren geschlossen wurden.
Falls ein Prozess open(2) (oder etwas Ähnliches) verwendet um mehrere Deskriptoren für dieselbe Datei zu
erhalten, werden diese Deskriptoren von flock() unabhängig behandelt. Ein Versuch, die Datei mit einem
dieser Dateideskriptoren zu sperren kann durch eine Sperre verwehrt werden, die der aufrufende Prozess
bereits für einen anderen Deskriptor eingerichtet hat.
Ein Prozess darf nur einen Typ vor Sperre (gemeinsam oder exklusiv) auf eine Datei halten. Nachfolgende
Aufrufe von flock() für eine bereits gesperrte Datei wird eine bestehende Sperre zum neuen Sperrmodus
ändern.
Von flock() angelegte Sperren bleiben über einen Aufruf von execve(2) erhalten.
Eine Datei kann unabhängig vom Modus, mit dem sie geöffnet wurde, mit einer gemeinsamen oder exklusiven
Sperre versehen werden.
RÜCKGABEWERT
Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird -1 zurückgegeben und errno entsprechend
gesetzt.
FEHLER
EBADF fd ist kein Deskriptor für eine geöffnete Datei.
EINTR Während des Wartens auf die Sperre wurde der Aufruf durch ein von einem Handler abgefangenes
Signal unterbrochen; siehe signal(7).
EINVAL operation ist ungültig.
ENOLCK Der Kernel hatte keinen Speicher mehr für das Anlegen von Sperrdatensätzen (lock records).
EWOULDBLOCK
Die Datei ist gesperrt und der Schalter LOCK_NB wurde gewählt.
KONFORM ZU
4.4BSD (der Systemaufruf flock() erschien erstmals in 4.2BSD). Eine Version von flock(), möglicherweise
in Form von fcntl(2) realisiert, ist auf den meisten UNIX-Systemen vorhanden.
ANMERKUNGEN
flock() sperrt keine Datein über NFS. Benutzen Sie stattdessen fcntl(2). Das funktioniert auch über NFS,
wenn eine hinreichend aktuelle Version von Linux installiert ist und der Server Sperren unterstützt.
Seit Kernel 2.0 wird flock() als eigener Systemaufruf realisiert anstatt in der GNU-C-Bibliothek als
Aufruf von fcntl(2) emuliert zu werden. Daraus ergibt sich reine BSD-Semantik: Es gibt keine
Wechselwirkung zwischen den Arten von Sperren, die von flock() und fcntl (2) angelegt wurden. Außerdem
erkennt flock() keine Deadlocks.
flock() errichtet nur beratende Sperren, bei geeigneten Berechtigungen für eine Datei kann ein Prozess
den Einsatz von flock() ignorieren und E/A auf die Datei durchführen.
Die von flock() und fcntl(2) eingerichteten Sperren haben unterschiedliche Semantik in Bezug auf durch
fork(2) erzeugte Prozesse und dup(2). Auf Systemen, die flock () mit fcntl(2) implementieren, wird die
Semantik von flock() anders sein als die in dieser Handbuchseite beschriebene.
Die Umwandlung einer Sperre (von gemeinsam zu exklusiv oder umgekehrt) ist nicht garantiert atomar:
zuerst wird die bestehende Sperre entfernt und dann eine neue Sperre errichtet. Zwischen diesen beiden
Schritten kann eine anstehende Sperranforderung von einem anderen Prozess gewährt werden, mit dem
Ergebnis, dass die Umwandlung entweder blockiert oder, wenn LOCK_NB angegeben wurde, fehlschlägt. (Dies
ist die ursprüngliche BSD-Verhalten und tritt bei vielen anderen Implementierungen auf.)
SIEHE AUCH
flock(1), close(2), dup(2), execve(2), fcntl(2), fork(2), open(2), lockf(3)
Documentation/filesystem/locks.txt in the Linux kernel source tree (Documentation/locks.txt in older
kernels)
KOLOPHON
This page is part of release 3.54 of the Linux man-pages project. A description of the project, and
information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/.
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Dennis Stampfer <kontakt@dstampfer.de> und Martin
Eberhard Schauer <Martin.E.Schauer@gmx.de> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer
bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an
<debian-l10n-german@lists.debian.org>.
Linux 11. Februar 2013 FLOCK(2)