gpt4 book ai didi

c - 叉树 C 程序

转载 作者:太空宇宙 更新时间:2023-11-04 08:05:04 28 4
gpt4 key购买 nike

我正在尝试创建叉 TreeMap ,但仍然没有成功。这是我的代码:

#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);
}

我想创建如下图:

Fork Tree Diagram

这是输出看起来像:

Output

如有任何帮助,我们将不胜感激。

最佳答案

代码是这样的,你应该为每个新的子进程派生两个子进程,直到达到目标深度级别, fork 两个子进程后,父进程必须退出系统,只有新的子进程才能创建新进程,

可以通过查看childpid(fork的返回值)来丢弃父进程

  #include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <math.h>

int main(int argc, char *argv[])
{

pid_t childpid;
int i, n;
if (argc != 2) {
fprintf(stderr, "Usage: %s n\n", argv[0]); return 1;
}
n = atoi(argv[1]);
childpid=-1;
for (i = 1; i <= n; i++){

int b;
for(b=0;b<2;b++)
{
childpid=fork();
if (childpid <= 0) break;

}
if (childpid > 0) break;

}
while(wait(NULL) > 0) ; /* wait for all of your children */


fprintf(stderr, "i:%d process ID:%ld parent ID:%ld child ID:%ld\n",i, (long)getpid(), (long)getppid(), (long)childpid);
return 0;
}

代码的输出是这样的

└──╼ $./fork.o 2
i:3 process ID:23913 parent ID:23911 child ID:0
i:3 process ID:23915 parent ID:23911 child ID:0
i:3 process ID:23914 parent ID:23912 child ID:0
i:3 process ID:23916 parent ID:23912 child ID:0
i:2 process ID:23911 parent ID:23910 child ID:23915
i:2 process ID:23912 parent ID:23910 child ID:23916
i:1 process ID:23910 parent ID:23277 child ID:23912

关于c - 叉树 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43419109/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com