首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C++中的forking创建树结构

使用C++中的forking创建树结构
EN

Stack Overflow用户
提问于 2014-03-06 07:03:17
回答 1查看 1K关注 0票数 1

我已经被困在这几天了。我必须使用fork()函数编写以下树结构。有什么建议吗?这就是我到目前为止所知道的:

代码:

代码语言:javascript
复制
   #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); }

树形结构:

代码语言:javascript
复制
         A
   B           C
D            E   F
EN

回答 1

Stack Overflow用户

发布于 2014-03-10 11:37:50

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

代码语言:javascript
复制
#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;
}

输出示例:

代码语言:javascript
复制
$ ./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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22211321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档