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