誰か説明してくれませんか、正確にはどういう意味ですか? clog
との違いを理解しようとしていますcerr
。違いはバッファリングのみです 事前に感謝します
2 に答える
clog に書き込むと、実際にはメモリ内の文字ストアに書き込みます。このストアがいっぱいになると、実際のストリームに書き込みます。ストリームが閉じられると (プログラムの終了時に発生します)、残りのデータがストリームに書き込まれます (手動フラッシュも発生する可能性があります)。
cerr では、これは起こりません。
原則として、メモリへの書き込みはほとんどのストリームへの書き込みよりも高速であるため、バッファリングの効果はパフォーマンスの全体的な向上です。これは常に当てはまるとは限りません (古典的な例は、間接的なレベルがバッファーへのバッファー書き込みにつながる場合です) が、多くの場合、これは妥当なデフォルトで十分です。ただし、結果として、ストリーム オブジェクトが書き込まれてから実際のストリームに書き込まれるまでの間に遅延が発生する可能性があり、これは場合によっては不適切です。
cerr への書き込みには迅速なアクションが必要であると想像するのは合理的ですが、clog への書き込みはそうではないため、違いが生じます。
clog と cerr の違いは、clog は完全にバッファリングされるのに対し、cerr への出力は各フォーマット後に外部デバイスに書き込まれることです。完全にバッファリングされたストリームでは、実際の外部デバイスへの出力は、バッファがいっぱいになったときにのみ書き込まれます。したがって、clog は出力をファイルにリダイレクトするのにより効率的ですが、cerr は主に端末 I/O に役立ちます。フォーマットのたびに外部デバイスに書き込み、cerr の場合は端末に書き込むことで、端末への出力と入力を同期させることができます。また、事前定義されたストリームは、関連する C 標準ファイルと同期されます。