Я понимаю конвейер, где вы хотите запустить команду типа ls -l | туалет -л:
int pipes[2];
pipe(pipes);
if (fork() == 0){ //first fork
dup2(pipes[1],1);
close(pipes[0]);
close(pipes[1]);
execvp(arr1[0], arr1); //arr1[0] = "ls" and arr1[1] = "-l" and arr1[2] = 0
perror("Ex failed");
exit(1);
}
if (fork() == 0){ //2nd fork
close(pipes[1]);
dup2(pipes[0],0);
close(pipes[0]);
execvp(arr2[0], arr2); //arr2[0] = "wc" and arr2[1] = "-l" and arr2[2] = 0
perror("Ex failed");
exit(1);
}
Но как бы вы включили перенаправление ввода и вывода? скажем, я хочу кота ‹ foo.txt | туалет -л
Я понимаю, что первый форк нужно модифицировать, но я не понимаю, что нужно (еще один dup2()?). Буду очень признателен за помощь.
Спасибо.
dup2(pipes[1],[1]);
? Это недопустимый синтаксис; Я так понимаю, вы имели в видуdup2(pipes[1], STDOUT_FILENO);
? - person Filipe Gonçalves   schedule 24.01.2016