stdout和stderr關於緩衝區的淺解

stdout(標準輸出),輸出方式是行緩衝。輸出的字符會先存放在緩衝區,等按下回車鍵時才進行實際的I/O操作。
stderr(標準錯誤),是不帶緩衝的,這使得出錯信息可以直接儘快地顯示出來。


#include<stdio.h>
int main()
{
    while(1)
    {
        fprintf(stdout,"Group");
        fprintf(stderr,"XiyouLinux");
        getchar();
    }
}

在Linux環境下我們可以發現第一次會輸出XiYouLinuxGroup,是因爲stdout將輸出的Group放到了緩衝區當中直到程序結束在將緩衝區中的數據刷新出來。


那麼我們再看下一個例子

#include<stdio.h>
int main()
{
    while(1)
    {
        fprintf(stdout,"Group\n");
        fprintf(stderr,"XiyouLinux");
        getchar();
    }
}

輸出結果爲

Group
XiYouLinux

這是什麼原因呢???這個屬於stdout輸出的第二種情況即遇到換行符(“\n”)時輸出,因此在本例中順序輸出了該結果


#include<stdio.h>
void main()
{
    int i;
    for(i=1;i<=100000;i++)
    {
        fprintf(stdout,"Group");
        fprintf(stderr,"XiYouLinux\n");
    }
}

在電腦上面會一直輸出末尾換行的XiYouLinux,直到stdout輸出的字母數累計到1024後將這1024個字母輸出,然後繼續將末尾換行的XiYouLinux輸出,接着等存夠102輸出,如此反覆直到程序結束,將緩衝區中的剩餘字母輸出。
stdout和stderr還有很多其他的一些有趣的操作,在這裏就不多作說明了,寫這篇博客只是希望大家瞭解一些關於這兩個的一些冷門知識。若有不對的地方還請多多指教。

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