例1
#include <stdio.h>
#include <unistd.h>
int main()
{
printf("a");
printf("b");
sleep(5);
printf("c");
printf("d");
return 0;
}
這段代碼字面上看衅疙,是先輸出a
、b
杖狼,然后等待5秒炼蛤,再輸出c
、d
蝶涩。
然而實際上:
它在運行時沒有直接輸出
a
理朋、b
絮识,等5秒,而是直接5秒后一次性輸出abcd
嗽上。這是因為printf在打印到標準輸出時次舌,先寫到緩沖區(qū),直到遇到\n
或者\r
才會刷新緩存區(qū)兽愤,打印到屏幕上彼念。
刷新緩沖區(qū)的條件:
- 緩沖區(qū)填滿;
- 寫入的字符中有‘\n’浅萧, '\r'逐沙;
- 調(diào)用fflush手動刷新緩沖區(qū);
- 調(diào)用scanf要從緩沖區(qū)中讀取數(shù)據(jù)時洼畅,也會將緩沖區(qū)內(nèi)的數(shù)據(jù)刷新吩案。
下面例子來進行演示:
例2
#include <stdio.h>
#include <unistd.h>
int main()
{
printf("a");
printf("b");
fflush(stdout);
sleep(5);
printf("c");
printf("d");
return 0;
}
其它情況大家可自己測試。