Ich habe zwei Befehle cmd1 und cmd2 und ich muss cmd1 in einem Kind ausführen, umleiten die Ausgabe zu einem anderen Kind und dann ausführen cmd2 mit der Ausgabe von cmd1 als ein Argument. Dann muss ich die Ausgabe zu einem Remote-Client (Telnet) umleiten, der mit einem Socket verbunden ist. Ich kann das Problem nicht herausfinden, aber meine Lösung leitet die Ausgabe von cmd1 nicht nach cmd2 um.Pipe von zwei Befehlen mit fork, execvp und dann die Ausgabe auf Socket
if(fork() == 0)
{
//Process to compute cmd1
char *arg[2];
arg[0] = cmd1;
arg[1] = NULL;
dup(piped[1]);
close(piped[0]);
close(piped[1]);
execvp(cmd1,arg);
}
if(fork() == 0)
{
//Process to compute cmd2
dup2(newsockfd,STDOUT_FILENO);
dup2(newsockfd,STDERR_FILENO);
char *arg[2];
arg[0] = cmd2;
arg[1] = NULL;
dup(piped[0]);
close(piped[0]);
close(piped[1]);
execvp(cmd2,arg);
}
Nur um klar zu sein. Das Problem ist nicht in Buchse inizilization oder Rohr, deshalb berichtete ich nur den Hauptteil
wie etwas wäre wollen Warum sollte man etwas erwarten von cmd1 umgeleitet werden ? Sie tun nichts mit der Eingabe oder Ausgabe für diesen untergeordneten Prozess. –
Das ist das Problem. Wie kann der Code debuggen zum Beispiel ein printf, das die Ausgabe von execvp (cmd1, arg) zeigt; im zweiten Kind? –