Я запускаю программу, которая делает трубопровод.
Команда, которую я хочу выполнить: ls | кошка.
int cmd(char** w, int* pipe, int action){
... some code up here
...
int fd;
if(child_pid == 0) {
if (pipe != 0) {
if (action == 0){
fd = dup2(pipe[0], STDIN_FILENO);
close(pipe[0]);
close(pipe[1]);
//close(fd);
}
else if (action == 1){
fd = dup2(pipe[1], STDOUT_FILENO);
close(pipe[0]);
close(pipe[1]);
//close(fd);
}
}
execvp(w[0], w);
printf("Unknown command\n");
exit(0);
}
... some code down here
Когда я запускаю код, команда ls | кошка работает нормально, за исключением того, что кошка не заканчивается (то есть труба не закрывается и просто ждет там, ничего не делая). Я думаю, это потому, что я не закрыл поток или что-то еще, но я недостаточно знаком с C / IO, чтобы знать наверняка. Я правильно это делаю?
код, который запускает эту функцию, похож на
int fd[2];
int p = pipe(fd);
cmd(w, fd, 1);
cmd(w, fd, 0);
редактировать: ты прав, fatalerror, я опечатался в аргументе
thxs, похоже, мне просто нужно было закрыть трубу [1] в родительском