【发布时间】:2011-06-04 20:33:08
【问题描述】:
我对 C 很陌生,所以请多多包涵。我为此苦苦挣扎了很长时间,并且很难缩小错误的原因。
我注意到在fork进程和写入文件时(只有原始进程写入文件发生了奇怪的事情,输出几乎乘以fork的数量,很难解释,因此我做了一个小测试代码你可以在哪里运行,它会重现问题。
#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);
}
按原样编译并运行一次,并使用file=stdout 运行一次。写入stdout 时,输出为:
但是当写入文件时,输出是:
测试 测试 测试 测试 测试 测试此外,如果您添加索引并将i 更改为更大的数字,您可以看到某种模式,但这对我没有帮助。
坦率地说,我不知道为什么会发生这种情况,也不知道如何解决。但我完全是 C 的新手,所以这一切可能只是一个正常的逻辑解释 =)。
感谢您的所有时间和回答。
【问题讨论】: