2012-03-23 8 views
0

私はコードに問題があり、これが原因で何が起こっているのかわからないので、ナットを運転しています。基本的には、fork()で複数の子プロセスを使用して、開いているファイルに書き込もうとしています。私がフォークを始める前に、私はそれをちょっと書いてもいいですが、フォークした後にif文を実行して子プロセスかどうかを調べます。fprintfを使ってfork()を使ってファイルに出力しない

基本的に、私が持っていることはこれです:それは子プロセスだかどうかを確認するためにチェックした後に書き込むことはできませんなぜ

FILE *output = NULL; 
output = fopen(...); // Done successfully 
fprintf(output, "This writes okay\n"); 
// Fork n processes 
for (i = 0; i <= n; n++) 
{ 
    pid[i] = fork(); 
    fprintf(output, "We can still write\n"); 
    if (pid[i] == 0) // Child process 
    { 
     fprintf(output, "This won't write to output\n"); 
     printf("I can still write and calculate stuff otherwise\n"); 
     ... 
    } 
} 

は、誰もが把握することはできますか?私が見たことから、フォークするのに間違いないことは間違いありません。

答えて

0

ファイルディスクリプタを開き、複数のプロセス(たとえば、親プロセスと子プロセスの両方)で使用すると、race conditionとなる可能性があり、問題や予期しない動作が発生する可能性があります。

+0

まあ、だめです。私は競争条件を忘れていました。この場合、どのような回避策を提案しますか?それが役に立ったら、私がやっていることは何かを計算し、それをファイルに書き出し、フォークを使ってこれをn回繰り返すことです。 –

+0

@ LOL.NO。リンクの示唆している回避策は、フォーク後に親のファイルを閉じて再オープンすることです(またはフォーク後にファイルをオープンするので、継承されません)が、ファイルをどのように使用するかによって異なります(ランダムアクセス/ ) –

+0

ありがとう - それはかなり助けて! –

関連する問題