konsoloen ausgabe mit pipes umlenken
-
hallo,
ich will oder muss den folgenden konsolen Befehl in C nach Programmieren.
ls -lR | sort
Das Problem ist das ich keine Ausgabe von sort bekommme. Sieht jmd. wo der Fehler ist?
int fds[2]; pipe(fds); pids[0] = fork(); if( pids[1] == 0) { //child process 2 dup2(fds[0][0],0); dup2(fds[1][1],1); check_close(fds[0][0]); check_close(fds[0][1]); check_close(fds[1][0]); check_close(fds[1][1]); execlp("sort","sort",NULL); perror("sort"); exit(1); } pids[1] = fork(); if( pids[0] == 0) { //child process 1 dup2(fds[0][1],1); check_close(fds[0][0]); check_close(fds[0][1]); check_close(fds[1][0]); check_close(fds[1][1]); execlp( "ls","ls","-lR",NULL); perror("ls"); exit(1); } check_close(fds[0][0]); check_close(fds[0][1]); check_close(fds[1][0]); check_close(fds[1][1]); wait(0); wait(0);
-
pids[0] = fork(); if( pids[1] == 0)
Wenn Du ganz genau hinschaust, dann kommst Du darauf.
Ausserdem wundert mich, wenn der Compiler hier keine Fehlermeldung ausspuckt:
int fds[2]; ... dup2(fds[0][0],0);
fds ist ein Array mit 2 Elementen vom Typ int. fds[0] ist also ein int. Was fds[0][0] sein soll weiß ich nicht und vermutlich der Compiler auch nicht.
Im übrigen ist eine Fehlerprüfung immer ratsam. Und wenn Du mit gcc arbeitest, dann immer schön die Option -Wall mit geben. Ich verwende zusätzlich noch die Option -pedantic.
Tntnet
-
man da hab ich aber was Übersehen. Danke funktioniert jetzt bestens danke