Я создаю простую оболочку в c с помощью fork и execlp. Мне будет предоставлен набор команд, разделенных трубами. например: ls -l | wc-1. Я пытаюсь реализовать простую программу оболочки с использованием c. По какой-то странной причине, я получаю ошибку обрыва трубы.Причина сломанной трубы в c
void excueteCommand(commandNode* head, int input) {
int pfds[2] = { -1, -1 };
if (head->next != NULL) {
pipe(pfds);
}
if (fork() == 0) { /* child */
if (input != -1) {
dup2(input, 0);
close(input);
}
if (pfds[1] != -1) {
dup2(pfds[1], 1);
close(pfds[1]);
}
if (pfds[0] != -1) {
close(pfds[0]);
}
execlp(head->command, head->args, NULL);
exit(1);
}
else { /* parent */
if (input != -1) {
close(input);
}
if (pfds[1] != -1) {
close(pfds[1]);
}
if (head->next != NULL) {
thePipenizer(head->next, pfds[0]);
}
}
}
убедитесь, что процесс на самом деле forking '(result = fork()) == -1' – motoku
Forking работает, потому что я жду статуса и есть два процесса, но я не получаю никакого вывода ... – jrdnsingh89