我应该计算出这段代码来告诉输出我的作业。有人可以帮帮我吗?我不是在寻找答案,而是一步一步地说明如何理解这一点。
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);
}
答案 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
上面的问题很明显,“在分叉之前”这句话被打印两次,它应该只打印一次。
解决方案是
使用'\n'
,在每次printf()
来电后缓冲每一行。
正确建议here调用fflush(0)
,在分叉前清空所有I / O缓冲区。