dup2 - dupliziert einen Dateideskriptor.

Beschreibung

int dup2(int oldfd, int newfd);

Der neue Dateideskriptor newfd wird angepasst, sodass er den selben offenen Dateideskriptor oldfd referenziert.

Beispiel

Dieses Beispiel ist eine Implementierung für das Kommando ls -l | wc -l (Zählen von Dateien im geöffneten Verzeichnis) in C.

Wir leiten hier die Standardausgabe von ls -l um in die Eingabe von wc -l.

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char* argv[]) {
 
	pid_t pid;
	int fd[2];
	
	pipe(fd); 
	pid = fork();
	
	if(pid==0) {
		close(fd[1]);
		
		// fd[0] ist das offene Pipe-Ende
		// 0 ist die numerische Kennung von stdin
		dup2(fd[0], 0);
		
		// Aufruf `wc -l`
		execlp("wc", "wc", "-l", (char *)NULL); 
		exit(0); 
	}
	else {
		close(fd[0]); 
		
		// 1 ist die numerische Kennung von stdout
		dup2(fd[1], 1);
		
		// Aufruf `ls -l`
		execlp("ls", "ls", "-l", (char*)NULL); 
	}
	
	close(fd[0]); 
	close(fd[1]); 
	
	return 0; 
}