Я понимаю, что там, где вы хотите запустить команду, как ls -l | wc -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 | wc -l
Я понимаю, что первая вилка нуждается в модификации, но я не понимаю, что нужно (другой dup2()?). Я был бы очень признателен за помощь.
Спасибо.
Что вы ожидаете достичь с помощью 'dup2 (pipe [1], [1]);'? Это недопустимый синтаксис; Я так понимаю, вы имели в виду 'dup2 (pipe [1], STDOUT_FILENO);'? –
Это была опечатка. Я исправлю это. – user5832523