Я создал программу, которая создает 5 циклов и вилки 5 процессов в цикле. Мне удалось отправить данные от родителя к каждому дочернему процессу, когда каждый дочерний процесс перекрывается другой программой. Каждый цикл выполняется следующим образомОтправка данных от родительского к дочернему процессу и наоборот в C
(parent.c):
// Child process - reads from pipe
if (childpid == 0) {
dup2(fd[0], 0); // replace stdin with pipe input
execv("program", arguments);
} else { // Parent process - writes to pipe
write(fd[1], buffer, strlen(buffer)+1);
}
Так что теперь я в состоянии получить данные, которые передаются от родителей к трубе, посредством чтения STDIN_FILENO в программе выполняет childs с execv (...).
Как это (program.c):
char *buffer = (char *)malloc(50);
read(STDIN_FILENO, buffer, 50);
Моя проблема, однако, в том, как я могу отправить данные обратно к родителю? Я думал о чем-то вроде замены stdout на выход трубы с помощью dup2 снова, но я не могу заставить его работать. Я понимаю, что это нужно сделать, прежде чем использовать execv (...) по крайней мере.
Я не уверен, если это объяснение было достаточно, чтобы я мог сделать маленький файл с текстом:)
Это, как это прямо сейчас:
- Родитель - > Труба
- трубы -> процесс по уходу за детьми 1
- трубы -> процесс по уходу за детьми 2
- Pipe -> ...
- Pipe -> Процесс по уходу за детьми 5
Я хочу, чтобы это было так.
- Родитель -> Труба
- Pipe -> Процесс по уходу за детьми 1
- Pipe -> Процесс по уходу за детьми 2
- Pipe -> ...
- Pipe -> Процесс по уходу за детьми 5
- Детский процесс 1 -> Родитель
- Детский процесс 2 -> Родитель
- ...
- процесс по уходу за детьми 5 -> Родитель
Благодарен за помощь!
Вы имеете в виду вопрос 1.5? – Trent
@Trent: Упс, да, я имел в виду 1.5 ... извините .... отредактирует это соответственно ... спасибо за указание. – t0mm13b