Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

dup, dup2 - Dateideskriptor duplizieren

&pagelevel(4)&pagelevel

Definition

#include <unistd.h>

int dup(int fildes);

int dup2(int fildes, int fildes2);

Beschreibung

fildes ist ein Dateideskriptor, der von einem Systemaufruf creat(), open(), dup(), fcntl() oder pipe() geliefert wurde. dup() gibt einen neuen Dateideskriptor zurück, der mit dem Original-Dateideskriptor Folgendes gemeinsam hat:

  • dieselbe offene Datei oder Pipe
  • denselben Lese-/Schreibzeiger

  • denselben Zugriffsmodus (Lesen, Schreiben oder Schreiben/Lesen)

fildes2 ist eine nichtnegative ganze Zahl, die kleiner als {OPEN-MAX} ist. dup2() veranlasst fildes2, auf dieselbe Datei wie fildes zu verweisen. Wenn fildes2 bereits auf eine offene Datei verweist, außer auf fildes, wird die offene Datei erst geschlossen. Wenn fildes2 auf fildes verweist oder wenn fildes kein gültiger Dateideskriptor ist, wird fildes nicht zuerst geschlossen.

Die Funktionen dup() und dup2() bieten eine alternative Schnittstelle der Funktion fcntl() zu dem Kommando F_DUPFD. Der Aufruf

fid = dup(fildes);

ist äquivalent zu:

fid = fcntl(fildes, F_DUPFD, 0);

Der Aufruf

fid = dup2(fildes, fildes2);

ist äquivalent zu:

close(fildes2);

fid = fcntl(fildes, F_DUPFD, fildes2);

mit folgender Ausnahme:

Ist fildes ein gültiger Dateideskriptor und gleich fildes2, dann liefert dup2() fildes2 ohne fildes2 zu schließen.

Returnwert

nichtnegative Zahl (Dateideskriptor)



bei Erfolg.

 

-1

bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen

Fehler

dup() und dup2() schlagen fehl, wenn gilt:


EBADF

fildes ist kein gültiger Dateideskriptor, oder fildes2 ist negativ oder größer oder gleich {OPEN_MAX}.

 

EINTR

dup2() wurde durch ein Signal unterbrochen.

 

Erweiterung

 

EINVAL

fildes und fildes2 bezeichnen BS2000-Dateien. (Ende)

 

EMFILE

Die Anzahl der durch den Prozess verwendeten Dateideskriptoren überschreitet {OPEN_MAX}, oder es sind keine Dateideskriptoren fildes2 verfügbar.

Hinweis

dup() und dup2() werden nur für POSIX-Dateien ausgeführt.

Siehe auch

close(), fcntl(), open(), unistd.h.