これputs
は、インタラクティブであると判断できるデバイスでは、デフォルトでフラッシュを引き起こす改行文字も出力しているためです (標準出力の場合) (a)。
printf
最初に最後に改行を出力すると、同様の効果が見られるはずです。
printf("hello, world\n");
またはあなたが電話fflush (stdout);
の前にいる場合。sleep()
の関連部分C11
は7.21.3 Files
、セクション/7
です。
プログラムの起動時に、3 つのテキスト ストリームが事前定義されており、明示的に開く必要はありません。標準入力 (従来の入力を読み取るため)、標準出力 (従来の出力を書き込むため)、および標準エラー (診断出力を書き込むため) です。最初に開いたとき、標準エラー ストリームは完全にバッファリングされていません。標準入力および標準出力ストリームは、ストリームが対話型デバイスを参照していないと判断できる場合にのみ、完全にバッファリングされます。
これは、次の時代にまでさかのぼりますC89/90 4.9.3 Files
。
プログラムの起動時に、3 つのテキスト ストリームが事前定義されており、明示的に開く必要はありません --- 標準入力 (従来の入力を読み取るため)、標準出力 (従来の出力を書き込むため)、および標準エラー (診断出力を書き込むため)。開いたとき、標準エラー ストリームは完全にはバッファリングされません。標準入力および標準出力ストリームは、ストリームが対話型デバイスを参照していないと判断できる場合にのみ、完全にバッファリングされます。
(a) : それほど単純ではありません。手始めに、これは実装依存です。なぜなら、標準では、対話型デバイスを構成するものは実装依存であると述べられているからです (動作は指定されていますが、その動作に影響を与えるものは指定されていません)。
第 2 に (ここのように)、標準は、標準出力が完全にバッファリングされたとき (デバイスが明らかにインタラクティブでないとき) にのみ義務付けます。対話型デバイス用にバッファなしにするかライン バッファリングするかは、実装上の決定事項です。