FLOCK(2)

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. Locks created by flock() are associated with an open file description (see open(2)). This means that duplicate file descriptors (created by, for example, fork(2) or dup(2)) refer to the same lock, and this lock may be modified or released using any of these descriptors. Furthermore, the lock is released either by an explicit LOCK_UN operation on any of these duplicate descriptors, or when all such descriptors have been closed. 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
Since kernel 2.0, flock() is implemented as a system call in its own right rather than being emulated in the GNU C library as a call to fcntl(2). This yields classical BSD semantics: there is no interaction between the types of lock placed by flock() and fcntl(2), and flock() does not detect deadlock. (Note, however, that on some modern BSDs, flock() and fcntl(2) locks do interact with one another.)

In Linux kernels up to 2.6.11, flock() does not lock files over NFS (i.e., the scope of locks was limited to the local system). Instead, one could use fcntl(2) byte-range locking, which does work over NFS, given a sufficiently recent version of Linux and a server which supports locking. Since Linux 2.6.12, NFS clients support flock() locks by emulating them as byte-range locks on the entire file. This means that fcntl(2) and flock() locks do interact with one another over NFS. Since Linux 2.6.37, the kernel supports a compatibility mode that allows flock() locks (and also fcntl(2) byte region locks) to be treated as local; see the discussion of the local_lock option in nfs(5).

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/filesystems/locks.txt im Linux-Kernelquellbaum (Documentation/locks.txt bei älteren Kerneln).

KOLOPHON
This page is part of release 3.70 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, 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>.