dup()
Der Systemaufruf dup() erstellt eine Kopie eines Dateideskriptors.
- Für den neuen Deskriptor wird der unbenutzte Deskriptor mit der niedrigsten Nummer verwendet.
- Wenn die Kopie erfolgreich erstellt wurde, können die ursprünglichen und kopierten Dateideskriptoren austauschbar verwendet werden.
- Sie beziehen sich beide auf dieselbe offene Dateibeschreibung und teilen sich daher den Datei-Offset und die Dateistatus-Flags.
Syntax:
int dup(int oldfd);C
oldfd: old file descriptor whose copy is to be created.
// C program to illustrate dup() #include #include #include int main() { // open() returns a file descriptor file_desc to a // the file 'dup.txt' here' int file_desc = open('dup.txt' O_WRONLY | O_APPEND); if(file_desc < 0) printf('Error opening the filen'); // dup() will create the copy of file_desc as the copy_desc // then both can be used interchangeably. int copy_desc = dup(file_desc); // write() will write the given string into the file // referred by the file descriptors write(copy_desc'This will be output to the file named dup.txtn' 46); write(file_desc'This will also be output to the file named dup.txtn' 51); return 0; }
Beachten Sie, dass dieses Programm nicht im Online-Compiler ausgeführt werden kann, da es das Öffnen einer Datei und das Schreiben darauf umfasst.
Erläuterung:
open() gibt einen Dateideskriptor file_desc für die Datei mit dem Namen „dup.txt“ zurück. file_desc kann verwendet werden, um einige Dateioperationen mit der Datei „dup.txt“ durchzuführen. Nach Verwendung des Systemaufrufs dup() wird eine Kopie von file_desc erstellt, copy_desc. Diese Kopie kann auch verwendet werden, um einige Dateioperationen mit derselben Datei „dup.txt“ durchzuführen. Nach zwei Schreibvorgängen, einer mit file_desc und einer mit copy_desc, wird dieselbe Datei bearbeitet, d. h. „dup.txt“. Bevor Sie den Code ausführen, muss die Datei „dup.txt“ vor dem Schreibvorgang wie folgt aussehen:

Nach dem Ausführen des oben gezeigten C-Programms sieht die Datei „dup.txt“ wie folgt aus:

dup2()
Der Systemaufruf dup2() ähnelt dup(), der grundlegende Unterschied besteht jedoch darin, dass er anstelle des nicht verwendeten Dateideskriptors mit der niedrigsten Nummer die vom Benutzer angegebene Deskriptornummer verwendet.
Syntax:
int dup2(int oldfd int newfd);
oldfd: old file descriptor
newfd new file descriptor which is used by dup2() to create a copy.
Wichtige Punkte:
- Fügen Sie die Header-Datei unistd.h für die Verwendung der Systemaufrufe dup() und dup2() ein.
- Wenn der Deskriptor newfd zuvor geöffnet war, wird er stillschweigend geschlossen, bevor er wiederverwendet wird.
- Wenn oldfd kein gültiger Dateideskriptor ist, schlägt der Aufruf fehl und newfd wird nicht geschlossen.
- Wenn oldfd ein gültiger Dateideskriptor ist und newfd denselben Wert wie oldfd hat, führt dup2() nichts aus und gibt newfd zurück.
Eine knifflige Verwendung des Systemaufrufs dup2():
Wie in dup2() kann anstelle von newfd ein beliebiger Dateideskriptor eingefügt werden. Nachfolgend finden Sie eine C-Implementierung, in der der Dateideskriptor der Standardausgabe (stdout) verwendet wird. Dies führt dazu, dass alle printf()-Anweisungen in die Datei geschrieben werden, auf die der alte Dateideskriptor verweist.
C// C program to illustrate dup2() #include #include #include #include int main() { int file_desc = open('tricky.txt'O_WRONLY | O_APPEND); // here the newfd is the file descriptor of stdout (i.e. 1) dup2(file_desc 1) ; // All the printf statements will be written in the file // 'tricky.txt' printf('I will be printed in the file tricky.txtn'); return 0; }
Dies ist in der folgenden Abbildung zu sehen: Die Datei „tricky.txt“ vor der Operation dup2() sei wie folgt:

Nach dem Ausführen des oben gezeigten C-Programms sieht die Datei „tricky.txt“ wie folgt aus:
Quiz erstellen