DUP(2)

BEZEICHNUNG
dup, dup2 - dupliziert einen file descriptor (Datei-Referenz)

SYNOPSIS
#include <unistd.h>

int dup(int oldfd);
int dup2(int oldfd, int newfd);

BESCHREIBUNG
dup und dup2 erzeugen eine Kopie des file descriptor oldfd. Die alten und neuen Deskriptoren können wahlfrei benutzt werden. Sie teilen sich Locks, Dateipositionszeiger (File Position Pointers) und Flags; falls beispielsweise die Dateiposition durch lseek für einen der Deskriptoren verändert wurde, ist es sie auch für den anderen. Die close-on-exec flag (schliessen-bei-ausführung) teilen sie sich jedoch nicht. dup benutzt den unbenutzten Deskriptor mit der kleinsten Nummer für den neuen. dup2 macht newfd zur Kopie von oldfd, wobei newfd
 ,falls notwendig, zuerst geschlossen wird.

WIEDERGABEWERT
dup und dup2 geben den neuen descriptor zurück, oder -1 falls ein Fehler auftrat (in diesem Falle wird auch errno entsprechend gesetzt).

FEHLER

EBADF
    oldfd ist kein offener file descriptor, oder newfd ist außerhalb des für Dateideskriptoren erlaubten Bereiches.

EMFILE
    Der Prozess hat schon die maximale Anzahl an file deskriptoren offen und versuchte einen weiteren zu öffnen.

WARNUNG
Der Fehler, der von dup2 zurückgegeben wird, ist unterschiedlich zu demjenigen von fcntl(...,F_DUPFD,...) wenn newfd außerhalb des Bereiches ist. Weiterhin gibt dup2 auf einigen Systemen EINVAL wie F_DUPFD zurück.

KONFORM ZU
SVID, AT&T, POSIX, X/OPEN, BSD 4.3

SIEHE AUCH
fcntl(2), open(2), close(2).