gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:08:15 26 4
gpt4 key购买 nike

我正在我的代码中创建子进程。当我调用 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;
}

这是我得到的输出

输出:

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

“i am before fork”这一行应该在文件中写一次,但它被 child 和 parent 写了两次。为什么会这样?

谢谢。

最佳答案

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

尝试在 fork 之前执行 fflush(fp),看看是否能解决问题。

关于子进程执行 fork 调用之前写的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14984646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com