Próbuję zaimplementować wiele rur dla mojej powłoki w C.Kodowanie wielu rur w C
Wszystko, co mam, to funkcja rury, która rura a | b ale nie a | b | do.
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;
I to jest druga wersja:
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];
Jak mogę dodać trochę coś, które uczynią ten kod zarządzać wieloma rura proszę? Bardzo dziękuję z góry!
Właściwie dwa razy wywołujesz fork(), a potrzebujesz tylko raz. To dlatego, że fork() zwraca dwa razy: 0 dla procesu synowskiego i> 1 dla procesu ojca (zwykle jest to pid syna). Nie sądzę, żebyś potrzebował całego kodu do robienia tego, czego potrzebujesz. – none
Spędziłem tyle czasu na tym jednym, to jest jedyna rzecz, która działa^^ Myślę, że jest tylko jedno wywołanie execvp potrzebne dla multi pipe, ale nie mogę sprawić, żeby działało. :( – user2145240
Nie usuwaj kodu z postu, który unieważnia odpowiedzi – FDinoff