Provided by: manpages-de-dev_4.27.0-1_all bug

BEZEICHNUNG

       fcntl - Dateideskriptoren manipulieren

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <fcntl.h>

       int fcntl(int dd, int Akt,  /* arg */ );

BESCHREIBUNG

       fcntl()  führt  eine  der unten beschriebenen Aktionen auf dem offenen Dateideskriptor dd aus. Die Aktion
       wird durch Akt festgelegt.

       fcntl() kann ein optionales drittes Argument akzeptieren. Ob dieses Argument notwendig ist,  ergibt  sich
       durch  Akt.  Der  benötigte  Argumenttyp wird nach jedem Akt-Namen in Klammern angedeutet (in den meisten
       Fällen ist der benötigte Typ int und der Argumenttyp wird mit dem Namen  arg  identifiziert).  Falls  das
       Argument nicht notwendig ist, wird void angegeben.

       Bestimmte   der  unten  aufgeführten  Aktionen  werden  nur  seit  einer  bestimmten  Linux-Kernelversion
       unterstützt. Die  bevorzugte  Methode,  um  herauszufinden,  ob  der  Gastkernel  eine  bestimmte  Aktion
       unterstützt,  ist der Aufruf von fcntl() mit dem gewünschten Wert von Akt und dem anschließenden Test, ob
       der Aufruf mit EINVAL fehlschlug, wodurch angezeigt wird, dass der Kernel diesen Wert nicht unterstützt.

   Duplizieren eines Dateideskriptors
       F_DUPFD (int)
              verdoppelt den Dateideskriptor dd unter Verwendung des Dateideskriptors mit der kleinsten  Nummer,
              die  identisch  zu  oder  größer  als  arg ist. Dies unterscheidet sich von dup2(2), das exakt den
              angegebenen Dateideskriptor verwendet.

              Bei Erfolg wird der neue Dateideskriptor zurückgegeben.

              Lesen Sie dup(2) für weitere Details.

       F_DUPFD_CLOEXEC (int; seit Linux 2.6.24)
              Wie für  F_DUPFD,  setzt  aber  zusätzlich  den  Schalter  »close-on-exec«  für  den  duplizierten
              Dateideskriptor.  Die  Angabe  dieses  Schalters  ermöglicht  es  einem Programm, eine zusätzliche
              fcntl()-F_SETFD-Aktion zu vermeiden, um den Schalter FD_CLOEXEC zu setzen. Für  eine  Erläuterung,
              warum dieser Schalter nützlich ist, lesen Sie die Beschreibung von O_CLOEXEC in open(2).

   Datei-Deskriptor-Schalter
       Die  folgenden  Aktionen  verändern  die einem Dateideskriptor zugeordneten Schalter. Derzeit ist nur ein
       solcher Schalter definiert: FD_CLOEXEC, der »close-on-exec«-Schalter. Falls  das  FD_CLOEXEC-Bit  gesetzt
       ist,  wird  der  Dateideskriptor  automatisch  bei  einem erfolgreichen execve(2) geschlossen. (Falls der
       execve(2) fehlschlägt, bleibt der Dateideskriptor offen.) Falls das Bit  FD_CLOEXEC  nicht  gesetzt  ist,
       wird der Dateideskriptor über ein execve(2) hinweg offen bleiben.

       F_GETFD (void)
              Liefert (als Ergebnis der Funktion) die Dateideskriptorschalter; arg wird ignoriert.

       F_SETFD (int)
              Setzt den Dateideskriptorschalter auf den durch arg angegebenen Wert.

       In   Programmen   mit  mehreren  Threads  ist  die  Verwendung  von  fcntl()  F_SETFD,  um  den  Schalter
       »close-on-exec« zum gleichen Zeitpunkt zu setzen, zu  dem  ein  anderer  Thread  ein  fork(2)  mit  einem
       execve(2)  ausführt, anfällig für einen Ressourcenwettlauf, der unbeabsichtigterweise den Dateideskriptor
       an das Programm, das im Kindprozess  läuft,  durchsickern  lässt.  Siehe  die  Diskussion  des  Schalters
       O_CLOEXEC in open(2) für Details und wie dem Problem abgeholfen werden kann.

   Dateistatusschalter
       Jede  offene  Dateideskription  hat bestimmte zugeordnete Statusschalter, die durch open(2) initialisiert
       und  möglicherweise  durch  fcntl()  verändert  werden.  Duplizierte   Dateideskriptoren   (mit   dup(2),
       fcntl(F_DUPFD),  fork(2) usw. erstellte) beziehen sich auf die gleiche offene Dateideskription und teilen
       sich daher die gleichen Dateistatusschalter.

       Die Dateistatusschalter und deren Bedeutung sind in open(2) beschrieben.

       F_GETFL (void)
              Liefert (als Ergebnis der Funktion) den Dateizugriffsmodus und die Dateistatusschalter;  arg  wird
              ignoriert.

       F_SETFL (int)
              Setzt  die  Dateistatusschalter  auf den durch arg angegebenen Wert. Dateizugriffsmodus (O_RDONLY,
              O_WRONLY, O_RDWR) und Dateierzeugungsschalter (d.h. O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC) werden  in
              arg  ignoriert.  Unter  Linux  kann  diese  Aktion  nur  die Schalter O_APPEND, O_ASYNC, O_DIRECT,
              O_NOATIME und O_NONBLOCK ändern. Es ist nicht möglich, die Schalter O_DSYNC und O_SYNC zu  ändern,
              siehe FEHLER weiter unten.

   Empfohlene Datensatzsperren
       Linux   implementiert  traditionelle  (»Prozess-orientierte«)  UNIX-Datensatz-Sperren,  wie  durch  POSIX
       standardisiert. Für eine Linux-spezifische Alternative mit besserer Semantik  lesen  Sie  die  Diskussion
       über offene Dateideskriptions-Sperren unten.

       F_SETLK,  F_SETLKW  und  F_GETLK werden dazu verwandt, Datensatzsperren (auch bekannt als Byte-Bereichs-,
       Dateisegment- oder Dateiregionsperren) zu erlangen, abzugeben oder auf  deren  Existenz  zu  prüfen.  Das
       dritte  Argument,  lock,  ist  ein Zeiger auf eine Struktur, die mindestens die folgende Felder (in einer
       nicht festgelegten Reihenfolge) enthält:

           struct flock {
               …
               short l_type;    /* Art der Sperre: F_RDLCK,
                                   F_WRLCK, F_UNLCK */
               short l_whence;  /* Wie l_start interpretiert wird:
                                   SEEK_SET, SEEK_CUR, SEEK_END */
               off_t l_start;   /* Anfangsversatz für Sperre */
               off_t l_len;     /* Anzahl von zu sperrenden Bytes */
               pid_t l_pid;     /* PID des Prozesses, der unsere Sperre blockiert
                                   (gesetzt durch F_GETLK und F_OFD_GETLK) */
               …
           };

       Die Felder l_whence, l_start und l_len dieser Struktur legen den Bereich der Bytes, die  gesperrt  werden
       sollen,  fest.  Bytes hinter dem Ende der Datei können gesperrt sein, aber Bytes vor dem Anfang der Datei
       sind es nicht.

       l_start ist der Startversatz für die Sperre und wird relativ zu einem der  folgenden  interpretiert:  Dem
       Anfang  der Datei (falls l_whence SEEK_SET ist), dem aktuellen Dateiversatz (falls l_whence SEEK_CUR ist)
       oder dem Ende der Datei (falls l_whence SEEK_END ist). In den abschließenden  zwei  Fällen  kann  l_start
       eine negative Zahl sein, vorausgesetzt, der Versatz liegt nicht vor dem Anfang der Datei.

       l_len  legt  die  Anzahl  der  zu  sperrenden  Bytes fest. Falls l_len positiv ist, wird der zu sperrende
       Bereich die Bytes l_start bis einschließlich l_start+l_len-1 umfassen. Die Angabe von  0  für  l_len  hat
       eine  besondere  Bedeutung: Alle Bytes beginnend bei l_whence und l_start bis zum Ende der Datei sperren,
       unabhängig davon, wie groß die Datei anwächst.

       POSIX.1-2001 erlaubt (verlangt es aber nicht), dass eine Implementierung einen negativen Wert  für  l_len
       unterstützt. Falls l_len negativ ist, deckt das durch lock beschriebene Intervall die Bytes l_start+l_len
       bis zu einschließlich l_start-1 ab. Dies wird durch Linux seit 2.4.21 und 2.5.49 unterstützt.

       Das  Feld  l_type  kann  dazu verwandt werden, eine Lese- (F_RDLCK) oder Schreibsperre (F_WRLCK) auf eine
       Datei zu setzen. Eine beliebige Anzahl an Prozessen kann eine  Lesesperre  auf  eine  Dateiregion  halten
       (gemeinsame  Sperre),  aber  nur  ein  Prozess  kann  eine  Schreibsperre (exklusive Sperre) halten. Eine
       exklusive Sperre sperrt alle anderen Sperren aus, sowohl exklusive als  auch  gemeinsame.  Ein  einzelner
       Prozess kann nur eine Art von Sperre auf eine Dateiregion halten. Falls eine neue Sperre auf eine bereits
       gesperrte  Region  angewandt  wird, wird die existierende Sperre in den Typ der neuen Sperre umgewandelt.
       (Solche Umwandlungen können das Teilen, Verkleinern, Vereinigen mit bestehenden Sperren beinhalten, falls
       der durch die neue Sperre festgelegte Byte-Bereiche nicht genau mit dem Bereich der bereits existierenden
       Sperre zusammenfällt.)

       F_SETLK (struct flock *)
              Erlangt (wenn l_type F_RDLCK oder F_WRLCK ist) oder gibt eine Sperre (wenn l_type F_UNLCK ist) für
              die durch die Felder l_whence, l_start und l_len von lock festgelegten Bytes ab. Falls durch einen
              anderen Prozess eine im Konflikt stehende Sperre gehalten wird, liefert dieser  Aufruf  -1  zurück
              und  setzt errno auf EACCES oder EAGAIN. (Der in diesem Fall zurückgelieferte Fehler unterscheidet
              sich zwischen Implementierungen, daher verlangt POSIX, dass portable Anwendungen auf beide  Fehler
              prüfen.)

       F_SETLKW (struct flock *)
              Wie für F_SETLK, aber bei Konflikten um eine Sperre auf die Datei wird auf die Freigabe der Sperre
              gewartet.  Falls während des Wartens ein Signal abgefangen wird, dann wird der Aufruf unterbrochen
              und (nachdem der Signalbearbeiter zurückgekehrt ist) sofort zurückgekehrt (mit dem Rückgabewert -1
              und errno auf EINTR gesetzt; siehe signal(7)).

       F_GETLK (struct flock *)
              Als Eingabe zu diesem Aufruf beschreibt lock eine Sperre, die auf  diese  Datei  angewandt  werden
              soll.  Falls  die  Sperre  angewandt  werden  könnte,  setzt fcntl() diese nicht wirklich, sondern
              liefert F_UNLCK in dem Feld  l_type  von  lock  und  lässt  die  anderen  Felder  dieser  Struktur
              unverändert.

              Falls  eine  oder mehrere inkompatible Sperren das Setzen dieser Sperre verhinderten, dann liefert
              fcntl() Details über eine dieser Sperren in den Feldern l_type, l_whence, l_start  und  l_len  von
              lock  zurück.  Falls  die  im  Konflikt  stehende  Sperre eine traditionelle (Prozess-orientierte)
              Datensatzsperre ist, dann wird das Feld l_pid auf die PID des Prozesses gesetzt,  der  die  Sperre
              hält.  Falls  die  in  Konflikt stehende Sperre eine offene Dateideskriptionssperre ist, dann wird
              l_pid auf -1 gesetzt. Beachten Sie,  dass  die  zurückgelieferte  Information  zum  Zeitpunkt  der
              Analyse durch den Aufrufenden bereits veraltet sein kann.

       Um  eine Lesesperre zu setzen, muss dd zum Lesen offen sein. Um eine Schreibsperre zu setzen, muss dd zum
       Schreiben offen sein. Um beide Typen setzen zu können, öffnen Sie eine Datei lese- und schreibbar.

       Wenn Sperren mit F_SETLKW gesetzt werden, erkennt der Kernel Verklemmungen,  bei  denen  zwei  oder  mehr
       Prozesse  ihre  Sperr-Anfragen  gegenseitig  durch  Sperren,  die  von anderen Prozessen gehalten werden,
       blockieren. Nehmen Sie beispielsweise an, Prozess A hält eine Schreibsperre auf Byte 100 einer Datei  und
       Prozess  B  hält eine Schreibsperre auf Byte 200. Falls jeder Prozess dann versucht, mit F_SETLKW die vom
       anderen Prozess bereits gesperrten Bytes zu  sperren,  würden  ohne  Erkennung  von  Verklemmungen  beide
       Prozesse unbegrenzt blockiert bleiben. Wenn der Kernel solche Verklemmungen erkennt, sorgt er dafür, dass
       eine  der  blockierenden Sperranfragen sofort mit dem Fehler EDEADLK fehlschlägt. Eine Anwendung, die auf
       einen solchen Fehler trifft, sollte einige ihrer Sperren freigeben, um anderen Anwendungen das Fortfahren
       zu erlauben,  bevor  sie  erneut  versucht,  die  von  ihr  benötigten  Sperren  zu  erlangen.  Zirkuläre
       Verklemmungen mit mehr als zwei Prozessen werden auch erkannt. Beachten Sie aber, dass es eine Begrenzung
       der Erkennung von Verklemmungen im Kernel gibt; siehe FEHLER.

       Datensatzsperren werden durch ein explizites F_UNLCK entfernt und auch freigegeben, wenn der Prozess sich
       beendet.

       Datensatzsperren  werden  nicht  von  einem durch fork(2) erstellten Kind geerbt, aber über ein execve(2)
       hinweg erhalten.

       Aufgrund  des  durch  die  stdio(3)-Bibliothek  durchgeführten  Pufferns  sollte   die   Verwendung   von
       Datensatzsperren  mit  Routinen  aus diesem Paket vermieden werden; verwenden Sie stattdessen read(2) und
       write(2).

       Die weiter oben beschriebenen Datensatzsperren werden dem Prozess zugeordnet (anders als die weiter unten
       beschriebenen Dateideskriptionssperren). Dies hat einige unglückliche Konsequenzen:

       •  Falls ein Prozess irgendeinen Dateideskriptor mit Bezug zu einer  Datei  schließt,  dann  werden  alle
          Sperren  des  Prozesses  für diese Datei aufgehoben, unabhängig von den Dateideskriptor(en), mit denen
          diese Sperren erworben wurden. Das ist schlecht: Es bedeutet, dass ein Prozess seine Sperren auf  eine
          Datei   wie   /etc/passwd   oder   /etc/mtab   verlieren   kann,   wenn  aus  irgendeinem  Grund  eine
          Bibliotheksfunktion sich entscheidet, die gleiche Datei zu öffnen, zu lesen und zu schließen.

       •  Die Threads in einem Prozess nutzen die Sperren  gemeinsam.  Mit  anderen  Worten,  ein  Programm  mit
          mehreren  Threads  kann  Datensatzsperren  nicht  benutzen, um sicherzustellen, dass die Threads nicht
          simultan auf die gleichen Regionen einer Datei zugreifen.

       Offene Dateideskriptionssperren lösen beide Probleme.

   Offene Dateideskriptionssperren (nicht POSIX)
       Offene Dateideskriptionsperren sind empfohlene Byte-Bereichssperren, deren Funktionsweise in den  meisten
       Aspekten   den  herkömmlichen,  oben  beschriebenen  Datensatzsperren  entspricht.  Dieser  Sperrtyp  ist
       Linux-spezifisch und seit Linux 3.15 verfügbar.  (Es  gibt  einen  Vorschlag  der  Austin-Gruppe,  diesen
       Sperrtyp in die nächste Überarbeitung von POSIX.1 aufzunehmen.) Eine Erklärung offener Dateideskriptionen
       finden Sie in open(2).

       Der   Hauptunterschied   zwischen   den   beiden   Sperrtypen   besteht  darin,  dass  die  herkömmlichen
       Datensatzsperren mit einem Prozess verbunden sind, während Sperren  offener  Dateideskriptionen  mit  der
       offenen  Dateideskription  verbunden  sind,  für  die  sie  erlangt  wurden, ähnlich wie Sperren, die mit
       flock(2) erlangt wurden. Konsequenterweise (und  anders  als  herkömmliche  empfohlene  Datensatzsperren)
       werden  Sperren  offener Dateideskriptionen über fork(2) (und clone(2) mit CLONE_FILES) geerbt und werden
       nur automatisch durch das Schließen der letzten offenen Dateideskription  freigegeben,  statt  bei  jedem
       Schließen der Datei.

       Im  Konflikt  stehende Kombinationen von Sperren (d.h. eine Lese-Sperre und eine Schreib-Sperre oder zwei
       Schreib-Sperren), wobei eine Sperre eine offene Dateideskriptionssperre und die andere eine traditionelle
       Datensatzsperre ist, sind selbst dann im Konflikt,  wenn  sie  vom  gleichen  Prozess  auf  dem  gleichen
       Dateideskriptor aufgenommen wurden.

       Offene Dateideskriptionssperren, die über die gleichen offenen Dateideskriptionen (d.h. über den gleichen
       Dateideskriptor  oder  über  durch fork(2), dup(2), fcntl() F_DUPFD und so weiter erstellte Duplikate des
       Dateideskriptors) gesetzt werden, sind immer kompatibel: Falls auf einen bereits gesperrten Bereich  eine
       neue  Sperre  gesetzt  wird,  wird  die  existierende  Sperre  in den neuen Sperrtyp umgewandelt. (Solche
       Umwandlungen  können  wie  oben  beschrieben  zum  Teilen,  Verkleinern  oder  Verschmelzen   mit   einer
       existierenden Sperre führen.)

       Auf der anderen Seite können offene Dateideskriptionssperren zueinander im Konflikt stehen, wenn sie über
       verschiedene  offene  Dateideskriptionen  erlangt  wurden. Daher können die Threads in einem Programm mit
       mehreren Threads offene Dateideskriptionssperren dazu verwenden, um  den  Zugriff  auf  Dateiregionen  zu
       koordinieren,  indem  jeder Thread sein eigenes open(2) auf der Datei durchführt und die Sperren über den
       entstehenden Dateideskriptor anwendet.

       Wie bei herkömmlichen empfohlenen Sperren ist das dritte Argument für fcntl(), lock, ein Zeiger auf  eine
       flock-Struktur.  Im  Gegensatz  zu herkömmlichen Datensatzsperren muss das Feld l_pid dieser Struktur bei
       Verwendung der unterhalb beschriebener Aktionen auf Null gesetzt werden.

       Die Aktionen für  den  Umgang  mit  offenen  Dateideskriptionssperren  sind  analog  zu  denen,  die  mit
       traditionellen Sperren verwandt werden:

       F_OFD_SETLK (struct flock *)
              Erlangt  eine offene Dateideskriptionssperre (wenn l_type F_RDLCK oder F_WRLCK ist) oder gibt eine
              offene Dateideskriptionssperre frei (wenn l_type F_UNLCK ist), für die Bytes, die durch die Felder
              l_whence, l_start und l_len festgelegt sind. Falls durch einen anderen Prozess  eine  im  Konflikt
              stehende Sperre gehalten wird, liefert der Aufruf -1 zurück und setzt errno auf EAGAIN.

       F_OFD_SETLKW (struct flock *)
              Wie bei F_OFD_SETLK, aber falls eine im Konflikt stehende Sperre auf der Datei gehalten wird, dann
              wird  auf  die  Freigabe  dieser Sperre gewartet. Falls beim Warten ein Signal gefangen wird, dann
              wird  der  Aufruf  unterbrochen  und  (nachdem  der  Signal-Handler  zurückgekehrt   ist)   sofort
              zurückgekehrt (mit einem Rückgabewert -1 und errno auf EINTR gesetzt, siehe signal(7)).

       F_OFD_GETLK (struct flock *)
              Bei  der Eingabe zu diesem Aufruf beschreibt lock eine offene Dateideskriptionssperre, die auf der
              Datei gesetzt werden soll. Falls die  Sperre  gesetzt  werden  könnte,  setzt  sie  fcntl()  nicht
              wirklich,  sondern liefert im Feld l_type von lock F_UNLCK zurück und lässt die anderen Felder der
              Struktur unverändert. Falls eine oder  mehrere  inkompatible  Sperren  das  Setzen  dieser  Sperre
              behinderten,  werden  die  Details  über  eine  dieser  Sperren mittels lock, wie oben für F_GETLK
              beschrieben, zurückgeliefert.

       In der aktuellen  Implementierung  wird  nicht  auf  Verklemmungen  für  offene  Dateideskriptionssperren
       geprüft.  (Dies steht im Gegensatz zu den prozessorientierten Datensatzsperren, bei denen der Kernel eine
       Erkennung von Verklemmungen durchführt.)

   Pflichtsperren
       Warnung: Die Linux-Implementierung der Pflichtsperren ist unzuverlässig.  Siehe  FEHLER  unten.  Aufgrund
       dieser  Fehler  und  der  Tatsache,  dass davon ausgegangen wird, dass diese Funktionalität wenig genutzt
       wird,  sind  die  Pflichtsperren  seit  Linux  4.5  eine  optionale  Funktionalität,   die   durch   eine
       Konfigurationsoption (CONFIG_MANDATORY_FILE_LOCKING) gesteuert werden. In Linux 5.15 und neuer wird diese
       Funktionalität nicht mehr unterstützt.

       Standardmäßig  sind  herkömmliche  (prozessorientierte)  und  Sperren offener Dateideskriptionsdatensätze
       empfohlene Sperren. Empfohlene Sperren werden nicht erzwungen und sind nur  bei  der  Zusammenarbeit  von
       Prozessen nützlich.

       Beide  Sperrtypen  können  auch  verpflichtend  sein.  Verpflichtende  Sperren  werden  für alle Prozesse
       durchgesetzt. Falls ein Prozess einen inkompatiblen Zugriff auf einen Dateibereich versucht (z.B. read(2)
       oder write(2)), der eine inkompatible verpflichtende Sperre hat, dann hängt das Ergebnis davon ab, ob der
       Schalter O_NONBLOCK für seine offene Dateideskription aktiviert ist. Falls der Schalter O_NONBLOCK  nicht
       aktiviert  ist,  wird der Systemaufruf blockiert, bis die Sperre entfernt oder in einen Modus umgewandelt
       wurde, der mit dem Zugriff kompatibel  ist.  Falls  der  Schalter  O_NONBLOCK  aktiviert  ist,  wird  der
       Systemaufruf mit dem Fehler EAGAIN fehlschlagen.

       Um verpflichtende Sperren zu verwenden, müssen verpflichtende Sperren sowohl auf dem Dateisystem, das die
       zu sperrende Datei enthält, aktiviert werden als auch auf der Datei selbst. Verpflichtende Sperren werden
       auf  Dateisystemen  mit  der  Option  »-o  mand«  von mount(8) oder dem Schalter MS_MANDLOCK für mount(2)
       aktiviert. Verpflichtende Sperren werden für eine Datei aktiviert, indem das Ausführrecht für  die  Datei
       entfernt und das »set-group-ID«-Rechte-Bit aktiviert wird (siehe chmod(1) und chmod(2)).

       Verpflichtende  Sperren  werden  nicht  durch POSIX spezifiziert. Einige andere Systeme unterstützen auch
       verpflichtende Sperren, allerdings unterscheiden sich die Details zur Aktivierung zwischen den Systemen.

   Verlorene Sperren
       Wenn eine empfohlene Sperre auf einem Netzwerkdateisystem wie NFS erlangt wird, ist es möglich, dass  die
       Sperre  verloren  geht.  Die  kann  aufgrund  administrativer Aktionen auf dem Server oder aufgrund einer
       Netzwerkeinteilung (d.h. einem Verlust der Netzverbindung mit dem Server) passieren, die so lange dauert,
       dass der Server annimmt, dass der Client nicht mehr funktioniert.

       Wenn das Dateisystem ermittelt, dass eine Sperre verloren gegangen ist, können zukünftige  read(2)-  oder
       write(2)-Anfragen  mit  dem  Fehler  EIO  fehlschlagen.  Dieser  Fehler  wird beibehalten, bis die Sperre
       entfernt oder der Dateideskriptor geschlossen wird. Seit Linux 3.12 passiert  dies  zumindest  auf  NFSv4
       (einschließlich aller Unterversionen).

       Einige  UNIX-Versionen  senden in diesen Fällen ein Signal (SIGLOST). Linux definiert dieses Signal nicht
       und stellt keine asynchrone Benachrichtigung über verlorene Sperren bereit.

   Signale verwalten
       F_GETOWN,  F_SETOWN,  F_GETOWN_EX,  F_SETOWN_EX,  F_GETSIG  und  F_SETSIG  werden  zur   Verwaltung   der
       E/A-Verfügbarkeitssignale verwandt:

       F_GETOWN (void)
              Liefert (als Funktionsergebnis) die Prozess- oder Prozessgruppenkennung zurück, die derzeit SIGIO-
              und  SIGURG-Signale  für  Ereignisse  auf  Dateideskriptor  dd erhält. Prozesskennungen werden als
              positive Werte, Prozessgruppenkennungen als negative Werte zurückgeliefert (siehe aber auch FEHLER
              unten). arg wird ignoriert.

       F_SETOWN (int)
              Setzt die Prozesskennung oder Prozessgruppenkennung, die SIGIO- und SIGURG-Signale für  Ereignisse
              auf  dem  Dateideskriptor dd erhalten wird. Der Zielprozess oder die Zielprozessgruppe wird in arg
              angegeben. Eine Prozesskennung wird als positiver, eine Prozessgruppenkennung wird  als  negativer
              Wert angegeben. Häufig legt sich der aufrufende Prozess als der Eigentümer fest (d.h. arg wird als
              getpid(2) angegeben).

              Neben  dem  Setzen  des  Dateideskriptoreigentümers  muss  auch die Erzeugung von Signalen auf dem
              Dateideskriptor  aktiviert  werden.  Dies  erfolgt  durch  die  Aktion  fcntl()  F_SETFL,  um  den
              Dateistatusschalter  SIGIO zu setzen, immer wenn Ein- oder Ausgabe auf dem Dateideskriptor möglich
              wird. Die Aktion fcntl() F_SETSIG kann zum Erhalt des Empfangs von Signalen neben  SIGIO  verwandt
              werden.

              Senden  von  Signalen  an  den  durch  F_SETOWN festgelegten Prozesseigner (Gruppe) unterliegt den
              gleichen Rechteprüfungen wie sie in kill(2) beschrieben sind, wobei der sendende Prozess derjenige
              ist, der F_SETOWN einsetzt (siehe aber FEHLER unten). Falls diese Rechteprüfung fehlschlägt,  wird
              das Signal ohne Rückmeldung verworfen. Hinweis: Die Aktion F_SETOWN notiert die Berechtigungen des
              Aufrufenden  zum Zeitpunkt des Aufrufs von fcntl() und es sind diese gespeicherten Berechtigungen,
              die für die Rechteüberprüfung verwandt werden.

              Falls der Dateideskriptor dd sich auf ein Socket bezieht, wählt F_SETOWN auch  den  Empfänger  des
              Signals  SIGURG,  das  ausgeliefert wird, wenn Außerbanddaten beim Socket eintreffen, aus. (SIGURG
              wird  in  jeder  Situation  gesandt,  in  der  select(2)  berichtete,   dass   das   Socket   eine
              »außergewöhnliche Bedingung« habe.)

              Das Folgende stimmte in Linux 2.6.x bis einschließlich Linux 2.6.11:

                     Falls  in einem Prozess mit mehreren Threads, der mit einer Threading-Bibliothek läuft, die
                     Thread-Gruppen unterstützt (z.B.  NPTL),  ein  von  Null  verschiedener  Wert  an  F_SETSIG
                     übergeben  wird, dann hat ein an F_SETOWN übergebener positiver Wert eine andere Bedeutung:
                     Statt eine Prozesskennung zu sein, die einen gesamten Prozess identifiziert,  ist  es  eine
                     Thread-Kennung,   die   einen  bestimmten  Prozess  innerhalb  des  Threads  identifiziert.
                     Konsequenterweise kann es notwendig sein, F_SETOWN das Ergebnis  von  gettid(2)  statt  von
                     getpid(2)  zu übergeben, um vernünftige Ergebnisse zu erhalten, wenn F_SETSIG benutzt wird.
                     (In aktuellen Linux-Threading-Implementierungen ist die Kennung des Haupt-Threads identisch
                     zu seiner Prozesskennung. Das bedeutet, dass ein Programm mit nur einem einzigen Thread  in
                     diesem  Szenario genauso gettid(2) oder getpid(2) verwenden kann.) Beachten Sie allerdings,
                     dass die Aussage in diesem Absatz nicht auf das Signal SIGURG für  Außerbanddaten  für  ein
                     Socket  zutrifft:  Dieses  Signal  wird  immer  zu  einem  Prozess oder einer Prozessgruppe
                     gesandt, abhängig vom in F_SETOWN übergebenen Wert.

              Das obige  Verhalten  wurde  in  Linux  2.6.12  versehentlich  deaktiviert  und  wird  nicht  mehr
              wiederhergestellt.  Seit  Linux  2.6.32 verwenden Sie F_SETOWN_EX, um die Signale SIGIO und SIGURG
              auf einen bestimmten Thread anzuwenden.

       F_GETOWN_EX (struct f_owner_ex *) (seit Linux 2.6.32)
              Liefert die aktuellen Eigenschaften des Dateideskriptoreigentümers, wie sie von  einer  vorherigen
              F_SETOWN_EX-Aktion  definiert  wurden,  zurück.  Die Information wird in der Struktur, auf die arg
              zeigt, zurückgeliefert. Sie hat die folgende Form:

                  struct f_owner_ex {
                      int   type;
                      pid_t pid;
                  };

              Das Feld type wird einen der Werte F_OWNER_TID, F_OWNER_PID oder F_OWNER_PGRP enthalten. Das  Feld
              pid  ist eine positive Ganzzahl, die die Thread-Kennung, Prozesskennung oder Prozessgruppenkennung
              darstellt. Siehe F_SETOWN_EX für weitere Details.

       F_SETOWN_EX (struct f_owner_ex *) (seit Linux 2.6.32)
              Diese Aktion  führt  eine  ähnliche  Aufgabe  wie  F_SETOWN  aus.  Sie  erlaubt  dem  Aufrufenden,
              E/A-Verfügbarkeitssignale  zu  einem  bestimmten  Thread,  Prozess  oder  einer  Prozessgruppe  zu
              dirigieren. Der Aufrufende bestimmt das Ziel der Signale mittels arg,  der  ein  Zeiger  auf  eine
              Struktur  f_owner_ex  ist.  Das  Feld  type  hat einen der folgenden Werte, der definiert, wie pid
              interpretiert wird:

              F_OWNER_TID
                     Sendet das Signal an den Thread, dessen Thread-Kennung (der von den Aufrufen clone(2)  oder
                     gettid(2) zurückgelieferte Wert) in pid festgelegt ist.

              F_OWNER_PID
                     Sendet das Signal an den Prozess dessen ID in pid angegeben ist.

              F_OWNER_PGRP
                     Sendet das Signal zu der Prozessgruppe, deren Kennung in pid festgelegt ist. (Beachten Sie,
                     dass anders als bei F_SETOWN, eine Prozessgruppenkennung hier als positiver Wert festgelegt
                     ist.)

       F_GETSIG (void)
              Liefert  (als  Funktionsergebnis)  das  Signal  zurück,  das gesendet wird, wenn Ein- oder Ausgabe
              möglich  wird.  Ein  Wert  von  Null  bedeutet,  dass  SIGIO  gesandt  wird.  Jeder  andere   Wert
              (einschließlich  SIGIO)  ist  stattdessen  das  gesandt  Signal.  In  diesem Fall sind zusätzliche
              Informationen im Signal-Handler verfügbar, falls er mit SA_SIGINFO  installiert  wurde.  arg  wird
              ignoriert.

       F_SETSIG (int)
              Setzt  das  gesandte Signal, wenn Ein- oder Ausgabe möglich wird, auf den in arg angegebenen Wert.
              Ein Wert von Null bedeutet, das Vorgabesignal SIGIO zu senden. Jeder andere  Wert  (einschließlich
              SIGIO) ist das stattdessen zu sendende Signal und in diesem Fall sind zusätzliche Informationen im
              Signal-Handler verfügbar, falls dieser mit SA_SIGINFO installiert wurde.

              Durch  Verwendung von F_SETSIG mit einem von Null verschiedenen Wert und Setzen von SA_SIGINFO für
              den Signal-Handler (siehe sigaction(2)) werden  Zusatzinformationen  über  E/A-Ereignisse  an  den
              Handler  in  einer  Struktur  siginfo_t übergeben. Falls das Feld si_code anzeigt, dass die Quelle
              SI_SIGIO ist, gibt das Feld si_fd den mit diesem  Ereignis  korrelierten  Dateideskriptor  zurück.
              Andernfalls  gibt  es  keine  Anzeichen, welche Dateideskriptoren wartend sind und Sie sollten die
              normalen Mechanismen (select(2), poll(2), read(2) mit gesetztem  O_NONBLOCK  usw.)  verwenden,  um
              herauszufinden, welche Dateideskriptoren für E/A verfügbar sind.

              Beachten  Sie,  dass der in si_fd bereitgestellte Dateideskriptor derjenige ist, der in der Aktion
              F_SETSIG  festgelegt  wurde.  Dies  kann  zu  ungewöhnlichen   Grenzfällen   führen.   Falls   der
              Dateideskriptor  dupliziert  wird  (dup(2)  oder  ähnlich)  und  der ursprüngliche Dateideskriptor
              geschlossen wird, dann werden E/A-Ereignisse weiterhin generiert aber  das  Feld  si_fd  wird  die
              Anzahl der jetzt geschlossenen Dateideskriptoren enthalten.

              Durch  Auswahl  von  Echtzeitsignalen  (Wert  >=  SIGRTMIN),  können  mehrere E/A-Ereignisse unter
              Verwendung der gleichen Signalnummer in  eine  Warteschlange  eingereiht  werden.  (Einreihung  in
              Warteschlangen   hängt   vom   verfügbaren  Speicher  ab).  Falls  wie  oben  SA_SIGINFO  für  den
              Signal-Handler gesetzt ist, sind zusätzliche Informationen verfügbar.

              Beachten Sie, dass Linux eine Begrenzung für die Anzahl  der  Echtzeitsignale  erzwingt,  die  für
              einen  Prozess  in  eine Warteschlange eingereiht werden (siehe getrlimit(2) und signal(7)). Falls
              diese Begrenzung erreicht ist, kehrt der Kernel zur  Auslieferung  von  SIGIO  zurück  und  dieses
              Signal wird dem gesamten Prozess statt nur einem bestimmten Thread ausgeliefert.

       Mittels  dieser  Mechanismen  kann ein Programm eine komplett asynchrone E/A implementieren, ohne (in den
       meisten Fällen) select(2) oder poll(2) zu verwenden.

       Die Verwendung von O_ASYNC ist für BSD  und  Linux  spezifisch.  Die  einzige  in  POSIX.1  spezifizierte
       Verwendung  von  F_GETOWN  and  F_SETOWN  ist  im  Zusammenhang mit der Verwendung des Signals SIGURG bei
       Sockets. (POSIX spezifiziert das Signal SIGIO nicht). POSIX enthält asynchrone E/A und auch die  Struktur
       aio_sigevent,  um  ähnliche Dinge zu erreichen; diese sind unter Linux auch als Teil der GNU-C-Bibliothek
       (Glibc) verfügbar.

   Ausleihe
       F_SETLEASE und F_GETLEASE (Linux 2.4 und neuer) werden dazu verwandt, für  die  offene  Dateideskription,
       auf  den der Dateideskriptor dd verweist, eine Ausleihe (»lease«) zu etablieren und die aktuelle Ausleihe
       zu ermitteln. Ein Datei-Ausleihe stellt einen Mechanismus bereit, durch den ein Prozess, der die Ausleihe
       hält (der »Ausleiher«) über die Auslieferung eines Signals benachrichtigt wird,  wenn  ein  Prozess  (der
       »Ausleihe-Brecher«)  versucht,  die  von  diesem Dateideskriptor referenzierte Datei mit open(2) zu öffen
       oder mit truncate(2) zu verkleinern/vergrößern.

       F_SETLEASE (int)
              Setzt oder entfernt eine Datei-Ausleihe,  abhängig  davon,  welcher  der  folgenden  Wert  in  der
              Ganzzahl arg angegeben ist:

              F_RDLCK
                     Nimmt  eine  Lese-Ausleihe  heraus. Dies führt dazu, dass der aufrufende Prozess informiert
                     wird, wenn die Datei zum Schreiben geöffnet oder  abgeschnitten  wird.  Eine  Lese-Ausleihe
                     kann nur auf einen Dateideskriptor gelegt werden, der nur-lesbar geöffnet ist.

              F_WRLCK
                     Nimmt  eine  Schreibe-Ausleihe  heraus.  Dies  führt  dazu,  dass  der  aufrufende  Prozess
                     informiert wird, wenn die Datei zum Lesen oder Schreiben geöffnet oder abgeschnitten  wird.
                     Eine  Schreibe-Ausleihe  kann  nur  auf  eine  Datei  gelegt werden, falls es keine anderen
                     offenen Dateideskriptoren für diese Datei gibt.

              F_UNLCK
                     Unsere Ausleihe von einer Datei entfernen.

       Ausleihen sind  einem  offenen  Dateideskriptor  zugeordnet  (siehe  open(2)).  Das  bedeutet,  dass  ein
       duplizierter  Dateideskriptor  (zum  Beispiel  durch  fork(2)  oder dup(2) erstellt) sich auf die gleiche
       Ausleihe bezieht und dass diese Ausleihe durch  jeden  dieser  Deskriptoren  verändert  oder  freigegeben
       werden  kann.  Desweiteren  werden  Ausleihen  durch  eine  explizite  Aktion  F_UNLCK  auf  einem dieser
       duplizierten Dateideskriptoren freigegeben oder wenn alle solchen Dateideskriptoren geschlossen wurden.

       Ausleihen dürfen nur für reguläre Dateien herausgenommen werden. Ein nicht  privilegierter  Prozess  darf
       eine  Ausleihe nur für Dateien herausnehmen, deren UID (Eigentümer) auf die Dateisystem-UID des Prozesses
       passt. Ein Prozess mit der Capability CAP_LEASE darf Ausleihen für beliebige Dateien herausnehmen.

       F_GETLEASE (void)
              Zeigt den Typ der Ausleihe, der dem Dateideskriptor dd zugeordnet ist, an, indem entweder F_RDLCK,
              F_WRLCK oder F_UNLCK zurückgeliefert wird, das respektive eine Lese-, Schreib- oder keine Ausleihe
              anzeigt. arg wird ignoriert.

       Wenn ein Prozess (der »Ausleihe-Brecher«) ein open(2) oder truncate(2) durchführt, der mit einer  mittels
       F_SETLEASE  etablierten  Ausleihe in Konflikt steht, wird der Systemaufruf durch den Kernel blockiert und
       der Kernel informiert den Ausleihenden, indem  er  ihm  ein  Signal  (standardmäßig  SIGIO)  sendet.  Der
       Ausleihende  sollte  reagieren,  indem er alle notwendigen Aufräumarbeiten durchführt, um den Zugriff des
       anderen Prozesses auf die Datei vorzubereiten (z.B. das Rausschreiben von zwischengespeicherten Puffern).
       Danach sollte er entweder seine Ausleihe entfernen oder runterstufen. Eine Ausleihe wird durch Ausführung
       der Aktion F_SETLEASE mit der Angabe von arg als F_UNLCK entfernt. Falls  der  Ausleihende  derzeit  eine
       Schreib-Ausleihe  auf  die  Datei hält und der Ausleih-Brecher die Datei zum Lesen öffnet, dann reicht es
       aus, wenn der Ausleihende seine  Ausleihe  auf  eine  Lese-Ausleihe  herunterstuft.  Dies  erfolgt  durch
       Ausführung der Aktion F_SETLEASE mit der Angabe von arg als F_RDLCK.

       Falls  der  Ausleihende  nicht  innerhalb  der  in  /proc/sys/fs/lease-break-time festgelegten Anzahl von
       Sekunden seine Ausleihe herunterstuft oder entfernt, entfernt der Kernel die  Ausleihe  des  Ausleihenden
       zwangsweise oder stuft sie zwangsweise herunter.

       Sobald  ein  Ausleih-Brechen  eingeleitet wurde, liefert F_GETLEASE den Ziel-Ausleihtyp (entweder F_RDLCK
       oder F_UNLCK, abhängig davon, was zum  Ausleih-Brecher  kompatibel  wäre)  zurück,  bis  der  Ausleihende
       freiwillig  seine  Ausleihe herunterstuft oder entfernt oder der Kernel dies zwangsweise tut, nachdem der
       Ausleih-Brech-Timer abgelaufen ist.

       Sobald die Ausleihe freiwillig oder  zwangsweise  entfernt  oder  heruntergestuft  wurde  und  unter  der
       Annahme,  dass  der  Ausleih-Brecher  nicht  den  Systemaufruf  entblockiert  hat, erlaubt der Kernel dem
       Systemaufruf des Ausleih-Brechers fortzufahren.

       Falls das vom Ausleih-Brecher blockierte open(2) oder truncate(2) durch einen Signal-Handler unterbrochen
       wird, schlägt der Systemaufruf mit dem Fehler EINTR fehl, aber die anderen Schritte erfolgen dennoch  wie
       oben  beschrieben.  Falls  der  Ausleih-Brecher durch ein Signal getötet wird, während er in open(2) oder
       truncate(2) blockiert ist, erfolgen  die  anderen  Schritte  dennoch  wie  oben  beschrieben.  Falls  der
       Ausleih-Brecher  den Schalter O_NONBLOCK beim Aufruf von open(2) angegeben hat, schlägt der Aufruf sofort
       mit dem Fehler EWOULDBLOCK fehl, aber die anderen Schritte erfolgen dennoch wie oben beschrieben.

       Standardmäßig wird das Signal SIGIO zur Information des Ausleihenden verwandt, dies  kann  aber  mit  der
       Aktion F_SETSIG von fcntl() geändert werden. Falls eine Aktion F_SETSIG ausgeführt wird (selbst eine, die
       SIGIO  festlegt)  und  der  Singal-Handler mittels SA_SIGINFO etabliert wurde, dann wird der Handler eine
       Struktur siginfo_t als sein zweites Argument erhalten und das  Feld  si_fd  dieses  Argumentes  wird  den
       Dateideskriptor der Datei mit der Ausleihe, auf die ein anderer Prozess zugegriffen hat, enthalten. (Dies
       ist nützlich, falls der Aufrufende Ausleihen für mehrere Dateien hält.)

   Datei- und Verzeichnis-Änderungsbenachrichtigung (dnotify)
       F_NOTIFY (int)
              (Seit  Linux  2.4)  Stellt  Benachrichtigungen bereit, wenn das durch dd referenzierte Verzeichnis
              oder eine der darin enthaltenen Dateien geändert wird.  Die  Ereignisse,  für  die  benachrichtigt
              wird,  werden in arg angegeben. Dies ist eine Bitmaske, in der mittels ODER eines oder mehrere der
              folgenden Bits festgelegt sind:

              DN_ACCESS
                     Ein Dateizugriff erfolgte (read(2), pread(2), readv(2) und ähnliche).
              DN_MODIFY
                     Eine Datei wurde verändert (write(2), pwrite(2), writev(2), truncate(2),  ftruncate(2)  und
                     ähnliche).
              DN_CREATE
                     Eine  Datei  wurde  erstellt  (open(2),  creat(2), mknod(2), mkdir(2), link(2), symlink(2),
                     rename(2) in dieses Verzeichnis).
              DN_DELETE
                     Der Link auf eine Datei wurde entfernt (unlink(2), rename(2) in  ein  anderes  Verzeichnis,
                     rmdir(2)).
              DN_RENAME
                     Eine Datei wurde innerhalb dieses Verzeichnis umbenannt (rename(2)).
              DN_ATTRIB
                     Die  Attribute  einer Datei wurden geändert (chown(2), chmod(2), utime(2), utimensat(2) und
                     ähnliche).

              (Um diese Definitionen zu erhalten, muss das Feature-Test-Makro  _GNU_SOURCE  vor  der  Einbindung
              irgendeiner Header-Datei definiert werden.)

              Verzeichnisbenachrichtigungen  sind  normalerweise  »einmalig«  und die Anwendung muss sich erneut
              registrieren, um weitere Benachrichtigungen zu  erhalten.  Wird  alternativ  DN_MULTISHOT  in  arg
              aufgenommen, bleiben die Benachrichtigungen aktiv, bis sie explizit entfernt werden.

              Eine  Reihe  von  F_NOTIFY-Anfragen  ist kumulativ, bei der die Ereignisse in arg zu der Menge der
              bereits  beobachteten  hinzugefügt  werden.  Um  Benachrichtigungen   für   alle   Ereignisse   zu
              deaktivieren, führen Sie einen Aufruf F_NOTIFY mit arg als 0 durch.

              Benachrichtigungen  erfolgen über die Zustellung eines Signals. Das Standardsignal ist SIGIO, dies
              kann aber mittels der Aktion F_SETSIG von fcntl() geändert werden. (Beachten Sie, dass SIGIO eines
              der nichtwarteschlangenfähigen Standardsignale ist; wird auf  Echtzeitsignale  umgestellt,  können
              mehrere  Benachrichtigungen  für  den  Prozess in die Warteschlange gestellt werden). Im letzteren
              Falle erhält der Signal-Handler eine Struktur siginfo_t als zweites Argument (falls  der  Hanndler
              mittels   SA_SIGINFO   etabliert   wurde)  und  das  Feld  si_fd  dieser  Struktur  enthält  einen
              Dateideskriptor, der  die  Benachrichtigung  erstellte  (nützlich,  falls  Benachrichtigungen  für
              mehrere Verzeichnisse eingerichtet werden).

              Insbesondere   bei   der   Verwendung   von   DN_MULTISHOT   sollte  ein  Echtzeitsignal  für  die
              Benachrichtigung  verwandt  werden,  so  dass  mehrere  Benachrichtigungen  in  die  Warteschlange
              aufgenommen werden können.

              HINWEIS:  Neue  Anwendungen  sollten  die  Schnittstelle  inotify  (verfügbar  seit  Linux 2.6.13)
              verwenden, die eine deutlich überlegene Schnittstelle zur Ermittlung von  Benachrichtigungen  über
              Dateisystemereignisse bietet. Siehe inotify(7).

   Ändern der Kapazität einer Pipe
       F_SETPIPE_SZ (int; seit Linux 2.6.35)
              Ändert   die   Kapazität   der   durch  dd  referenzierten  Pipe  auf  mindestens  arg  Byte.  Ein
              unprivilegierter Prozess kann die Pipe-Kapazität auf jeden Wert zwischen der Systemseitengröße und
              der durch /proc/sys/fs/pipe-max-size (siehe proc(5)) definierten Grenze anpassen.  Wird  versucht,
              die  Pipe-Kapazität  unter  die  Seitengröße  zu  setzen, dann wird diese ohne Rückmeldung auf die
              Seitengröße gerundet. Versucht ein  unprivilegierter  Prozess,  die  Pipe-Kapazität  über  die  in
              /proc/sys/fs/pipe-max-size  definierte  Grenze  zu  setzen,  führt  dies  zu dem Fehler EPERM; ein
              privilegierter Prozess (CAP_SYS_RESOURCE) kann die Grenze außer Kraft setzen.

              Beim Reservieren des Puffers für  die  Pipe  darf  der  Kernel  eine  größere  Kapazität  als  arg
              verwenden,  falls  das  für die Implementierung passend ist. (In der aktuellen Implementierung ist
              die Allokation die nächst-größere Zweierpotenz des Vielfachen der  Seitengröße  der  angeforderten
              Größe.)   Die   tatsächliche   gesetzte  Kapazität  (in  Byte)  wird  als  Ergebnis  der  Funktion
              zurückgeliefert.

              Wird versucht, die Pipe-Kapazität auf einen Wert zu  setzen,  der  kleiner  als  der  derzeit  zum
              Speichern von Daten verwandte Pufferbereich ist, dann wird der Fehler EBUSY erzeugt.

              Beachten Sie, dass aufgrund der Art, wie die Seiten des Pipe-Puffers eingesetzt werden, wenn Daten
              in  die  Pipe  geschrieben werden, die Anzahl der Bytes geringer als die nominale Größe sein kann,
              abhängig von der Größe der Schreibvorgänge.

       F_GETPIPE_SZ (void; seit Linux 2.6.35)
              Liefert (als Ergebnis der Funktion) die Kapazität der durch dd referenzierten Pipe zurück.

   Versiegelung von Dateien
       Dateisiegel begrenzen die Menge der erlaubten Aktionen für eine bestimmte Datei. Für jedes auf eine Datei
       angebrachte Siegel wird von jetzt an eine bestimmte Gruppe an Aktionen auf dieser Datei  mit  dem  Fehler
       EPERM  fehlschlagen.  Die Datei wird als versiegelt bezeichnet. Die Vorgabemenge der Siegel hängt von der
       Art der unterliegenden Datei und dem Dateisystem ab. Für einen Überblick  über  Dateiversiegelung,  einer
       Diskussion ihres Zwecks und Code-Beispiele siehe memfd_create(2).

       Derzeit  können  Dateisiegel  nur  auf durch memfd_create(2) zurückgelieferte Dateideskriptoren angewandt
       werden (falls MFD_ALLOW_SEALING eingesetzt wurde). Auf anderen Dateisystemen werden alle fcntl()-Aktionen
       zur Versiegelung EINVAL zurückliefern.

       Siegel sind eine Eigenschaft eines Inodes. Daher verfügen alle offenen  Dateideskriptoren,  die  auf  den
       gleichen Inode verweisen, über die gleiche Gruppe an Siegeln. Desweiteren können Siegel nie entfernt, nur
       hinzugefügt werden.

       F_ADD_SEALS (int; seit Linux 3.17)
              Fügt die im Bitmasken-Argument arg übergebenen Siegel zu der Gruppe der Siegel des Inodes, der vom
              Dateideskriptor  dd  referenziert  wird,  hinzu.  Siegel können nicht mehr entfernt werden. Sobald
              dieser Aufruf gelingt, werden die Siegel sofort vom  Kernel  durchgesetzt.  Falls  die  derzeitige
              Gruppe  der  Siegel  F_SEAL_SEAL  enthält  (siehe  unten)  wird dieser Aufruf mit EPERM abgelehnt.
              Hinzufügen eines bereits gesetzten Siegels ist eine Nullaktion, falls  F_SEAL_SEAL  nicht  bereits
              gesetzt ist. Um ein Siegel zu setzen, muss der Dateideskriptor dd schreibbar sein.

       F_GET_SEALS (void; seit Linux 3.17)
              Liefert  (als  Funktionsergebnis) die aktuelle Menge der Siegel des durch dd referenzierten Inodes
              zurück. Falls keine Siegel gesetzt sind, wird 0  zurückgeliefert.  Falls  die  Datei  Versiegelung
              nicht unterstützt, wird -1 zurückgeliefert und errno auf EINVAL gesetzt.

       Die folgenden Versiegelungen sind verfügbar:

       F_SEAL_SEAL
              Falls  dieses Siegel gesetzt ist, wird jeder zukünftige Aufruf von fcntl() mit F_ADD_SEALS mit dem
              Fehler EPERM fehlschlagen. Daher verhindert dieses Siegel jede Änderung an der Siegelmenge selbst.
              Falls die ursprüngliche Siegelmenge einer Datei F_SEAL_SEAL  enthält,  dann  führt  dies  effektiv
              dazu, dass die Siegelmenge konstant und gesperrt ist.

       F_SEAL_SHRINK
              Falls  dieses  Siegel gesetzt ist, kann die in Frage kommende Datei nicht verkleinert werden. Dies
              betrifft open(2) mit dem Schalter  O_TRUNC  sowie  truncate(2)  und  ftruncate(2).  Diese  Aufrufe
              schlagen  mit  EPERM  fehl,  falls  Sie  versuchen,  die  in  Frage kommende Datei zu verkleinern.
              Vergrößern der Datei ist weiterhin möglich.

       F_SEAL_GROW
              Falls dieses Siegel gesetzt ist, kann die in Frage kommende Datei nicht  vergrößert  werden.  Dies
              betrifft  write(2)  über  das  Ende  der Datei hinaus, truncate(2), ftruncate(2) und fallocate(2).
              Diese Aufrufe schlagen mit EPERM fehl, falls Sie versuchen, diese  zum  Vergrößern  der  Datei  zu
              verwenden.  Falls  Sie die Dateigröße beibehalten oder verkleinern, werden diese Aufrufe weiterhin
              wie erwartet funktionieren.

       F_SEAL_WRITE
              Falls dieses Siegel gesetzt ist, können Sie den Inhalt der Datei nicht  verändern.  Beachten  Sie,
              dass  das Verkleinern oder Vergrößern der Größe der Datei weiterhin möglich und erlaubt ist. Daher
              wird dieses Siegel normalerweise zusammen mit einem der anderen  Siegel  verwandt.  Dieses  Siegel
              betrifft  write(2)  und  fallocate(2) (nur in Zusammenhang mit dem Schalter FALLOC_FL_PUNCH_HOLE).
              Diese Aufrufe werden mit EPERM fehlschlagen, falls dieses Siegel gesetzt ist. Desweiteren wird das
              Erstellen von gemeinsam benutzten  schreibbaren  Speicher-Mappings  per  mmap(2)  auch  mit  EPERM
              fehlschlagen.

              Die  Verwendung  der  Aktion  F_ADD_SEALS zum Setzen von F_SEAL_WRITE wird mit EBUSY fehlschlagen,
              falls  irgendeine  gemeinsam  benutzbares  schreibbares  Speicher-Mappings  existiert.   Derartige
              Mappings  müssen  vor  dem  Hinzufügen  dieses  Siegels  aufgehoben  werden. Weiterhin werden alle
              ausstehenden  Schreibvorgänge  verworfen,   falls   irgendwelche   asynchronen   E/A-Transaktionen
              (io_submit(2)) auf die Datei ausstehen.

       F_SEAL_FUTURE_WRITE (seit Linux 5.1)
              Die  Wirkung  dieses Siegels ist ähnlich zu F_SEAL_WRITE, aber der Inhalt der Datei kann weiterhin
              mittels gemeinsamen schreibbaren Mappings,  die  vor  dem  Setzen  des  Siegels  erstellt  wurden,
              verändert  werden.  Jeder Versuch, ein neues schreibbares Mapping auf der Datei mittels mmap(2) zu
              erstellen, wird mit EPERM fehlschlagen. Entsprechend wird ein Versuch, in die Datei  mit  write(2)
              zu schreiben, mit EPERM fehlschlagen.

              Durch  Einsatz  dieses  Siegels  kann ein Prozess einen Speicherpuffer erstellen, den es weiterhin
              verändern kann und der gleichzeitig von anderen Prozessen »nur lesend« mitgenutzt werden kann.

   Datei Lese-/Schreibehinweise
       Der  Kernel  kann  mit  Schreib-Lebenszeithinweisen  über   die   erwartete   relative   Lebenszeit   von
       Schreibaktionen  an  einer  benannten  Inode  oder über eine bestimmte offene Dateideskription informiert
       werden (Siehe open(2) für eine Erläuterung von offenen Dateideskriptoren.). In  diesem  Kontext  bedeutet
       der Ausdruck »Schreib-Lebenszeit«, die erwartete Zeit, die die Daten auf dem Medium verbleiben, bevor sie
       überschrieben oder gelöscht werden.

       Eine  Anwendung  darf die unten angegebenen verschiedenen Hinweisewerte verwenden, um die Schreibaktionen
       in verschiedene Schreibklassen zu trennen, so  dass  mehrere  Benutzer  oder  Anwendungen,  die  mit  dem
       gleichen  Speicher-Backend  arbeiten,  ihre  E/A-Muster  in einer konsistenten Art zusammenfassen können.
       Allerdings implizieren diese Schalter keine funktionalen Semantiken und verschiedene  E/A-Klassen  können
       die  Schreib-Lebenszeithinweise  in  beliebigen  Arten benutzen, so lange die Hinweise konsistent benutzt
       werden.

       Die folgenden Aktionen können auf den Dateideskriptor dd angewandt werden:

       F_GET_RW_HINT (uint64_t *; seit Linux 4.13)
              Liefert den Wert des Lese-/Schreibhinweises, der der durch dd referenzierten unterliegenden  Inode
              zugeordnet ist.

       F_SET_RW_HINT (uint64_t *; seit Linux 4.13)
              Setzt  den  Wert  des Lese-/Schreibhinweises, der der durch dd referenzierten unterliegenden Inode
              zugeordnet ist. Dieser Hinweis verbleibt, bis er entweder explizit geändert oder das unterliegende
              Dateisystem ausgehängt wird.

       F_GET_FILE_RW_HINT (uint64_t *; seit Linux 4.13)
              Liefert  den  Wert  des  Lese-/Schreibhinweises,  der  der   durch   dd   referenzierten   offenen
              Dateideskription zugeordnet ist.

       F_SET_FILE_RW_HINT (uint64_t *; seit Linux 4.13)
              Setzt   den   Wert   des   Lese-/Schreibhinweises,   der   der  durch  dd  referenzierten  offenen
              Dateideskription zugeordnet ist.

       Falls einer offenen Dateideskription noch kein Lese-/Schreibhinweis zugeordnet wurde, dann soll  der  der
       Inode zugeordnete Wert verwandt werden, falls vorhanden.

       Die folgenden Lese-/Schreibhinweise sind seit Linux 4.13 gültig:

       RWH_WRITE_LIFE_NOT_SET
              Es  wurde kein spezieller Hinweis gesetzt. Dies ist der Vorgabewert.

       RWH_WRITE_LIFE_NONE
              Kein spezielle Schreib-Lebenszeit ist dieser Datei oder diesem Inode zugeordnet.

       RWH_WRITE_LIFE_SHORT
              Es  wird  erwartet,  dass  Daten,  die  in  diese  Inode  oder über diesen offenen Dateideskriptor
              geschrieben werden, eine kurze Lebenszeit haben werden.

       RWH_WRITE_LIFE_MEDIUM
              Es wird erwartet, dass Daten,  die  in  diese  Inode  oder  über  diesen  offenen  Dateideskriptor
              geschrieben  werden,  eine  längere Lebenszeit als Daten, die mit RWH_WRITE_LIFE_SHORT geschrieben
              wurden, haben werden.

       RWH_WRITE_LIFE_LONG
              Es wird erwartet, dass Daten,  die  in  diese  Inode  oder  über  diesen  offenen  Dateideskriptor
              geschrieben  werden,  eine längere Lebenszeit als Daten, die mit RWH_WRITE_LIFE_MEDIUM geschrieben
              wurden, haben werden.

       RWH_WRITE_LIFE_EXTREME
              Es wird erwartet, dass Daten,  die  in  diese  Inode  oder  über  diesen  offenen  Dateideskriptor
              geschrieben  werden,  eine  längere  Lebenszeit als Daten, die mit RWH_WRITE_LIFE_LONG geschrieben
              wurden, haben werden.

       Alle schreibspezifischen Hinweise sind relativ zueinander und ihnen sollte  keine  individuelle  absolute
       Bedeutung beigemessen werden.

RÜCKGABEWERT

       Für einen erfolgreichen Aufruf hängt der Rückgabewert von der Aktion ab:

       F_DUPFD
              Der neue Dateideskriptor.

       F_GETFD
              Wert des File-Deskriptor-Schalters.

       F_GETFL
              Wert der Dateistatusschalter.

       F_GETLEASE
              Art der Ausleihe, die auf dem Dateideskriptor gehalten wird.

       F_GETOWN
              Wert des Dateideskriptor-Eigentümers.

       F_GETSIG
              Wert  des  Signals,  wenn  Lesen  oder  Schreiben  möglich  wird,  oder  Null  für  traditionelles
              SIGIO-Verhalten.

       F_GETPIPE_SZ
       F_SETPIPE_SZ
              Die Kapazität der Pipe.

       F_GET_SEALS
              Eine Bitmaske, die die Siegel identifiziert, die für den durch  dd  referenzierten  Inode  gesetzt
              wurden.

       Alle anderen Aktionen
              Null

       Bei einem Fehler wird -1 zurückgegeben und errno wird gesetzt, um den Fehler anzuzeigen.

FEHLER

       EACCES oder EAGAIN
              Aktion wird durch von anderen Prozessen gehaltene Sperren verhindert.

       EAGAIN Die Aktion ist verboten, da die Datei durch einen anderen Prozess in den Speicher gemappt wurde.

       EBADF  dd ist kein offener Dateideskriptor.

       EBADF  Akt  ist  F_SETLK  oder  F_SETLKW  und  der Öffnungsmodus des Dateideskriptors passt nicht auf die
              angeforderte Art der Sperre.

       EBUSY  Akt ist F_SETPIPE_SZ und die in arg angegebene neue Kapazität der Pipe ist kleiner als  die  Größe
              des derzeit zur Speicherung von Daten in der Pipe verwandten Pufferspeichers.

       EBUSY  Akt  ist  F_ADD_SEALS,  arg  enthält F_SEAL_WRITE und es gibt ein schreibbares gemeinsam benutztes
              Mapping der Datei, auf das dd verweist.

       EDEADLK
              Es wurde erkannt, dass die angegebene Aktion F_SETLKW zu einer Verklemmung führen würde.

       EFAULT lock befindet sich außerhalb Ihres adressierbaren Adressraums.

       EINTR  Akt ist F_SETLKW oder F_OFD_SETLKW und die Aktion  wurde  durch  ein  Signal  unterbrochen;  siehe
              signal(7).

       EINTR  Akt  ist  F_GETLK,  F_SETLK,  F_OFD_GETLK  oder  F_OFD_SETLK und die Aktion wurde durch ein Signal
              unterbrochen, bevor die Sperre geprüft oder erworben werden konnte. Passiert am wahrscheinlichsten
              beim Sperren von Dateien in der Ferne (d.h. Sperren über  NFS),  kann  aber  manchmal  auch  lokal
              auftreten.

       EINVAL Der in Akt angegebene Wert wird von diesem Kernel nicht erkannt.

       EINVAL Akt ist F_ADD_SEALS und arg enthält ein nicht erkanntes Versiegelungs-Bit.

       EINVAL Akt  ist  F_ADD_SEALS  oder F_GET_SEALS und das Dateisystem, das den durch dd referenzierten Inode
              enthält, unterstützt kein Versiegeln.

       EINVAL Akt ist F_DUPFD und arg ist negativ oder ist größer als der  maximal  zulässige  Wert  (siehe  die
              Diskussion von RLIMIT_NOFILE in getrlimit(2)).

       EINVAL Akt ist F_SETSIG und arg ist keine erlaubbare Signalnummer.

       EINVAL Akt ist F_OFD_SETLK, F_OFD_SETLKW oder F_OFD_GETLK und l_pid wurde nicht als Null angegeben.

       EMFILE Akt  ist  F_DUPFD  und die Beschränkung pro Prozess für die Anzahl offener Dateideskriptoren wurde
              erreicht.

       ENOLCK Zu viele Segment-Sperren offen, die Sperr-Tabelle ist voll oder ein Sperrprotokoll aus  der  Ferne
              schlug fehl (z.B. Sperren über NFS).

       ENOTDIR
              F_NOTIFY wurde in Akt angegeben, aber dd zeigt nicht auf ein Verzeichnis.

       EPERM  Akt  ist  F_SETPIPE_SZ  und die weiche oder harte Benutzer-Pipe-Beschränkung wurde erreicht; siehe
              pipe(7).

       EPERM  Es wurde versucht, den Schalter O_APPEND auf einer Datei zurückzusetzen, bei der das Attribut »nur
              anhängen« gesetzt ist.

       EPERM  Akt war F_ADD_SEALS aber dd war nicht zum Schreiben offen oder die aktuelle Menge der  Siegel  der
              Datei enthält bereits F_SEAL_SEAL.

STANDARDS

       POSIX.1-2008.

       F_GETOWN_EX,  F_SETOWN_EX,  F_SETPIPE_SZ,  F_GETPIPE_SZ,  F_GETSIG,  F_SETSIG,  F_NOTIFY,  F_GETLEASE und
       F_SETLEASE sind Linux-spezifisch. (Definieren  Sie  das  Makro  _GNU_SOURCE,  um  diese  Definitionen  zu
       erhalten.)

       F_OFD_SETLK,  F_OFD_SETLKW  und F_OFD_GETLK sind Linux-spezifisch (und _GNU_SOURCE muss definiert werden,
       um ihre Definitionen zu erhalten). Es wird aber daran gearbeitet, dass sie in der  nächsten  Version  von
       POSIX.1 enthalten sind.

       F_ADD_SEALS und F_GET_SEALS sind Linux-spezifisch.

GESCHICHTE

       SVr4, 4.3BSD, POSIX.1-2001.

       Nur  die  Aktionen  F_DUPFD,  F_GETFD,  F_SETFD,  F_GETFL, F_SETFL, F_GETLK, F_SETLK und F_SETLKW sind in
       POSIX.1-2001 spezifiziert.

       F_GETOWN und F_SETOWN sind in POSIX.1-2001 spezifiziert. (Um Ihre Definitionen  zu  erhalten,  definieren
       Sie  entweder _XOPEN_SOURCE mit einem Wert größer oder gleich 500 oder definieren Sie _POSIX_C_SOURCE mit
       einem Wert größer oder gleich 200809L.)

       F_DUPFD_CLOEXEC ist in POSIX.1-2001 spezifiziert. (Um diese  Definitionen  zu  erhalten,  definieren  Sie
       _POSIX_C_SOURCE  mit  einem Wert größer oder gleich 200809L oder _XOPEN_SOURCE mit einem Wert größer oder
       gleich 700.)

ANMERKUNGEN

       Die Fehler, die von dup2(2) zurückgegeben werden, sind anders als die von F_DUPFD.

   Sperrung von Dateien
       Der ursprüngliche Systemaufruf fcntl() von Linux war nicht dafür konstruiert, große Dateiversätze (in der
       Struktur  flock)  zu  handhaben.  Konsequenterweise  wurde  ein  Systemaufruf  fcntl64()  in  Linux   2.4
       hinzugefügt.  Dieser neuere Systemaufruf setzt eine andere Struktur zum Sperren von Dateien ein, flock64,
       und entsprechende Aktionen F_GETLK64, F_SETLK64 und  F_SETLKW64.  Diese  Details  können  allerdings  von
       Anwendungen,  die  Glibc  einsetzen,  ignoriert werden, da dessen Wrapperfunktion fcntl() transparent den
       neueren Systemaufruf einsetzt, wo er verfügbar ist.

   Datensatzsperren
       Seit Linux 2.0 gibt es keine Wechselwirkung zwischen den durch flock(2) und fcntl() gesetzten Sperrtypen.

       Bei einer Reihe von Systemen gibt es in struct flock weitere Felder wie z.B. l_sysid (zur Identifizierung
       der Maschine, auf der die Sperre gehalten wird). Es ist klar, dass l_pid alleine nicht sehr nützlich ist,
       falls der Prozess, der die Sperre hält, auf einer anderen Maschine existiert.  Unter  Linux  wird  dieses
       Feld, auch wenn es auf einigen Architekturen (wie MIPS32) vorhanden ist, nicht verwandt.

       Der ursprüngliche Systemaufruf fcntl() von Linux war nicht dafür konstruiert, große Dateiversätze (in der
       Struktur   flock)  zu  handhaben.  Konsequenterweise  wurde  ein  Systemaufruf  fcntl64()  in  Linux  2.4
       hinzugefügt. Dieser neuere Systemaufruf setzt eine andere Struktur zum Sperren von Dateien ein,  flock64,
       und  entsprechende  Aktionen  F_GETLK64,  F_SETLK64  und  F_SETLKW64. Diese Details können allerdings von
       Anwendungen, die Glibc einsetzen, ignoriert werden, da dessen  Wrapperfunktion  fcntl()  transparent  den
       neueren Systemaufruf einsetzt, wo er verfügbar ist.

   Datensatzsperren und NFS
       Falls  ein  NFSv4-Client  vor  Linux  3.12  den  Kontakt  mit  dem  Server für eine bestimmte Zeitperiode
       (definiert als mehr als 90 Sekunden ohne Kommunikation) verlor,  konnte  er  eine  Sperre  verlieren  und
       wieder  erlangen,  ohne  von dieser Tatsache Kenntnis zu erhalten. (Die Zeitperiode, nach der der Kontakt
       als verloren angesehen wird, ist als NFSv4-Ausleihzeit bekannt. Auf  einem  Linux-NFS-Server  kann  diese
       durch  einen  Blick  in  /proc/fs/nfsd/nfsv4leasetime,  die diese Periode in Sekunden ausdrückt, bestimmt
       werden. Der Vorgabewert für diese Datei ist 90.) In diesem Szenario sind  potenziell  Datenbeschädigungen
       möglich,  da  ein  anderer  Prozess  in  der  Zwischenzeit eine Sperre erlangen und Datei-E/A durchführen
       könnte.

       Wenn seit Linux 3.12 ein NFSv4-Client den Kontakt mit dem Server verliert, wird jede E/A  des  Prozesses,
       der  »glaubt«,  er  halte  eine  Sperre,  fehlschlagen,  bis dieser Prozess die Datei schließt und erneut
       öffnet. Ein Kernelparameter (nfs.recover_lost_locks) kann auf 1 gesetzt werden, um das pre-3.12-Verhalten
       zu erreichen, bei dem ein Client versuchen wird, verloren gegangene Sperren wiederherzustellen, wenn  der
       Kontakt  mit  dem Server wieder etabliert ist. Aufgrund des vorhandenen Risikos der Datenverfälschung ist
       die Vorgabe für diesen Parameter 0 (deaktiviert).

FEHLER

   F_SETFL
       Es ist nicht möglich, F_SETFL zum Ändern des Zustands der  Schalter  O_DSYNC  und  O_SYNC  zu  verwenden.
       Versuche, den Zustand dieser Schalter zu ändern, werden ohne Meldung ignoriert.

   F_GETOWN
       Eine   Begrenzung  der  Linux-Systemaufrufkonventionen  auf  einigen  Architekturen  (insbesondere  i386)
       bedeutet, dass, falls eine von F_GETOWN zurückgelieferte (negative) Prozessgruppenkennung in den  Bereich
       -1  bis -4095 fällt, dies von Glibc fälschlicherweise als Fehler im Systemaufruf interpretiert wird. Dann
       wird der Rückgabewert von fcntl() -1 sein und errno wird die (positive) Prozessgruppenkennung  enthalten.
       Die  Linux-spezifische  Aktion  F_GETOWN_EX vermeidet dieses Problem. Seit Glibc 2.11 versteckt Glibc das
       Kernelproblem F_GETOWN, indem F_GETOWN mittels F_GETOWN_EX implementiert wird.

   F_SETOWN
       Unter Linux 2.4 und älter gibt es einen Fehler, der auftreten kann,  wenn  ein  unprivilegierter  Prozess
       statt  einem  Aufrufenden  F_SETOWN  verwendet,  um  den  Eigentümer  eines  Socket-Dateideskriptors  als
       Prozess(gruppe) festzulegen. In diesem Fall kann fcntl() -1 mit errno auf  EPERM  gesetzt  zurückliefern,
       selbst  wenn  der/die  Eigentümerprozess(gruppe)  dergestalt ist, dass der Aufrufende Rechte hat, ihr/ihm
       Signale zu senden. Trotz dieses zurückgelieferten Fehlers wird der Dateieigentümer  gesetzt  und  Signale
       werden zum Eigentümer gesandt.

   Erkennung von Verklemmungen
       Der  vom  Kernel  eingesetzte  Algorithmus  zur Erkennung von Verklemmungen beim Umgang mit F_SETLKW kann
       sowohl falsch-negative (keine Erkennung von Verklemmungen, eine Gruppe von verklemmten  Prozessen  bleibt
       unbegrenzt  blockiert)  als  auch  falsch-positive  (EDEADLK-Fehler  obwohl  keine  Verklemmung vorliegt)
       liefern. Beispielsweise begrenzt der Kernel die Sperrtiefe seiner Abhängigkeitssuche auf 10 Schritte, was
       bedeutet, dass zirkulare  Verklemmungsketten,  die  diese  Größe  überschreiten,  nicht  erkannt  werden.
       Zusätzlich kann der Kernel fälschlicherweise eine Verklemmung erkennen, wenn zwei oder mehr Prozesse, die
       mit  dem  Schalter  CLONE_FILES  von  clone(2)  Sperren  setzen, die (dem Kernel) als im Konflikt stehend
       erscheinen.

   Pflichtsperren
       Die  Linux-Implementierung  von  Pflichtsperren  ist  Gegenstand  von   Ressourcenwettläufen,   die   sie
       unzuverlässig machen: Ein write(2)-Aufruf, der sich mit einer Sperre überschneidet, kann Daten verändern,
       nachdem  die  Pflichtsperre  erlangt  wurde. Ein read(2)-Aufruf, der sich mit einer Sperre überschneidet,
       kann Änderungen an Daten entdecken, die nur vorgenommen wurden, nachdem eine Schreibsperre erlangt wurde.
       Ähnliche Wettläufe gibt es zwischen Pflichtsperren und mmap(2). Daher ist es nicht zu empfehlen, sich auf
       Pflichtsperren zu verlassen.

SIEHE AUCH

       dup2(2), flock(2), open(2), socket(2), lockf(3), capabilities(7), feature_test_macros(7), lslocks(8)

       locks.txt,   mandatory-locking.txt   und    dnotify.txt    in    dem    Linux-Kernelquelldateiverzeichnis
       Documentation/filesystems/. (Bei älteren Kerneln befinden sich diese Dateien direkt unter dem Verzeichnis
       Documentation/ und mandatory-locking.txt heißt mandatory.txt.)

ÜBERSETZUNG

       Die  deutsche  Übersetzung dieser Handbuchseite wurde von Martin Schulze <joey@infodrom.org>, Chris Leick
       <c.leick@vollbio.de>,    Helge    Kreutzmann     <debian@helgefjell.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  die
       Mailingliste der Übersetzer: debian-l10n-german@lists.debian.org.

Linux man-pages 6.9.1                              2. Mai 2024                                          fcntl(2)