永发信息网

运用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);
把缓冲区清空就可以了
全部回答
  • 1楼网友:旧脸谱
  • 2021-02-05 18:31
去 再看看别人怎么说的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯