Provided by: manpages-de-dev_1.11-1_all bug

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 (siehe
       open(2)). 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

       Seit Kernel 2.0 wird flock() als eigener Systemaufruf realisiert  anstatt  in  der  GNU-C-Bibliothek  als
       Aufruf  von fcntl(2) emuliert zu werden. Es gibt keine Wechselwirkung zwischen den Arten von Sperren, die
       von flock() und fcntl(2) angelegt wurden. Außerdem erkennt flock() keine Deadlocks. (Beachten  Sie,  dass
       auf einigen modernen BSD-Systemen durch flock() und fcntl(2) erzeugte Sperren miteinander interagieren.)

       In  Linux-Kerneln  bis  2.6.11  sperrt  flock()  keine  Dateien  über NFS (das bedeutet, der Sperrbereich
       beschränkt sich auf das lokale System). Stattdessen  können  Sie  die  byteweise  Sperrung  von  fcntl(2)
       verwenden, die auch über NFS funktioniert. Vorausgesetzt wird dabei eine ausreichend aktuelle Version von
       Linux  und  ein Server, der Sperrungen unterstützt. Seit Linux 2.6.12 unterstützen NFS-Clients Sperrungen
       durch flock(), indem sie diese als byteweise Sperrungen der gesamten Datei emulieren. Das bedeutet,  dass
       Sperrungen  durch  fcntl(2)  und flock() über NFS miteinander interagieren. Seit Linux 2.6.37 unterstützt
       der Kernel einen Kompatibilitätsmodus, der ermöglicht, dass Sperrungen durch flock() (und auch  byteweise
       Sperrungen  durch fcntl(2)) als lokal aufgefasst werden; siehe die Erläuterungen zur Option local_lock 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

       Diese Seite ist Teil der Veröffentlichung  4.04  des  Projekts  Linux-man-pages.  Eine  Beschreibung  des
       Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden
       sich unter http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die  deutsche  Übersetzung  dieser Handbuchseite wurde von Dennis Stampfer <kontakt@dstampfer.de>, Martin
       Eberhard Schauer <Martin.E.Schauer@gmx.de> und Mario Blättermann <mario.blaettermann@gmail.com> 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                                          21. September 2014                                       FLOCK(2)