Первое предложение: символические константы лучше, чем магические числа.
const int PIPE_READ = 0;
const int PIPE_WRITE = 1;
int fd[2];
pipe(fd);
// Now you can refer to fd[PIPE_READ] and fd[PIPE_WRITE].
Второе предложение: сделайте шаг назад и подумайте, чего вы пытаетесь достичь.
Вы хотите порождать два процесса, когда стандартный вывод первого процесса подключен к стандартному второму процессу. Правильно?
Итак, в C это означает, что вам нужно принять вызов pipe
, передать fd[PIPE_WRITE]
первому дочернему процессу, который dup2
переходит в 1, и передать fd[PIPE_READ]
второму дочернему процессу, который будет dup2
до 0.
Простой просмотр прототипа forkAndExecute'
показывает, что он не может этого сделать:
void forkAndExecute( char* arrayOfWords[] , vector *vectorOfPIDs ,
bool hasNextCmd , bool hasPrevCmd);
Он обрабатывает только одну команду, и, просматривая этот список аргументов, если он не прибегает к злым глобальным переменным, у него нет возможности получить файловый дескриптор из своего PrevCmd или получить файловый дескриптор из своего NextCmd.
Подумайте о том, как управлять дескрипторами файлов, которые вам нужны, и перепроектируйте forkAndExecute
, чтобы иметь возможность их использовать.