2014-10-11 2 views
0

Я пытаюсь создать рекурсивную функцию, которая использует 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? Вместо использования труб?

ответ

1

попробуйте использовать createTree(level-1); вместо createTree(level--);, так как иногда это может вызвать бесконечные циклы в рекурсивных вызовах.

Смежные вопросы