5
我对C非常陌生,请耐心等待。我很长时间都在苦苦挣扎,我很难缩小错误的原因。C写入文件时奇怪的异常(写入标准输出时正常工作)
我注意到,当分叉进程和写入文件(只有原始进程写入文件发生了奇怪的事情,输出几乎乘以叉的数量,很难解释,因此我做了一个小测试代码在那里你可以file=stdout
运行,它再现了问题
#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);
}
编译并运行它,一旦它的方式是,一旦当写stdout
输出为:。
test test test
但写作时到f ILE输出为:
test test test test test test
此外,如果你添加索引和变更i
到一个更大的数字,你可以看到某种模式,但这并不能帮助我。
坦率地说,我不知道为什么会发生这种情况,既不知道如何解决这个问题。但我是C的新手,所以这可能只是一个正常的逻辑解释=)。
谢谢你的所有时间和答案。
非常感谢您的快速回答。我花了很多时间检查所有的代码,甚至当我注意到这一点时,我仍然不知道它是什么。现在我觉得有点愚蠢,但嘿,每个人都需要学习。再次感谢。 – Ben 2011-06-04 20:52:48
POSIX中的相关文本在这里:http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_05_01 – 2011-06-04 21:22:22
不应该'printf(“Child \ n”);'互斥体锁定? – farhanhubble 2011-06-06 19:33:43