Linux輸出緩存你知道多大嗎?

今天看到這個代碼很簡單,就是驗證一下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); 函數會把緩存的數據刷新到輸出。

 

微信公衆號:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章