2016-06-17 2 views
6

fwrite()は、最初にデータをユーザ空間バッファにバッファリングし、その後実際に書き込み操作を実行するためにwrite()システムコールを呼び出します。プログラムが異常に存在する場合、fwrite()バッファのデータをフラッシュしますか?

プログラムは、ファイルにいくつかのデータを書き込むためにfwrite()を呼び出しますが、その後、異常が存在し、fwrite()のバッファが になります場合はフラッシュ をクリア、またはバッファされたデータがメモリに残されるのですか?

私が検討しているOSはLinuxです。

+0

オペレーティングシステムによって異なる場合があります。 – MikeCAT

+0

@MikeCATIが質問を更新し、OSがLinuxであるとしましょう。 –

+0

多分仕様では言わないので、おそらく未定義です。おそらく 'fflush'はシグナルハンドラを呼び出すのが安全かもしれません。 –

答えて

8

プログラムが異常終了した場合、バッファされたデータはフラッシュされません。 OSはちょうど "ああ、私はあなたがファイルディスクリプタを開いたままにしておいて、私はあなたのために閉じるのが良い"と言っています。プログラムがディスクに書き込むことを意図していたがメモリに書き込まれていなかったランダムなデータがメモリ内のどこかにあることは考えられません。

+0

質問は、具体的には異常終了に関する質問です。あなたの答えの最初の段落は不必要なようです。 – Barmar

+0

@Barmarあなたは正しいです、それはもっと大きな写真を持っていただけでした。編集されました、ありがとうございます – mik1904

+0

Linuxでデータが確実にフラッシュされないことが指定されていますか?私は異常終了条件を期待しています、バッファは_might_または_might_flushされず、おそらく部分的にフラッシュされます。確かに、異常な状態は書面の途中で起きる可能性があります。 – chux

関連する問題