Ich lerne Linux-Systemaufrufe mit C. Ich verstehe die Verwendung von dup2
überhaupt nicht. Bis jetzt habe ich dup2
für 2 Befehle gemacht und es funktioniert in Ordnung, aber ich kann mir keine Möglichkeit vorstellen, 3+ Befehle zu machen.Verwenden Sie den Systemaufruf dup2(), um mehr als 3 Programme zu leiten?
Zum Beispiel, wenn ich will drei Befehle auszuführen:
./program1
./program2
./program3
diese drei Programm ist abhängig von Benutzereingaben Angenommen. Wie kann ich fork()
und verwenden, um die Ausgänge dieses Programms zu leiten?
Für nur 2 Befehle Ich habe dies getan, und es wirkt wie ein Zauber:
pid2=fork();
if(pid2==0)
{
close(pipe1[0]);
dup2(pipe1[1], STDOUT_FILENO);
close(pipe1[1]);
execvp("./addone",argp);
}
else
{
wait(NULL);
close(pipe1[1]);
dup2(pipe1[0], STDIN_FILENO);
close(pipe1[0]);
execvp("./addone",argp);
}
Daumenregel: 1 Satz Rohre für jedes Paar von Prozessen oder '#processes - 1 '. Für 3 Prozesse in der Art wie 'proc1 | proc2 | proc3' brauchst du 2 Sätze Rohre. Der andere Unterschied ist in 'proc2', wo sowohl' stdin' als auch 'stdout' umgeleitet werden. Um 3 Prozesse zu erstellen, müssen Sie 'fork()' von zwei Elternteilen oder 'fork()' von dem Kind, um ein Enkelkind zu machen. – alvits
, Wie Sie schon wissen, wie man 'p1 | p2', denke an 'p1 | p2 | p3 'entweder als' (p1 | p2) | p3' oder 'p1 | (p2 | p3) '. –
kannst du mir bitte sagen wie kann ich den dup2 teil machen? Es ist wirklich verwirrend –