今天看到這個代碼很簡單,就是驗證一下Linux系統的輸出緩存大小。當
猜一下這個代碼的輸出:
#include <stdio.h>
#include <string.h>
#include <errno.h>
#define N 1025
int
main(int argc, char **argv)
{
char ch;
int count = 0;
char buf[N];
memset(buf, 'a', N);
buf[N-2] = 'b';
buf[N-1] = 'c';
fputs(buf,stdout);
//printf("%s",buf); //備用測試
//fflush(fp); //刷新緩存到輸出
return 0;
}
既然代碼這樣寫了,我們猜想肯定不會完全輸出了,運行結果是:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaab
這個結果的原因是,當緩衝區達到最大時就會自動輸出,在此程序中c沒有輸出,是因爲緩存只有1024字節,c在前1024外,所以再不刷新緩存的情況下,c是不會輸出的。
printf的輸出結果和fputs一樣,printf輸出裏如果加一個換行‘\n’也是可以輸出的(這一點在調試時有時會遇到,printf打印的輸出沒有輸出出來,有可能就是忘了加換行了)。fflush(fp); 函數會把緩存的數據刷新到輸出。
微信公衆號: