我试图创建叉树图,但仍然没有成功。这是我的代码:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

void procStatus(int level) {
   printf("L%d: PID[%d] (PPID[%d])\n", level, getpid(), getppid());
   fflush(NULL);
}

void levelFork(int *level) {
   if (fork() == 0)
      (*level)++;
   wait(NULL);
}

void main() {
   int level = 0;
   procStatus(level);
   levelFork(&level);
   procStatus(level);
}

我想创建如下图片:
c - 叉树C程序-LMLPHP
输出如下:
c - 叉树C程序-LMLPHP
任何帮助都将不胜感激。

最佳答案

您需要一种方法来指定最大深度,然后使用它来派生新进程。一旦你完成叉子,你可以开始打印。下面的代码片段应该可以工作

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

void procStatus(int level) {
   printf("L%d: PID[%d] (PPID[%d])\n", level, getpid(), getppid());
   fflush(NULL);
}

void levelFork(int *level,int maxlevel) {
  int locallevel= *level;
   while(locallevel!=maxlevel){
      int pid = fork();
      if (pid  == 0){
         (*level)++; // childs level is higher
         levelFork(level,maxlevel);
         return;
      }
     locallevel++;
     wait(NULL);
   }
}

void main() {
        int level = 0;
        int maxlevel=3;

        levelFork(&level,maxlevel);
        procStatus(level);
}

10-07 13:47