Ich versuche, eine multiple Rohr für meine Schale in C zu implementieren.Codieren mehrere Rohre in C
Alles, was ich habe, ist eine Rohrfunktion, die ein Rohr | b aber nicht ein | b | c.
int c[2];
int returnv;
pid_t id;
pipe(c);
pid = fork()) == 0
if (pid)
{
dup2(c[1], 0);
close(p[1]);
close(p[1]);
execvp(array(0), array);
}
if ((pid = fork()) == 0)
{
dup2(p[0], 1);
close(p(0));
close(p[0]);
returnv = execvp(array[0], array);
}
close(p[1]);
wait(NULL);
wait(NULL);
wait(NULL);
return returnv;
Und dies ist eine zweite Version:
int i = 0;
while (i < x)
{
pipe(c);
if ((pid = fork()) == 0)
{
dup2(t[i], 1);
if (i < 2)
dup2(p[0], 1);
close(p[1]);
r= execvp(cmd[i][0], cmd[i]);
}
wait(NULL);
close(p[0]);
i += 1;
t[i] = p[1];
Wie kann ich das wenig etwas hinzufügen, die diesen Code machen mehr Rohr bitte managt? Vielen Dank im Voraus!
Eigentlich rufen Sie fork() zweimal, während Sie nur einmal brauchen. Dies, weil fork() zweimal zurückgibt: 0 für den Sohnprozess und> 1 für den Vaterprozess (normalerweise ist es die PID des Sohns). Ich glaube nicht, dass Sie all diesen Code brauchen, um das zu tun, was Sie brauchen. – none
Ich habe so viel Zeit auf diesem einen verbracht, das ist das einzige, was funktioniert ^^ Ich denke, es gibt nur einen Aufruf an execvp für Multi-Pip benötigt, aber ich kann es nicht funktionieren. :( – user2145240
Entfernen Sie nicht den Code aus dem Post es ungültig macht die Antworten – FDinoff