Provided by: manpages-de-dev_1.4-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.  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>.