2010-12-29 27 views
1

デフォルトでは、STDOUTはバッファされていませんか?デフォルトのバッファリングのタイプはバッファリング標準出力(STDOUT)

おかげ

+2

どの言語/環境ですか? –

+1

質問があります。詳細が必要です。 –

+0

UNIX環境でのSTDOUT。 –

答えて

5

何でない場合は、言語を与えていますが、Cのstdio関数(fopen()など)、またはこれらを使用する言語を使用していると仮定して(としませんでしたほとんどの場合、移植性の理由から):

基本的なCランタイムライブラリによって異なります。

ほとんどのライブラリは、STDOUTが端末に接続されているかどうかを検出し、そうであればバッファリングを回避し、そうでない場合はブロックバッファリングを行います(たとえば、私のLinuxシステムは一度に8Kbをバッファリングします)。

+1

です。これが間違っていることを確かめてください。 'stdout'は通常、バッファされていない端末に接続されているときにラインバッファされます。すべての出力が改行で終わると、その差は無関係ですが、改行なしで出力している場合(例えば、一度に出力することによって "進捗バー"を表示している場合)、バッファリングされます。必要に応じて部分行を出力するには 'fflush'を明示的に呼び出す必要があります。また' setvbuf'を使用して 'FILE * 'のバッファリングモードを変更するのが一般的です。 – ShadowRanger

+0

@ShadowRanger:そうです、編集して追加してください。 –

1

短答:デフォルトでは、STDOUTは通常バッファリングされません。これが問題の場合は、fflush(stdout);がありますが、まれにが必要です

+0

また、受け入れられた答えに記されているように、 'stdout'は、通常、端末に接続されたときにラインバッファされ、そうでない場合はブロックされます。私が気付いている共通のCランタイムは、デフォルトではバッファリングされていません。 – ShadowRanger

関連する問題