為什麼 printf 印不出東西來?

一個簡簡單單的問題,隨手做個紀錄。下面這個小程式毫無意義可言,簡單來說就是印出 Hello World 以後進入無窮迴圈。
#include 
#include 

int main()
{
    printf( "Hello World!!" );
    
    while(1)
    {
    }
    
    return 0;
}

問題來了,這個 printf 並沒有印出來 Hello World。可是把程式改成下面這個樣子就沒問題了。

#include 
#include 

int main()
{
    printf( "Hello World!!\n" );
    
    while(1)
    {
    }
    
    return 0;
}

這是什麼原因呢?因為 printf 其實只是把東西放到 buffer 當中而不會立刻顯示。buffer 有三種模式,分別是 unbuffered, block buffered, line buffered而預設的 stdout 是 line buffered,所以只有當遇到 '\n' 才會清空 buffer 把內容印出來,而 stderr 預設就是 unbuffered。要確保內容一定印的出來的方法,可以使用 fflush( stdout ),或是乾脆直接輸入下面的函式:

setbuf( stdout, NULL );

留言

這個網誌中的熱門文章

如何將Linux打造成OpenFlow Switch:Openvswitch

我弟家的新居感恩禮拜分享:善頌善禱

Linux Virtual Interface: TUN/TAP