close(2) close(2)
NAME
close - Dateideskriptor schließen
SYNTAX
#include <unistd.h>
int close (int fildes);
BESCHREIBUNG
fildes ist ein Dateideskriptor, der von einem Systemaufruf creat(),
open(), dup(), fcntl() oder pipe() geliefert wurde. close() schließt
den durch fildes angegebenen Dateideskriptor. Alle ausstehenden Daten-
satzsperren des Prozesses (in der von fildes angegebenen Datei) werden
aufgehoben.
Wenn alle der Beschreibung für die offene Datei zugeordneten Dateide-
skriptoren geschlossen worden sind, wird die Beschreibung für diese
Datei freigegeben.
Der von der Datei belegte Speicherplatz wird freigegeben, wenn keine
Links auf diese Datei vorhanden sind und alle der Datei zugeordneten
Dateideskriptoren geschlossen wurden. Auf die Datei kann anschließend
nicht mehr zugegriffen werden.
Wenn ein STREAMS-Dateideskriptor fildes geschlossen wird und für den
aufrufenden Prozeß vorher registriert wurde, daß ihm ein SIGPOLL-Sig-
nal [siehe signal(2) und sigset(2)] bei Ereignissen in Zusammenhang
mit diesem Stream [siehe ISETSIG in streamio(7)] gesendet wird, wird
die Registrierung des aufrufenden Prozesses für Ereignisse in Zusam-
menhang mit diesem Stream aufgehoben. Das letzte close() auf einen
Stream bewirkt, daß der fildes zugeordnete Stream beseitigt wird. Wenn
ONDELAY und ONONBLOCK nicht gesetzt sind und keine Signale für den
Stream ausgeliefert wurden, und wenn in der Schreibwarteschlange des
Moduls Daten stehen, wartet close() bis zu 15 Sekunden (für jedes
Modul und jeden Treiber), damit in der Warteschlange stehende Daten
vor Beseitigen des Streams ausgegeben werden können. Die Zeitverzöge-
rung kann durch einen ioctl()-Aufruf mit dem Parameter ISETCLTIME
geändert werden [siehe streamio(7)]. Wenn ONDELAY oder ONONBLOCK
gesetzt wurde oder wenn Signale vorliegen, wartet close() nicht auf
die Beendigung der Ausgabe und beseitigt den Stream sofort.
Ist fildes einem Ende einer Pipe zugeordnet, so bewirkt der letzte
close()-Aufruf, daß ein "Hangup" am anderen Ende der Pipe erzeugt
wird. Wurde dem anderen Ende der Pipe ein Name zugewiesen [siehe
fattach(3C)], so bewirkt der letzte close(), daß diese Zuweisung auf-
gehoben wird [siehe fdetach(3C)]. Sollte am anderen Ende der Pipe kein
Prozeß mehr vorhanden sein, und die Namenszuweisung aufgehoben wird,
so wird der entsprechende Stream ebenfalls abgebaut.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
close(2) close(2)
Wenn fildes auf die Master-Seite eines Pseudoterminals verweist, wird
beim letzten close ein SIGHUP-Signal an die Prozeßgruppe (falls vor-
handen) gesendet, für die die Slave-Seite des Pseudoterminals das
Steuerterminal ist. Es ist nicht angegeben, ob durch das Schließen der
Master-Seite des Pseudoterminals die gesamte anstehende Ein- und Aus-
gabe gelöscht wird.
Wenn fildes auf die Slave-Seite eines STREAMS-Pseudoterminals ver-
weist, wird möglicherweise eine Meldung der Länge Null an die Master-
Seite gesendet.
FEHLER
Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
errno(5).
Die angegebene Datei wird geschlossen, außer wenn einer oder mehrere
der nachstehenden Punkte zutreffen:
EBADF fildes ist kein gültiger offener Dateideskriptor.
EINTR Ein Signal wurde während des Systemaufrufs close() abgefan-
gen.
EIO Beim Lesen vom Dateisystem oder Schreiben auf dieses trat
ein Ein-/Ausgabefehler auf.
ENOLINK fildes ist auf einem fernen Rechner, und die Verbindung zu
diesem Rechner ist nicht mehr aktiv.
ERGEBNIS
Nach erfolgreicher Beendigung wird 0 zurückgegeben. Andernfalls wird
-1 zurückgegeben, und errno wird zur Anzeige des Fehlers gesetzt.
SIEHE AUCH
creat(2), dup(2), exec(2), fcntl(2), open(2), pipe(2), signal(2),
fattach(3C), fdetach(3C), unistd(4), signal(5).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98