C 子进程执行fork调用之前编写的语句

C 子进程执行fork调用之前编写的语句,c,fork,ipc,C,Fork,Ipc,我正在代码中创建子进程。当我调用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)

我正在代码中创建子进程。当我调用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;
}
行“我在fork之前”应该在文件中写入一次,但它由子级和父级写入两次。 为什么会这样


谢谢。

我想这是因为您使用
fprintf
打印,它被缓冲但未打印,然后在刷新缓冲区时在子进程中打印。

这可能是缓冲问题
fprintf
不会立即写入文件,而是缓冲输出。当您使用
fork
时,将得到缓冲区的两个副本

在分叉之前尝试执行
fflush(fp)
,看看这是否解决了问题。

在分叉之前添加
fflush(fp)
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