gpt4 book ai didi

c - 在 C 中使用 fork 创建树结构

转载 作者:太空宇宙 更新时间:2023-11-04 04:44:55 24 4
gpt4 key购买 nike

我已经坚持了好几天了。我必须使用 fork() 函数编写以下树结构。有什么建议么?这是我目前所拥有的:

代码:

   #include <stdio.h>
#include <stdlib.h>
main ()
{
int pid;
pid = fork();
//Child
if (pid == 0){
if ((pid = fork()) == 0)
{
printf("GrandChild: child pid = % d, my pid = %d, parent pid = %d \n",
pid, getpid(), getppid());
}
}
exit(0); }

树结构:

         A
B C
D E F

最佳答案

下面的代码应该创建你想要的树结构。每个进程派生其子进程,运行一些所需的代码,然后等待任何/所有子进程完成运行:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

#define printPID printf("my pid = %d, parent pid = %d\n", getpid(), getppid());

void fork_error() {
perror("Failed to fork.");
exit(1);
}

void fork_child(void (*f)()) {
int pid;
if ((pid = fork()) == 0) {
f();
wait(NULL);
exit(0);
} else if (pid < 0) {
fork_error();
}
}

/* Function prototypes */
void A(), B(), C(), D(), E(), F();

void A() {
fork_child(B);
fork_child(C);
/* Code for A goes here */
printPID;
wait(NULL);
}

void E() {
/* Code for E goes here */
printPID;
}

void F() {
/* Code for F goes here */
printPID;
}

void C() {
fork_child(E);
fork_child(F);
/* Code for C goes here */
printPID;
}

void D() {
/* Code for D goes here */
printPID;
}

void B() {
fork_child(D);
/* Code for B goes here */
printPID;
}

int main(int argc, char *argv[]) {
A();
return 0;
}

示例输出:

$ ./a.out
my pid = 17365, parent pid = 14178
my pid = 17366, parent pid = 17365
my pid = 17369, parent pid = 17367
my pid = 17368, parent pid = 17366
my pid = 17367, parent pid = 17365
my pid = 17370, parent pid = 17367

如果您还需要每个节点/进程中的子 PID,则让 fork_child() 返回一个包含子 PID 的 int。

关于c - 在 C 中使用 fork 创建树结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22211321/

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