-
题目描述
int main()
{
int i;
for (i = 0; i < 5; i++)
{
int pid = fork();
if (pid == 0)
{
//do something;
}
else
{
//do something;
}
}
//do something;
retunr 0;
}
- 解题的关键之处:fork() 一次返回两次,一次是父进程,pid > 0, 也就就是子进程的ID;一次是子进程,pid = 0;
- 解题策略:
- 是利用二叉树的思想画树状图;
-
- 利用二叉树求叶子节点数目的公式:2^n(注:n为循环次数,相当于二叉树的层数)
-
题目答案 32
-
题目描述
int main()
{
for( int i =0;i<5;i++)
{
int pid;
if((pid = fork())==0){
break;
}
}
}
- 破题关键pid == 0; break;这就意味着子进程不会在次fork就会退出循环;
- 解题方法:
-
题目答案 6
-
题目描述
- 破题关键:printf函数是否“\n”; 如果不带,则是全缓冲,带‘\n’,则是行缓存,还有fork()函数调用次数可以参考上面的方法计算。
- 全缓冲,则在main函数调用return 或exit()函数时刷新缓存,全部输出;
- 行缓存则在printf遇到 '\n' 就将缓存刷新输出。
- 解题:
-
题目答案
- 不带 ‘\n’ : 8
- 带 ‘\n’ : 6