C Minishell Добавление трубопроводов

Так что я'Я делаю мини-оболочку UNIX и пытаюсь добавить конвейеры, чтобы я мог делать такие вещи:

ps aux | grep dh | grep -v grep | cut -c1-5

Однако я'У меня проблемы с тем, чтобы обернуть голову вокруг трубопровода. Я заменяю все "|" символы с 0, а затем запустить каждую строку как обычную строку. Тем не менее, я пытаюсь перенаправить вывод и ввод. Ввод команды должен быть выходом предыдущей команды, а вывод команды должен быть вводом следующей команды.

я делаю это с помощью труб, однако я могуt выяснить, где вызывать pipe () и где их закрывать. Из основной функции обработки, processline (), у меня есть этот код:

if((pix = findUnquotChar(line_itr, '|')))
{
    line_itr[pix++] = 0;
    if(pipe (fd) < 0) perror("pipe");
    processline(line_itr, inFD, fd[1], pl_flags);
    line_itr = &(line_itr[pix]);

    while((pix = findUnquotChar(line_itr, '|')) && pix < line_len)
    {
        line_itr[pix++] = 0;
        //? if(pipe (fd) < 0) perror("pipe");
        processline(line_itr, fd[0], fd[1] pl_flags);
        line_itr = &(line_itr[pix]);
    //? close(fd[0]);
    //? close(fd[1]);
    }
    return;
}

Так что я'm рекурсивно (код выше находится в технологической линии), посылая команды между "|" обрабатываться технологической линией. Вы можете увидеть, где я закомментировал код выше, яЯ не уверен, как заставить это работать. 2-й и 3-й параметры процесса - это соответственно inputFD и outputFD, поэтому мне нужно обработать команду, записать вывод в канал и затем снова вызвать processline для следующей команды, однако на этот раз вывод предыдущей команды будет вход. Это просто некажется, что это может работать, потому что каждый раз, когда я закрываю fd [0], я 'м теряет предыдущий вывод. Нужны ли мне две отдельные трубы, чтобы я мог шлепать взад-вперед?

Я просто не могу понять, как это возможно с одной трубкой, если вам, ребята, нужна дополнительная информация, просто спросите. Вот's вся функция технологической линии на случай, если вы захотите взглянуть:

http://pastebin.com/YiEdaYdj

РЕДАКТИРОВАТЬ: Если у кого-нибудь есть пример оболочки, которая реализует конвейеры, я хотел бы ссылку на источник, у меня нетдо сих пор не смог найти один на Google.

EDIT2: здесь "Пример моего затруднительного положения:

echo a | echo b | echo c

Итак, сначала я бы назвал оболочку следующим образом:

processline("echo a", 0, fd[1], flags);

....

processline("echo b", fd[0], NOT_SURE_GOES_HERE[1], flags);

....

processline("echo c", NOT_SURE_GOES_HERE[0], NOT_SURE_EITHER[1], flags);

Каждый из них происходит один раз за итерацию, и, как вы можете видеть, я могуt выяснить, что передать для дескрипторов входных файлов и дескрипторов выходных файлов для 2-й и 3-й (и т. д.) итерации.

Ответы на вопрос(1)

Ваш ответ на вопрос