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

Linux                                           11. Februar 2013                                        FLOCK(2)