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>.