如何在c中解决这个fork()示例,

时间:2013-03-10 22:11:37

标签: c fork

我应该计算出这段代码来告诉输出我的作业。有人可以帮帮我吗?我不是在寻找答案,而是一步一步地说明如何理解这一点。

 int main() 
 { 
     int pid; 
     int val = 5; 

     pid = fork(); 

     if (pid == 0) val += 3; 

     if (val == 5) val++; 

     printf(“val=%d\n”, val); 
     exit(0); 
 }

2 个答案:

答案 0 :(得分:1)

代码将打印以下三个选项之一:

val=6
val=8
val=6
val=6
val=8

这取决于哪个write()系统调用首先完成:子级或父级,以及子进程是否成功创建(可能会失败)。

答案 1 :(得分:-1)

pid = fork(); 
if (pid == 0) val += 3; 
if (val == 5) val++; 
printf(“val=%d\n”, val);

案例1:在fork()之后,家长会在孩子面前安排,并成功完成printf()来电

    val = 6;         //printed by parent
    val = 8;         //printed by child

案例2:在fork()之后,父级在子级之前被安排,并且成功完成了printf()调用

    val = 8;         //printed by child
    val = 6;         //printed by parent

- printf()fork() -

的问题
#include<stdio.h>
#include <sys/types.h>

int main()
{
    printf("Before forking");
    pid_t pid = fork();

    if (pid == 0)
        printf("child printing");
    else
        printf("parent printing");
}

输出

term# ./a.out 
Before forkingparent printingBefore forkingchild printing

上面的问题很明显,“在分叉之前”这句话被打印两次,它应该只打印一次。

解决方案是

  1. 使用'\n',在每次printf()来电后缓冲每一行。

  2. 正确建议here调用fflush(0),在分叉前清空所有I / O缓冲区。