68user's page 掲示板

Prev< No. 3115〜3116> Next  [最新発言に戻る] [過去ログ一覧]
No. 3115 # koko 2003/02/24 (月) 19:36:35
親プロセスでFILE* fpに対してファイルをオープンします。
その後、forkで子プロセスを生成し、子プロセスですぐにfclose(fp)を行います。(子プロセスではファイルを使用しない為。)
子プロセスでファイルをfcloseした後、親プロセスでは引き続きfpに対して読み込みや書き込みを行えるでしょうか。
ファイルディスクリプタは、子プロセスで閉じても親プロセスに影響無いようですが、ファイルポインタは共有されている(?)様なので影響がありそうな気がするのですが、いかがでしょうか。
■知りたい事
1.最終的に親と子でそれぞれfclose(fp)を行う必要があるか。
    (開いたものは必要であれば明示的に閉じるようにしたい。)
2.子プロセスでfcloseしても、親プロセスのfpに影響がないか。

よろしくお願い致します。

No. 3116 # 68user 2003/02/24 (月) 19:55:02
>>3115 koko
> 1.最終的に親と子でそれぞれfclose(fp)を行う必要があるか。
> 2.子プロセスでfcloseしても、親プロセスのfpに影響がないか。

fork したときの出力用バッファにデータがたまっていれば、子の
fclose でバッファがフラッシュされます。そこで親も fclose すれば
同じ内容のバッファがファイルに出力され、同じ内容のデータが
2回書かれることになります。

なお fclose(3) しなかったとしても、exit(3) すれば結局は fclose されます。
# _exit(2) ならされません。

よって、
    1. fflush(fp)
    2. fork
    3. 子は fclose (*A)、親は引き続き fp を使う
がよろしいかと。

*A は、してもしなくても変わりませんが、子で使わないという
意志を明確に示すために fclose(3) した方がよいと僕は思います。

Prev< No. 3115〜3116> Next  [最新発言に戻る] [過去ログ一覧]