void doWork(){
int fd[2];
int pret = pipe(fd);
close(0);
close(1);
int dret = dup2(fd[1], 1);
close(fd[1]);
while(1){
char buf[256];
system("whoami");
int rret = read(fd[0], buf, 256);
if(/* something interesting */){
return;
}
}
}
int main(int argc, char* argv[]){
int children = 2;
for(unsigned work = 0; work < children; ++work){
pid_t pid = fork();
if(pid == 0){
doWork();
break;
}
}
int status;
wait(&status);
return 0;
}
Что не так с этим примером?Я пытаюсь, чтобы каждый дочерний процесс вызывал внешнюю программу, а затем считывал вывод этой программы из канала.Мой код работает, только когда для детей установлено значение 1.
РЕДАКТИРОВАТЬ: я пытаюсь добиться параллелизма задач с помощью fork / pipe.Нет связи между родительским и дочерним процессами.Каждый дочерний процесс выполняет внешнюю программу, читает выходные данные, обрабатывает выходные данные и продолжает работу до тех пор, пока не будет найден желаемый выходной результат.