Provided by:
manpages-de-dev_0.10-1_all 
BEZEICHNUNG
fcntl - Manipulation von Dateideskriptoren
Diese Handbuchseite ist eventuell veraltet. Im Zweifelsfall ziehen Sie
die englischsprachige Handbuchseite zu Rate, indem Sie
man -LC 2 fcntl
eingeben.
SYNOPSIS
#include <unistd.h>
#include <fcntl.h>
int fcntl(int fd, int cmd);
int fcntl(int fd, int cmd, long arg);
int fcntl(int fd, int cmd, struct flock *lock);
DESCRIPTION
fcntl fuhrt eine von vielen unterschiedlichen Operationen auf dem File-
Deskriptor fd aus. Die jeweilige Operation wird durch den Parameter
cmd angegeben.
SchlieBen beim Ausf"uhren (close-on-exec)
F_DUPFD
Sucht den verfugbaren File-Deskriptor mit der niedrigsten Nummer
groBer oder gleich arg und legt in fd eine Kopie davon an. Im
Gegensatz dazu verwendet dup2(2) exakt den angegebenen
Deskriptor.
Die alten und neuen Deskriptoren konnen ausgetauscht werden.
Sie verwenden beide die gleichen Locks, Positionszeiger und
Flags. Wenn beispielsweise die Dateiposition des einen
Deskriptors mit lseek geandert wird, dann ist sie gleichzeitig
auch beim anderen Deskriptor geandert.
Die beiden Deskriptoren teilen sich jedoch nicht das close-on-
exec-Flag. In der Kopie ist das Flag abgeschaltet, so dass der
neue Deskriptor beim Ausfuhren nicht geschlossen wird.
Bei Erfolg wird der neue Deskriptor zuruckgegeben.
F_GETFD
Liest das close-on-exec-Flag. Ist das FD_CLOEXEC-Bit 0, so
bleibt die Datei bei einem exec geoffnet, ansonsten wird sie
geschlossen.
F_SETFD
Setzt das close-on-exec-Flag auf den Wert, des FD_CLOEXEC-Bits
in arg.
Die Statusflags einer Datei
Jedem File-Deskriptor sind verschiedene Flags zugeordnet, die beim
Aufruf von open(2) initialisiert und spater durch fcntl(2) verandert
werden konnen. Kopien eines File-Deskriptors, die mit dup2(2) oder
fork(2), etc. erzeugt wurden, besitzen identische Flags.
Die einzelnen Flags und ihre Bedeutung sind in open(2) beschrieben.
F_GETFL
Liest die Flags des Deskriptors.
F_SETFL
Setzt die Flags des Deskriptors, die sich auf den Dateistatus
beziehen, auf die in arg angegebenen Werte. Die weiteren Bits
fur Zugriffsmodus und Dateierzeugung werden ignoriert. Unter
Linux lassen sich auf diese Weise nur die Flags O_APPEND,
O_NONBLOCK, O_ASYNC und O_DIRECT verandern.
Empfehlendes (advisory) Locking
Man benutzt
F_GETLK, F_SETLK und F_SETLKW, um Locks fur bestimmte Segmente
in einer Datei anzufordern, aufzugeben oder zu testen. Das
dritte Argument lock verweist auf eine Struktur, die zumindest
die folgenden Eintrage enthalt (die Reihenfolge ist nicht
festgelegt):
struct flock {
...
short l_type; /* Typ des Locks: F_RDLCK,
F_WRLCK, F_UNLCK */
short l_whence; /* Wie ist l_start zu verstehen:
SEEK_SET, SEEK_CUR, SEEK_END */
off_t l_start; /* Startposition des Locks */
off_t l_len; /* Lock fur l_len Bytes anfordern */
pid_t l_pid; /* PID des Prozesses, der das Lock blockiert
(nur F_GETLK) */
...
};
Die Eintrage l_whence, l_start, und l_len bestimmen den Bereich, fur
den das Lock angefordert werden soll. l_start gibt den Anfang des
Bereichs an, und zwar relativ zum Anfang der Datei (falls l_whence auf
SEEK_SET gesetzt ist), relativ zur aktuellen Position in der Datei
(falls l_whence auf SEEK_CUR gesetzt ist), bzw. relativ zum Dateiende
(falls l_whence auf SEEK_END gesetzt ist). In den beiden zuletzt
genannten Fallen kann l_start auch negativ sein, sofern es dadurch
nicht uber den Beginn der Datei hinaus verweist. Das Lock wird fur die
in l_len angegebene Anzahl von Bytes angefordert. Sie darf nicht
negativ sein. (Man beachte jedoch auch die ANMERKUNGEN unten.) Der
Bereich darf uber das Dateiende hinausweisen, nicht aber vor den
Dateianfang. Der Wert 0 hat eine spezielle Bedeutung: So fordert man
ein Lock an, das an der durch l_whence und l_start bestimmten Position
beginnt und bis zum Dateiende reicht, gleichgultig auf welche GroBe die
Datei noch anwachst.
Der Eintrag l_type wird benutzt, um entweder ein Lock fur lesenden
(F_RDLCK) oder schreibenden (F_WDLCK) Zugriff auf die Datei
anzufordern. Beliebig viele Prozesse durfen ein Lock zum Lesen
besitzen (geteiltes Lock), aber nur ein Prozess gleichzeitig darf ein
Lock zum Schreiben erhalten (ausschlieBendes Lock). Ein
ausschlieBendes Lock schlieBt samtliche anderen Locks aus, also sowohl
lesende, als auch andere schreibende. Ein einzelner Prozess darf fur
ein bestimmtes Dateisegment nur einen einzigen Typ von Lock besitzen;
wird ein neues Lock fur einen Bereich angefordert, fur den bereits ein
anderes Lock existiert, so wird das bestehende Lock auf den Typ des
neuen Locks umgestellt. (Stimmen die Bereiche der beiden Locks nicht
exakt uberein, konnen sie dadurch aufgeteilt, verkleinert oder mit
anderen Locks vereinigt werden.)
F_SETLK
Fordert ein Lock an, falls l_type auf F_RDLCKoderF_WRLCK gesetzt
ist. Gibt ein Lock auf, falls l_type auf F_UNLCK gesetzt ist.
Der angeforderte Bereich wird durch die Eintrage l_whence,
l_start und l_len in lock angegeben. Falls ein anderer Prozess
ein konkurrierendes Lock halt, gibt dieser Aufruf -1 zuruck und
setzt errno auf EACCESS oder EAGAIN.
F_SETLKW
Unterscheidet sich nur dann von F_SETLK, wenn ein anderer
Prozess ein konkurrierendes Lock halt. In diesem Fall wartet
F_SETLKW auf die Freigabe. Der Aufruf kann durch ein Signal
unterbrochen werden. Dann wird zunachst der Signalhandler
abgearbeitet. Direkt im Anschluss wird fcntl() mit Ruckgabewert
-1 beendet und errno auf EINTR gesetzt.
F_GETLK
Beim Aufruf beschreibt lock ein zu testendes Lock auf eine
Datei. Konnte es erfolgreich gesetzt werden, so setzt fcntl()
den Eintrag l_type in lock auf F_UNLCK und lasst die ubrigen
Felder unverandert. Sind bereits ein oder mehrere
konkurrierende Locks gesetzt, werden die Felder l_type,
l_whence, l_start und l_len in lock mit Informationen uber eines
der Locks gefullt. Die PID des zugehorigen Prozesses wird in
l_pid zuruckgegeben.
Um ein Lock fur Lesezugriff anzufordern, muss der Deskriptor zum Lesen
geoffnet sein. Ein Lock fur Schreibzugriff erfordert, dass der
Deskriptor zum Schreiben geoffnet ist. Ist der Deskriptor zum Lesen
und Schreiben geoffnet, konnen beliebige Locks angefordert werden.
Zusatzlich zum expliziten F_UNLCK werden die Locks auch dann
aufgegeben, wenn der Prozess endet oder wenn er einen beliebigen
Deskriptor der Datei schlieBt, auf die die Locks verweisen. Das ist
schlecht: Es bedeutet, dass ein Prozess beispielsweise seine Locks auf
/etc/passwd oder /etc/mtab verlieren kann, wenn eine
Bibliotheksfunktion aus irgendeinem Grund die Datei offnen und
schlieBen muss.
Die Locks werden nicht uber fork(2), wohl aber uber execve(2) hinweg
weitergereicht. Aufgrund der gepufferten Ein-/Ausgabe in der
stdio(3)-Bibliothek sollten ihre Funktionen nicht zusammen mit Locks
verwendet werden. Statt dessen sind read(2) und write(2) zu benutzen.
Verpflichtende (mandatory) Locks
(Nicht im POSIX-Standard spezifiziert.) Die oben beschriebenen Locks
konnen sowohl empfehlend oder verpflichtend verwendet werden. Ohne
zusatzliche Schritte sind sie empfehlend. Um verpflichtende Locks
verwenden zu konnen, mussen sie fur ein Dateisystem mit der Option "-o
mand" beim Aufruf von mount(8) zugelassen und zusatzlich fur jede Datei
aktiviert werden (indem in den Zugriffsrechten fur die Gruppe das
Ausfuhrungsbit geloscht und das Set-GID-Bit gesetzt wird).
Empfehlende Locks werden nicht erzwungen, sondern sind nur nutzlich
zwischen kooperierenden Prozessen. Verpflichtende Locks werden fur
samtliche Prozesse erzwungen.
Signalkontrolle
F_GETOWN, F_SETOWN, F_GETSIG und F_SETSIG werden benutzt, um Signale zu
kontrollieren, die die Verfugbarkeit von Ein- und Ausgaben anzeigen:
F_GETOWN
Gibt die PID (oder Prozessgruppen-ID) eines Prozesses zuruck der
im Augenblick ein SIGIO- oder SIGURG-Signal fur ein Ereignis auf
dem Deskriptor fd erhalt. Prozessgruppen werden als negative
Werte zuruckgegeben.
F_SETOWN
Setzt die PID (oder Prozessgruppen-ID) fur einen Prozess, der
bei Ereignissen auf dem Deskriptor fd ein SIGIO- oder SIGURG-
Signal ubermittelt bekommen soll. Prozessgruppen werden als
negative Werte angegeben. (Mit Hilfe von F_SETSIG kann auch ein
anderes Signal als SIGIO angefordert werden.)
Das SIGIO-Signal wird ausgesandt, falls uber den Dateideskriptor
neue Eingabedaten gelesen oder weitere Ausgabedaten geschrieben
werden konnen. Als Voraussetzung dafur muss weiterhin das
Statusflag O_ASYNC fur den Deskriptor gesetzt sein (entweder als
Flag beim Aufruf von open(2) oder spater uber das Kommando
F_SETFL von fcntl).
Welcher Prozess oder welche Prozessgruppe das Signal erhalt,
wird mit Hilfe des Kommandos F_SETOWN von fcntl gesteuert.
Handelt es sich bei dem Deskriptor um einen Socket, legt der
Aufruf gleichzeitig auch den Empfanger von SIGURG-Signalen fest.
Derartige Signale werden ausgesandt, wenn ein Paket auBerhalb
der normalen Reihenfolge eintrifft. (SIGURG wird immer dann
ausgesandt, wenn select(2) anzeigen wurde, dass sich der Socket
in einem "auBergewohnlichen Zustand" befindet.) Bezeichnet der
Deskriptor ein Dateneingabegerat, wird das SIGIO-Signal an die
zugehorige Vordergrundprozessgruppe geschickt. geschickt.
F_GETSIG
Gibt die Nummer des Signals zuruck, das verwendet wird, um Ein-
und Ausgabeereignisse anzuzeigen. Ein Wert von null bedeutet,
dass SIGIO benutzt wird. Jeder andere Wert (einschlieBlich
SIGIO) entspricht der verwendeten Signalnummer. In diesem Fall
konnen weitere Informationen uber die Signalverarbeitungsroutine
abgerufen werden, sofern sie mit SA_SIGINFO installiert wurde.
F_SETSIG
Setzt die Nummer des Signals, das verwendet wird, um Ein- und
Ausgabeereignisse anzuzeigen. Ein Wert von null bedeutet, dass
SIGIO benutzt wird. Jeder andere Wert (einschlieBlich SIGIO)
bezeichnet die verwendende Signalnummer. In diesem Fall konnen
weitere Informationen uber die Signalverarbeitungsroutine
abgerufen werden, sofern sie mit SA_SIGINFO installiert wurde.
Durch Kombination von F_SETSIG mit von Null verschiedenen Werten
und SA_SIGINFO fur die Signalverarbeitungsroutine (siehe
sigaction(2)), erhalt die Routine in der Struktur siginfo_t
Zusatzinformationen uber das Ein-/Ausgabeereignis. Zeigt das
Feld si_code an, dass die Quelle SI_SIGIO ist, enthalt Feld
si_fd den zugehorigen Dateideskriptor. Andernfalls stehen keine
weiteren Informationen zur Verfugung, an welchem Deskriptor
Ein-/Ausgaben anliegen, und man sollte auf die gewohnlichen
Mechanismen (select(2), poll(2), read(2) in Verbindung mit
O_NONBLOCK, etc.) zuruckgreifen, um sie zu ermitteln.
Wird ein POSIX.1b-Echtzeitsignal (Signalnummer >= SIGRTMIN)
ausgewahlt, konnen mehrere Ein-/Ausgabeereignisse unter
derselben Signalnummer aufgereiht werden. (Das Aufreihen hangt
ab vom verfugbaren Speicher.) Wie oben stehen auch hier weitere
Informationen bereit, falls SA_SIGINFO fur die
Signalverarbeitungsroutine gesetzt ist.
Mit Hilfe dieser Mechanismen ist es moglich, voll asynchrone
Ein-/Ausgabe zu implementieren, ohne signifikant auf select(2) oder
poll(2) zuruckzugreifen.
Die Verwendung von O_ASYNC, F_GETOWN, F_SETOWN ist spezifisch fur BSD
und Linux. F_GETSIG und F_SETSIG sind Linux-spezifisch. Ahnliches
lasst sich im Rahmen des POSIX-Standards durch asynchrone Ein-/Ausgabe
und die Struktur aio_sigevent erreichen; sie sind auch unter Linux als
Teil der GNU-C-Bibliothek (glibc) verfugbar.
Leases
F_SETLEASE und F_GETLEASE (seit Linux 2.4) werden benutzt, um die
aktuellen Einstellungen eines Leases zu setzen beziehungsweise
abzufragen, das der aufrufende Prozess auf die durch den Deskriptor fd
beschriebene Datei besitzt. Mittels eines Dateileases kann sich ein
Prozess (der Lease-Inhaber) durch ein Signal benachrichtigen lassen,
falls ein anderer Prozess (der Mitbewerber) versucht, mit open(2) oder
truncate(2) auf die Datei zuzugreifen.
F_SETLEASE
Setzt oder entfernt ein Dateilease, abhangig vom Wert in arg:
F_RDLCK
Erwirbt ein lesendes Lease. Der Prozess erhalt dann
Nachricht, sobald ein anderer Prozess die Datei fur
Schreibzugriff offnet oder sie verkurzen will.
F_WRLCK
Erwirbt ein schreibendes Lease. Der Prozess erhalt
Nachricht, sobald ein anderer Prozess die Datei offnet
(fur Schreib- oder Lesezugriff) oder sie verkurzen will.
Ein schreibendes Lease kann nur erworben werden, kein
anderer Prozess die Datei augenblicklich geoffnet hat.
F_UNLCK
Entfernt das Lease von der Datei.
Ein Prozess kann nur einen Typ von Lease auf eine bestimmte Datei
besitzen.
Leases konnen nur fur gewohnliche Dateien erworben werden. Ein Prozess
ohne Sonderprivilegien darf nur Leases auf Dateien erwerben, deren
Dateisystem-UID der UID des Prozesses entspricht.
F_GETLEASE
Zeigt den Typ des Leases an fur die durch den Deskriptor fd
beschriebene Datei. Der Ruckgabewert ist F_RDLCK, F_WRLCK oder
F_UNLCK, je nachdem, ob der Prozess ein lesendes, schreibendes
oder kein Lease auf die Datei besitzt. (Das dritte Argument zu
fcntl() wird ausgelassen.)
Wenn der Mitbewerber einen open()- oder truncate()-Aufruf ausfuhrt, der
mit dem uber F_SETLEASE erworbenen Lease in Konflikt steht, wird der
Systemaufruf durch den Kernel angehalten. (Ausgenommen, der hat beim
Offnen der Datei mit open() das Flag O_NONBLOCK angegeben. In diesem
Fall kehrt der Aufruf sofort mit dem Fehler EWOULDBLOCK zuruck.) Der
Kernel benachrichtigt den Lease-Inhaber durch ein Signal (fur
gewohnlich SIGIO). Der Lease-Inhaber sollte daraufhin alle notigen
Aufraumarbeiten veranlassen (beispielsweise zwischengespeicherte Daten
schreiben), um die Datei auf den Zugriff durch einen anderen Prozess
vorzubereiten und anschlieBend sein Lease entfernen, indem er das
Kommando F_SETLEASE mit F_UNLCK in arg ausfuhrt.
Versaumt es der Inhaber, das Lease innerhalb der in /proc/sys/fs/lease-
break-time genannten Anzahl von Sekunden zu entfernen, dann bricht der
Kernel gewaltsam das Lease. Das gilt nicht, falls der Systemaufruf des
Mitbewerbers bereits zuvor abgebrochen worden ist, das heiBt, wenn der
Mitbewerber die Datei mit O_NONBLOCK geoffnet hatte oder in der
Zwischenzeit ein Signal empfangen hat.
Sobald das Lease freiwillig oder gewaltsam entfernt wurde und falls der
Systemaufruf des Mitbewerbers nach wie vor blockiert ist, gibt der
Kernel den Aufruf nun wieder frei.
SIGIO ist das Standardsignal, mit dem der Lease-Inhaber benachrichtigt
wird. Es kann jedoch mit Hilfe des Kommandos F_SETSIG fur fcntl()
verandert werden. Wird ein F_SETSIG-Kommando ausgefuhrt (selbst eines,
das SIGIO angibt) und wurde die Signalverarbeitungsroutine mit
SA_SIGINFO angelegt, dann erhalt die Routine als zweites Argument die
Struktur siginfo_t ubergeben. Deren Eintrag si_fd enthalt den
Deskriptor auf die geleaste Datei, auf die ein anderer Prozess
zugreifen will. (Das ist dann sinnvoll, wenn der Prozess Leases auf
mehrere Dateien besitzt.)
Benachrichtigungen "uber Ver"anderungen an Dateien und Verzeichnissen
F_NOTIFY
(seit Linux 2.4) Erteilt eine Nachricht, sobald ein durch
Deskriptor fd beschriebenes Verzeichnis oder eine der
enthaltenen Dateien verandert wird. Die mitzuteilenden
Ereignisse sind in arg zu bestimmen, und zwar als Bitmaske,
gebildet aus bitweisem Oder von keinem oder beliebig vielen der
folgenden Bits:
Bit Beschreibung (Ereignis im Verzeichnis)
------------------------------------------------------------------
DN_ACCESS Auf eine Datei wurde zugegriffen (read,
pread, readv)
DN_MODIFY Eine Datei wurde verandert (write,
pwrite, writev, truncate, ftruncate)
DN_CREATE Eine Datei wurde erstellt (open, creat,
mknod, mkdir, link, symlink, rename)
DN_DELETE Eine Datei wurde entfernt (unlink,
Umbenennen in ein anderes Verzeichnis, rmdir)
DN_RENAME Eine Datei in diesem Verzeichnis wurde
umbenannt (rename)
DN_ATTRIB Die Attribute eine Datei wurden verandert
(chown, chmod, utime[s])
(Um diese Definitionen zu erhalten, muss vor Einbinden von
<fcntl.h> das Makro _GNU_SOURCE definiert sein.)
Normalerweise handelt es sich um "Einweg"-Benachrichtigungen, so
dass die Anwendung sich fur jede weitere Mitteilung stets neu
registrieren muss. Alternativ dazu kann DN_MULTISHOT angegeben
werden, und die Benachrichtigungen werden solange gesendet, bis
sie explizit abbestellt werden.
Eine Serie von F_NOTIFY-Anforderungen ist kumulativ, die
Ereignisse in arg werden zu den bereits angeforderten
hinzugefugt. Um Benachrichtigungen uber samtliche Ereignisse
abzubestellen, ist F_NOTIFY mit 0 als arg auszufuhren.
Benachrichtigt wird duch Ubermittlung eines Signals. Das
Standardsignal ist SIGIO, es kann jedoch durch das F_SETSIG-
Kommando zu fcntl() geandert werden. In diesem Fall erhalt die
Signalverarbeitungsroutine als zweites Argument die Struktur
siginfo_t ubergeben (sofern die Routine mit SA_SIGINFO angelegt
wurde). Deren Eintrag si_fd enthalt den Dateideskriptor, der
die Benachrichtigung ausgelost hat (nutzlich, falls mehrere
Verzeichnisse uberwacht werden).
Speziell in Verbindung mit DN_MULTISHOT sollten POSIX.1b-
Echtzeitsignale fur die Benachrichtigung verwendet werden, so
dass mehrere Nachrichten aufgereiht werden konnen.
R"UCKGABEWERTE
Fur einen erfolgreichen Aufruf hangt der Ruckgabewert von der
ausgefuhrten Operation ab:
F_DUPFD Der neue File-Deskriptor.
F_GETFD Der Inhalt des Flags.
F_GETFL Der Inhalt der Flags.
F_GETOWN Der Besitzer des Deskriptors.
F_GETSIG Wert des Signals zur Anzeige moglicher Ein-/Ausgabe oder null
fur gewohnliches SIGIO-Verhalten.
Alle anderen Kommandos
Null.
Bei einem Fehler wird -1 zuruckgegeben und errno entsprechend gesetzt.
FEHLER
EACCES or EAGAIN
Aktion ist aufgrund von Locks anderer Prozesse nicht moglich
oder weil ein anderer Prozess die Datei in seinen Speicher
gespiegelt hat.
EBADF fd ist kein geoffneter Dateideskriptor oder der Zugriffsmodus
stimmt nicht mit dem Typ des angeforderten Locks uberein (fur
F_SETLK und F_SETLKW).
EDEADLK Es wurde erkannt, dass das angeforderte F_SETLKW-Kommando zu
einem Deadlock fuhren wurde.
EFAULT lock verweist auBerhalb des verfugbaren Adressraums.
EINTR Kommando wurde durch ein Signal unterbrochen (fur F_SETLKW).
Oder Kommando wurde durch ein Signal unterbrochen, bevor das
Lock uberpruft und erworben werden konnte (fur F_GETLK Und
F_SETLK). Tritt vor allem auf, wenn ein Lock auf entfernte
Dateien (etwa uber NFS) angefordert wird, ist jedoch auch auf
lokalen Dateisystemen moglich.
EINVAL arg ist negativ oder groBer als der maximal erlaubte Wert (fur
F_DUPFD) oder arg ist keine erlaubte Signalnummer (fur
F_SETSIG).
EMFILE Der ProzeB hat bereits das Maximum an Dateideskriptoren
geoffnet (fur F_DUPFD).
ENOLCK Der ProzeB hat zu viele Locks auf gemeinsame Speichersegmente
geoffnet, die Locktabelle ist voll oder es trat ein Fehler auf
bei dem Versuch, ein Lock von einem anderen Rechner zu
erhalten (etwa uber NFS).
EPERM Es wurde versucht, fur eine Datei das Flag O_APPEND zu
loschen, deren Zugriffsattribute nur das Anfugen von Daten
erlauben.
BEMERKUNGEN
Die Fehler, die von dup2(2) zuruckgegeben werden, sind anders als die
von F_DUPFD.
Seit Kernelversion 2.0 werden die durch flock(2) und fcntl(2) gesetzten
Locks nicht mehr gegeneinander abgeglichen.
POSIX 1003.1-2001 erlaubt negative Langenangaben in l_len. In diesem
Fall umfaBt das Lock den Bereich von l_start+l_len bis einschlieBlich
l_start-1. Unter Linux wird das seit den Versionen 2.4.21
beziehungsweise 2.5.49 unterstutzt.
Verschiedene Systeme definieren in struct flock weitere Felder wie zum
Beispiel l_sysid. Denn offensichtlich ist l_pid nicht ubermaBig
sinnvoll, falls der ProzeB, der ein Lock halt, auf einer anderen
Maschine laufen kann.
ABGESTIMMT MIT
SVr4, SVID, POSIX, X/OPEN, BSD 4.3. In POSIX.1 sind lediglich die
Operationen F_DUPFD, F_GETFD, F_SETFD, F_GETFL, F_SETFL, F_GETLK,
F_SETLK und F_SETLKW spezifiziert. F_GETOWN und F_SETOWN stammen aus
der BSD-Welt und werden in SVr4 nicht unterstutzt; F_GETSIG und
F_SETSIG sind Linux-spezifisch. Auch F_NOTIFY, F_GETLEASE und
F_SETLEASE gibt es nur unter Linux. Um ihre Definitionen zu erhalten,
muB zusatzlich noch das Makro _GNU_SOURCE definiert werden, bevor
<fcntl.h> eingebunden wird. Die gultigen Flags F_GETFL und F_SETFL
entsprechen den von open(2) unterstutzten und unterscheiden sich
zwischen verschiedenen Systemen; O_APPEND, O_NONBLOCK, O_RDONLY und
O_RDWR sind in POSIX.1 festgelegt. SVr4 unterstutzt verschiedene
weitere Optionen und Flags, die hier nicht aufgefuhrt sind.
Unter SVr4 sind EIO, ENOLINK und EOVERFLOW als zusatzliche mogliche
Fehler dokumentiert.
AUTOREN
Drew Eckhardt, Michael Haardt, Ian Jackson und Martin Schulze. Ins
Deutsche ubersetzt von Martin Schulze (joey@infodrom.north.de) und
Daniel Kobras (kobras@linux.de).
SIEHE AUCH
dup2(2), flock(2), lockf(3), open(2), socket(2)
Siehe auch locks.txt, mandatory.txt und dnotify.txt in
/usr/src/linux/Documentation.