BEZEICHNUNG¶
dup, dup2 - dupliziert einen Datei-Deskriptor
ÜBERSICHT¶
#include <unistd.h>
int dup(int oldfd);
int dup2(int oldfd, int newfd);
#define _GNU_SOURCE /* Siehe feature_test_macros(7) */
#include <fcntl.h> /* Konstantendefinitionen O_* beschaffen */
#include <unistd.h>
int dup3(int oldfd, int newfd, int schalter);
BESCHREIBUNG¶
Diese Systemaufrufe erstellen eine Kopie des Datei-Deskriptors
oldfd.
dup() benutzt den unbenutzten Deskriptor mit der niedrigsten Nummer
für den neuen Deskriptor.
dup2() erstellt
newfd als Kopie von
oldfd, wobei
newfd, falls notwendig, zuerst geschlossen wird, aber beachten Sie
Folgendes:
- *
- Falls oldfd kein gültiger Datei-Deskriptor ist,
schlägt der Aufruf fehl und newfd wird nicht geschlossen.
- *
- Falls oldfd ein gültiger Datei-Deskriptor ist
und newfd den gleichen Wert wie oldfd hat, dann tut
dup2() nichts und gibt newfd zurück.
Nach der erfolgreichen Rückkehr von einem dieser Systemaufrufe können
die alten und neuen Datei-Deskriptoren synonym benutzt werden. Sie beziehen
sich auf die gleichen offenen Datei-Deskriptoren (siehe
open(2)) und
teilen sich dadurch Dateiversatz (file offset) und Dateistatusschalter. Falls
der Dateiversatz zum Beispiel durch
lseek(2) auf einem der Deskriptoren
geändert wurde, wird der Versatz auch für den anderen
verändert.
Die beiden Deskriptoren teilen sich keine Datei-Deskriptor-Schalter (den
Schalter »close-on-exec«). Der Schalter »close-on-exec« (
FD_CLOEXEC; siehe
fcntl(2)) für das Duplikat ist aus.
dup3() entspricht
dup2(), außer dass:
- *
- Der Aufrufende kann erzwingen, dass der Schalter
»close-on-exec« für den neuen Datei-Deskriptor durch Angabe
von O_CLOEXEC in schalter gesetzt wird. Lesen Sie die
Beschreibung des gleichnamigen Schalters in open(2), um zu
erfahren, warum dies nützlich sein könnte.
- *
- Falls oldfd newfd entspricht, schlägt
dup3() mit dem Fehler EINVAL fehl.
RÜCKGABEWERT¶
Bei Erfolg geben diese Systemaufrufe den neuen Deskriptor zurück. Im
Fehlerfall wird -1 zurückgegeben und
errno entsprechend gesetzt.
FEHLER¶
- EBADF
- oldfd ist kein offener Datei-Deskriptor oder
newfd ist außerhalb des für Datei-Deskriptoren erlaubten
Bereiches.
- EBUSY
- (nur Linux) Dies könnte von dup2() oder
dup3() während einer Gleichzeitigkeitsbedingung mit
open(2) und dup() zurückgegeben werden.
- EINTR
- Der Aufruf von dup2() oder dup3() wurde von
einem Signal unterbrochen; lesen Sie signal(7).
- EINVAL
- (dup3()) schalter enthält einen
ungültigen Wert oder oldfd entsprach newfd.
- EMFILE
- Der Prozess hat bereits die maximale Anzahl an offenen
Datei-Deskriptoren und versucht einen neuen zu öffnen.
VERSIONEN¶
dup3() wurde in Version 2.6.27 zu Linux hinzugefügt;
Glibc-Unterstützung ist seit Version 2.9 verfügbar.
dup(),
dup2(): SVr4, 4.3BSD, POSIX.1-2001.
dup3() ist Linux-spezifisch.
ANMERKUNGEN¶
Der von
dup2 zurückgegebene Fehler unterscheidet sich von dem, der
von
fcntl(...,
F_DUPFD,...
) zurückgegeben wird, wenn
newfd außerhalb des Bereiches ist. Weiterhin gibt
dup2 auf
einigen Systemen
EINVAL wie
F_DUPFD zurück.
Falls
newfd geöffnet war, gehen einige Fehler, die zur Zeit des
close(2) berichtet worden wären, verloren. Ein vorsichtiger
Programmierer wird
dup2() oder
dup3() nicht benutzen ohne zuerst
newfd zu schließen.
SIEHE AUCH¶
close(2),
fcntl(2),
open(2)
KOLOPHON¶
Diese Seite ist Teil der Veröffentlichung 3.42 des Projekts Linux-
man-pages. Eine Beschreibung des Projekts und Informationen, wie Fehler
gemeldet werden können, finden sich unter
http://www.kernel.org/doc/man-pages/.
ÜBERSETZUNG¶
Die deutsche Übersetzung dieser Handbuchseite wurde von Aldo Valente
<aldo@dagobar.rhein.de> und Chris Leick <c.leick@vollbio.de>
erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public
License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird
KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken
Sie bitte eine E-Mail an <debian-l10n-german@lists.debian.org>.