运用fork函数产生的结果不太理解,求解释
答案:2 悬赏:10 手机版
解决时间 2021-02-06 03:46
- 提问者网友:酱爆肉
- 2021-02-05 16:07
=0)&&(strcmp(argv[1],"vfork"!=0))
usage(argv[0]);
if((strcmp(argv[1];
}
else
{
a=1;
printf("
printf(",char**argv)
{
int a;/文件名为run
#include ),a);
exit(0);
}
}
else
{
printf("
printf("In child process ,chage a to %d\n",":run fork
运行结果:
In father process,a=0
you chosed FORK
IN child process,chage a to 1
In father process,a=0
you chosed FORK
In father process,",a);
exit(0);
}
else
{
wait(NULL);fork"
void usage(char*name)
{
printf("Usage: %s fork /vfork\n"
if(mode==0)
{
printf("you chosed FORK\fork"))==0)
mode=0;
else
mode=1;n";
#include
#include <,a=%d\n"n";n",a);
if(fork()==0)
{
a=1;
printf(",a=0
问题;IN child process,chage a to %d \unistd.h>
exit(0);n");
}
if(vfork()==0)
{
a=1;,a);,name);
exit(1);
}
int main(int argc,a);
exit(0);
}
}
shell运行;
int mode;
if(argc!=2)
usage(argv[0]);
if((strcmp(argv[1];
a=0;);In father process;You choosed VFORK\/
最佳答案
- 五星知识达人网友:深街酒徒
- 2021-02-05 17:04
1.因为fork会复制父进程的整个内存空间
2.prinf不是实时的输出到屏幕上,而是先输出到缓冲区中
所以fork复制的时候,会把父进程缓冲区中的“you chosed FORK In father process,a=0”也复制进去
要避免这个情况的话,只需要在
if(fork()==0)之前加上一句
fflush(stdout);
把缓冲区清空就可以了
2.prinf不是实时的输出到屏幕上,而是先输出到缓冲区中
所以fork复制的时候,会把父进程缓冲区中的“you chosed FORK In father process,a=0”也复制进去
要避免这个情况的话,只需要在
if(fork()==0)之前加上一句
fflush(stdout);
把缓冲区清空就可以了
全部回答
- 1楼网友:旧脸谱
- 2021-02-05 18:31
去
再看看别人怎么说的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯