我正在尝试创建一个递归函数,该函数使用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那样提供新流程参数?而不是使用管道?
答案 0 :(得分:1)
有时尝试使用createTree(level-1);
代替createTree(level--);
,这会在递归调用中导致无限循环。