我对C很新,所以请耐心等待.我很长时间都在苦苦挣扎,我很难缩小错误原因.
我注意到,当分叉进程和写入文件时(只有原始进程写入文件时发生奇怪的事情,输出几乎乘以分叉数,难以解释,因此我做了一个小的测试代码,你可以运行并重新创建问题.
#include <stdio.h>
#include <stdlib.h>
void foo()
{
FILE* file = fopen("test", "w");
int i=3;
int pid;
while (i>0)
{
pid=fork();
if(pid==0)
{
printf("Child\n");
exit(0);
}
else if(pid > 0)
{
fputs("test\n", file);
i=i-1;
}
}
}
int main()
{
foo();
exit(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)
编译并按原样编译并运行一次file=stdout.写入stdout输出时是:
test test test
但是当写入文件时输出是:
test test test test test test
此外,如果您添加索引并更改i为更大的数字,您可以看到某种模式,但这对我没有帮助.
坦率地说,我不知道为什么会发生这种情况,也不知道如何解决这个问题.但我是C的新手,所以这可能只是一个正常的逻辑解释=).
谢谢你所有的时间和答案.