.\" -*- coding: UTF-8 -*- .\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu) and .\" and Copyright 2002 Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Modified Fri Jan 31 16:26:07 1997 by Eric S. Raymond .\" Modified Fri Dec 11 17:57:27 1998 by Jamie Lokier .\" Modified 24 Apr 2002 by Michael Kerrisk .\" Substantial rewrites and additions .\" 2005-05-10 mtk, noted that lock conversions are not atomic. .\" .\" FIXME Maybe document LOCK_MAND, LOCK_RW, LOCK_READ, LOCK_WRITE .\" which only have effect for SAMBA. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH flock 2 "30. März 2023" "Linux man\-pages 6.05.01" .SH BEZEICHNUNG flock \- wendet empfohlene Sperren auf eine offene Datei an oder entfernt sie .SH BIBLIOTHEK Standard\-C\-Bibliothek (\fIlibc\fP, \fI\-lc\fP) .SH ÜBERSICHT .nf \fB#include \fP .PP \fBint flock(int \fP\fIdd\fP\fB, int \fP\fIAktion\fP\fB);\fP .fi .SH BESCHREIBUNG Wendet empfohlene Sperren auf eine offene, durch \fIdd\fP angegebene Datei an oder entfernt sie. Das Argument \fIAktion\fP ist eines der folgenden: .RS 4 .TP 9 \fBLOCK_SH\fP Richtet eine gemeinsame Sperre ein. Mehrere Prozesse können eine Datei zur selben Zeit sperren. .TP \fBLOCK_EX\fP Richtet eine exklusive Sperre ein. Nur ein Prozess kann zu einer Zeit eine Datei sperren. .TP \fBLOCK_UN\fP entfernt eine von diesem Prozess gehaltene Sperre. .RE .PP Ein Aufruf von \fBflock\fP() kann blockieren, wenn von einem anderen Prozess eine inkompatible Sperre gehalten wird. Um eine nichtblockierende Anfrage zu machen, verbinden Sie \fBLOCK_NB\fP (mittels ODER) mit irgendeiner der obigen Aktionen. .PP Eine einzelne Datei kann nicht gleichzeitig gemeinsame und alleinige Sperren haben. .PP Mit \fBflock\fP() erstellte Sperren sind mit einem offenen Eintrag in der Dateitabelle verbunden (siehe \fBopen\fP(2)). Dies bedeutet, dass Kopien der Dateideskriptoren (erzeugt durch zum Beispiel \fBfork\fP(2) oder \fBdup\fP(2)) sich auf die gleiche Sperre beziehen. Diese Sperre kann von jedem dieser Dateideskriptoren modifiziert oder freigegeben werden. Weiterhin wird die Sperre entweder durch eine explizite \fBLOCK_UN\fP\-Aktion auf jedem dieser doppelten Dateideskriptoren freigegeben oder wenn alle derartigen Dateideskriptoren geschlossen wurden. .PP Falls ein Prozess \fBopen\fP(2) (oder etwas Ähnliches) verwendet, um mehrere Datedeskriptoren für dieselbe Datei zu erhalten, werden diese Dateideskriptoren von \fBflock\fP() 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 Dateideskriptor eingerichtet hat. .PP Ein Prozess darf nur einen Typ vor Sperre (gemeinsam oder exklusiv) auf eine Datei halten. Nachfolgende Aufrufe von \fBflock\fP() für eine bereits gesperrte Datei wird eine bestehende Sperre zum neuen Sperrmodus ändern. .PP Von \fBflock\fP() angelegte Sperren bleiben über einen Aufruf von \fBexecve\fP(2) erhalten. .PP Eine Datei kann unabhängig vom Modus, mit dem sie geöffnet wurde, mit einer gemeinsamen oder exklusiven Sperre versehen werden. .SH RÜCKGABEWERT Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird \-1 zurückgegeben und \fIerrno\fP gesetzt, um den Fehler anzuzeigen. .SH FEHLER .TP \fBEBADF\fP \fIdd\fP ist kein Deskriptor für eine geöffnete Datei. .TP \fBEINTR\fP Während des Wartens auf die Sperre wurde der Aufruf durch ein von einem Handler abgefangenes Signal unterbrochen; siehe \fBsignal\fP(7). .TP \fBEINVAL\fP \fIAktion\fP ist ungültig. .TP \fBENOLCK\fP Der Kernel hatte keinen Speicher mehr für das Anlegen von Sperrdatensätzen (lock records). .TP \fBEWOULDBLOCK\fP Die Datei ist gesperrt und der Schalter \fBLOCK_NB\fP wurde gewählt. .SH VERSIONEN .\" E.g., according to the flock(2) man page, FreeBSD since at least 5.3 Seit Linux 2.0 wird \fBflock\fP() als eigener Systemaufruf realisiert anstatt in der GNU\-C\-Bibliothek als Aufruf von \fBfcntl\fP(2) emuliert zu werden. Es gibt keine Wechselwirkung zwischen den Arten von Sperren, die von \fBflock\fP() und \fBfcntl\fP(2) angelegt wurden. Außerdem erkennt \fBflock\fP() keine Deadlocks. (Beachten Sie, dass auf einigen modernen BSD\-Systemen durch \fBflock\fP() und \fBfcntl\fP(2) erzeugte Sperren miteinander interagieren.) .SS CIFS\-Details In Linux bis 5.4 wird \fBflock\fP() nicht über SMB weitergeleitet. Eine Datei mit solchen Sperren wird auf fernen Clients nicht gesperrt erscheinen. .PP Seit Linux 5.5 werden \fBflock\fP()\-Sperren mit SMB\-Byte\-Bereichssperren über die gesamte Datei emuliert. Ähnlich wie bei NFS bedeutet dies, dass \fBfcntl\fP(2)\- und \fBflock\fP()\-Sperren miteinander wechselwirken. Eine anderer wichtiger Seiteneffekt ist, dass die Sperren nicht mehr empfohlene sind: jede E/A auf einer gesperrten Datei wird immer mit \fBEACCES\fP fehlschlagen, wenn sie von einem separaten Dateideskriptor aus erfolgt. Dieser Unterschied stammt von dem Design der Sperren in dem SMB\-Protokoll, das die Semantik verpflichtender Sperren bereitstellt. .PP Die Semantik ferner und verpflichtender Sperren können sich mit dem SMB\-Protokoll, den Einhängeoptionen und dem Server\-Typ ändern. Siehe \fBmount.cifs\fP(8) für zusätzliche Informationen. .SH STANDARDS BSD. .SH GESCHICHTE 4.4BSD (der Systemaufruf \fBflock\fP() erschien erstmals in 4.2BSD). Eine Version von \fBflock\fP(), möglicherweise in Form von \fBfcntl\fP(2) realisiert, ist auf den meisten UNIX\-Systemen vorhanden. .SS NFS\-Details In Linux bis 2.6.11 sperrte \fBflock\fP() keine Dateien über NFS (d.h. der Gültigkeitsbereich von Sperren beschränkte sich auf das lokale System). Stattdessen konnte \fBfcntl\fP(2) für Byte\-Bereichssperren, die über NFS funktionieren, verwandt werden, sofern eine ausreichend neue Version von Linux und ein Server, der Sperren unterstützt, eingesetzt wurden. .PP Seit Linux 2.6.12 unterstützen NFS\-Clients \fBflock\fP(), indem sie sie mit \fBfcntl\fP(2)\-Byte\-Bereichssperren über die gesamte Datei emulieren. Das bedeutet, dass \fBfcntl\fP(2)\- und \fBflock\fP()\-Sperren über NFS interagieren. Dies bedeutet auch, das zum Setzen einer exklusive Sperre die Datei zum Schreiben geöffnet sein muss. .PP .\" commit 5eebde23223aeb0ad2d9e3be6590ff8bbfab0fc2 Seit Linux 2.6.37 unterstützt der Kernel einen Kompatibilitätsmodus, der \fBflock\fP()\-Sperren (und auch \fBfcntl\fP(2)\-Byte\-Bereichssperren) als lokal behandelt; siehe die Diskussion der Option \fIlocal_lock\fP in \fBnfs\fP(5). .SH ANMERKUNGEN \fBflock\fP() setzt nur empfehlende Sperren, bei geeigneten Berechtigungen für eine Datei kann ein Prozess den Einsatz von \fBflock\fP() ignorieren und E/A auf die Datei durchführen. .PP Die von \fBflock\fP() und \fBfcntl\fP(2) eingerichteten Sperren haben unterschiedliche Semantik in Bezug auf durch \fBfork\fP(2) erzeugte Prozesse und \fBdup\fP(2). Auf Systemen, die \fBflock\fP () mit \fBfcntl\fP(2) implementieren, wird die Semantik von \fBflock\fP() anders sein als die in dieser Handbuchseite beschriebene. .PP .\" Kernel 2.5.21 changed things a little: during lock conversion .\" it is now the highest priority process that will get the lock -- mtk 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 \fBLOCK_NB\fP angegeben wurde, fehlschlägt. (Dies ist die ursprüngliche BSD\-Verhalten und tritt bei vielen anderen Implementierungen auf.) .SH "SIEHE AUCH" \fBflock\fP(1), \fBclose\fP(2), \fBdup\fP(2), \fBexecve\fP(2), \fBfcntl\fP(2), \fBfork\fP(2), \fBopen\fP(2), \fBlockf\fP(3), \fBlslocks\fP(8) .PP \fIDocumentation/filesystems/locks.txt\fP im Linux\-Kernelquellbaum (\fIDocumentation/locks.txt\fP bei älteren Kerneln). .PP .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Dennis Stampfer , Martin Eberhard Schauer , Mario Blättermann und Helge Kreutzmann erstellt. .PP Diese Übersetzung ist Freie Dokumentation; lesen Sie die .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. .PP Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die .MT debian-l10n-german@lists.debian.org Mailingliste der Übersetzer .ME .