Я пытаюсь создать рекурсивную функцию, которая использует fork() для создания двоичной древовидной структуры отцовско-дочерних процессов с учетом количества уровней дерева. До сих пор у меня есть:Двоичное дерево процессов
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
void createTree(int level){
pid_t leftson;
pid_t rightson;
if (level > 1){
if ((leftson = fork()) < 0) {
perror("fork:");
exit(1);
} // Create the first son
if (leftson == 0){
createTree(level--);
} // If I'm the left son, continue biulding the structure
else { // I'm father
if ((rightson = fork()) < 0) {
perror("fork:");
exit(1);
} // Create right son
if (rightson == 0){
createTree(level--);
} // I'm right, continue building
else printf("created my 2 sons"); // I'm the father
}
}
else if (level == 1){
printf("end of tree");
}
}
void main(){
createTree(3);
}
Проблема заключается в том, что программа входит в бесконечный цикл создания процессов, так как переменная уровня никогда не уменьшается, я имею в виду с помощью труб, но я не знаю, как их использовать когда есть так много процессов.
Кроме того, Есть ли способ дать новые аргументы процессов, как я хотел бы от bash? Вместо использования труб?