dup2

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu io.h - Index


Header-Datei

io.h

Kategorie

Eingabe-/Ausgaberoutinen

Prototyp

int dup2(int oldhandle, int newhandle);

Beschreibung

Dupliziert ein Datei-Handle (oldhandle) in einem vorhandenen Datei-Handle (newhandle).

  • dup2 erstellt ein neues Datei-Handle, das mit dem ursprünglichen Datei-Handle Folgendes gemeinsam hat:
  • Dieselbe geöffnete Datei bzw. dasselbe Gerät
  • Derselbe Dateizeiger (d. h. wenn der Dateizeiger einer Datei geändert wird, wird auch der der anderen Datei geändert)
  • Derselbe Zugriffsmodus (Lesen, Schreiben, Lesen/Schreiben)

dup2 erstellt ein neues Handle mit dem in newhandle angegebenen Wert. Ist die mit newhandle verbundene Datei geöffnet, wenn dup2 aufgerufen wird, wird die Datei geschlossen.

newhandle und oldhandle enthalten Datei-Handles, die durch einen Aufruf von creat, open, dup oder dup2 abgerufen wurden.

Rückgabewert

dup2 gibt bei erfolgreicher Ausführung den Wert 0, andernfalls -1 zurück.

Bei einem Fehler wird die globale Variable errno auf einen der folgenden Werte gesetzt:

EBADF Bad file number (Falsche Dateinummer)

EMFILE Too many open files (Zu viele Dateien geöffnet)

Beispiel



 #include <sys\stat.h>;
 #include <string.h>
 #include <fcntl.h>
 #include <io.h>
 #define STDOUT 1
 int main(void)
 {
    int nul, oldstdout;
    char msg[] = "This is a test";
    /* Eine Datei erstellen */
    nul = open("DUMMY.FIL", O_CREAT | O_RDWR,
       S_IREAD | S_IWRITE);
    /* Ein zweites Handle für die Standardausgabe erstellen */
    oldstdout = dup(STDOUT);
    /*
       Standardausgabe in DUMMY.FIL umleiten,
       indem das Datei-Handle in das
       Datei-Handle für die Standardausgabe kopiert wird.
    */
    dup2(nul, STDOUT);
    /* Handle für DUMMY.FIL schließen */
    close(nul);
    /* Wird in DUMMY.FIL umgeleitet */
    write(STDOUT, msg, strlen(msg));
    /* Ursprüngliches Standardausgabe-Handle wiederherstellen */
    dup2(oldstdout, STDOUT);
    /* Dupliziertes Handle für STDOUT schließen */
    close(oldstdout);
    return 0;
 }



Portabilität



POSIX Win32 ANSI C ANSI C++

+

+