Sun Studio 12 Update 1: C++ ユーザーズガイド

14.3.10 iostreamstdio の併用

C++ プログラムでも stdio を使用できますが、プログラムで iostreamstdio とを標準ストリームとして併用すると、問題が起こる場合があります。たとえば stdoutcout の両方に書き込んだ場合、個別にバッファリングされるため出力結果が設計したとおりにならないことがあります。stdincin の両方から入力した場合、問題はさらに深刻です。個別にバッファリングされるため、入力データが使用できなくなってしまいます。

標準入力、標準出力、標準エラーに関するこのような問題を解決するためには、入出力に先立って次の命令を実行します。次の命令で、すべての定義済み iostream が、それぞれ対応する定義済み stdio FILE に結合されます。


ios::sync_with_stdio();

このような結合を行うと、定義済みストリームが結合されたものの一部となってバッファリングされなくなってかなり効率が悪くなるため、デフォルトでは結合されていません。同じプログラムでも、stdioiostream を別のファイルに対して使用することはできます。すなわち、stdio ルーチンを使用して stdout に書き込み、iostream に結合した別のファイルに書き込むことは可能です。また stdio FILE を入力用にオープンしても、stdin から入力しないかぎりは cin からも読み込むことができます。