叉子及其功能?

时间:2012-12-09 22:08:38

标签: c fork

我有以下代码,并被问到将打印多少次“A”,“B”,“C”,“D”,“E”

fun() {
  printf("A");
  fork();
  printf("B");
  if (fork() != 0) {
     printf("C");
     fork();
     printf("D");
  }
  printf("E");
}

所以它应该是:

A
A 
B
E

我不确定上面的答案是否正确?行if(fork() !=0 )做了什么?

3 个答案:

答案 0 :(得分:6)

来自documentation

  

成功时,子进程的PID在父进程中返回,并在子进程中返回0。失败时,在父项中返回-1,不创建子进程,并正确设置errno。

答案 1 :(得分:4)

1个线程打印a,2个线程打印b。 2个分叉中的每一个,但只有2个父母进入if语句并打印c。这两个fork和所有4个proc中的每一个都打印d。然后,每个6个触发器(来自if-fork的两个子节点和4个线程如果打印出来的话。

您无法确定订单,但每个字母的数量为:

A x1

b x2

c x2

d x4

e x6

答案 2 :(得分:2)

if (fork() != 0) { ... }正在检查以确保当前进程不是原始分叉过程的子进程。只有父进程才会执行此块中的代码。

这是有效的,因为fork()在父进程中返回一个PID,在子进程中返回0,在出错时返回-1。