Basicaly, им писать оболочку в C .. Im пытается реализовать функцию трубы, которая почти сделано:Почему моя труба заканчивается только тогда, когда я отправить SIGINT
> ls | cat -e | wc | wc -l
> 1
Но у меня есть проблема, когда пытаясь выполнить более медленное/более длительное выполнение.
В самом деле, когда я пытаюсь трубы результата 'кошки/DEV/urandom', то поясню ждет ...
> cat /dev/urandom | cat
>
Но, когда я отправить SIGINT (с Ctrl + C), чтобы остановить это, то он печатает на STDOUT приведённых буферов ..
when i ctrl + c , cat /dev/urandom
Так что мой вопрос: где я должен смотреть на то, чтобы попытаться исправить это?
ЧАСТИ трубочку ИСПОЛНЕНИЯ:
int exec_apipe(t_me *me, t_node *curs, int is_last)
{
int pfd[2];
int pid;
if (pipe(pfd) == -1 || !curs)
return (0);
if (!(curs->pid = fork()))
{
dup2(me->fd_in, 0);
me->fd_in > 0 ? close(me->fd_in) : 0;
if (!is_last)
dup2(pfd[1], 1);
else if (curs->parent->parent && curs->parent->parent->fd_out >= 0)
dup2(curs->parent->parent->fd_out, 1);
close(pfd[0]);
exec_mpipe(me, curs);
exit(-1);
}
else if (curs->pid > 0)
{
waitpid(curs->pid, &(curs->ret), WUNTRACED);
handle_pid(me, curs->ret);
close(pfd[1]);
me->fd_in = pfd[0];
}
return (pid >= 0 ? 1 : -1);
}
Я надеюсь, что кто-то поймет, что им говорят, и, возможно, может помочь .. спасибо
Прочтите все ответы на свои вопросы: http://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe –