2013-02-20 32 views
3

我在代码中创建子进程。当我调用fork()时,子进程应该从下一个语句开始执行,但在我的代码中,子进程在fork调用之前执行语句。子进程执行fork调用之前写入的语句

#include<stdio.h> 
int main() 
{ 
int pid; 
FILE *fp; 
fp = fopen("oh.txt","w"); 
fprintf(fp,"i am before fork\n"); 
pid = fork(); 
     if(pid == 0) 
     { 
       fprintf(fp,"i am inside child block\n"); 
     } 
     else{ 
       fprintf(fp,"i inside parent block\n"); 
     } 
fprintf(fp,"i am inside the common block to both parent and child\n"); 
fclose(fp); 
return 0; 
} 

这是它的输出我得到

OUTPUT:

i am before fork 
i inside parent block 
i am inside the common block to both parent and child 
i am before fork 
i am inside child block 
i am inside the common block to both parent and child 

行“我是叉之前”应一次在文件中写的,但它是由孩子写两次,家长。 为什么是这样?

谢谢。

+4

添加'fflush(FP)'你叉掉了。 – 2013-02-20 16:17:17

回答

4

这可能是一个缓冲问题。 fprintf不立即写入文件,而是缓存输出。当你fork,你最终得到两个缓冲区的副本。

尽量分叉,看看是否能解决这个问题之前,做一个fflush(fp)

+0

谢谢nneonneo,使用fflush(fp)可以正常工作 – 2013-02-20 16:19:53

2

我想这是因为你有fprintf打印,它得到缓冲,但不打印,然后它被印在子进程时,缓冲区被刷新。

相关问题