如何解决如何使用fork查找程序的输出
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main(int argc,const char * argv[]) {
for(int i = 0; i < 2; i++){
if(fork() == 0){
fork();
printf("c");
}
else{
fork();
printf("p");
}
}
}
我想计算p和c分别打印多少次,这是我的工作。
为i == 0绘制过程树:
P
/ \
C1 P
/ \ / \
C2 C1 C3 P
我称其为子树。在一个子树中,P给出p,C3给出c,C1给出p,C2给出c。在第二次迭代中,每个叶子将拥有一个这样的子树,因此最终我们将总共有5个子树。由于一个子树给出2 p,2 c,所以5个子树给出10 p,10 c。但这是错误的。
出了什么问题?
更新: 我发现我犯了一个错误,这是更正:P给出p,C3给出p,C1给出c,C2给出c。
解决方法
在第一次迭代中,C2 C1各自给出“ c”,C3 P各自给出“ p”。当进行第二次迭代并开始调用fork()时,将为孩子复制父级的打印缓冲区。
例如,作为第二次迭代的结果,我们有5个“子树”。考虑到根为C2(深度= 2)的子树,从缓冲区中,我们将分别为叶子留下c c c c c。同样,从fork(),我们将分别获得叶子的c c p p。因此,实际上,该子树的每个叶子将分别赋予cc cc cp cp。
以类似的方式重复此过程,我们最终将获得16个'c'和16个'p'。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。