Linux中輸入輸出緩衝區的重新整理

2021-09-02 23:46:20 字數 695 閱讀 6255

我們知道printf()函式有buff緩衝區,但是這個緩衝區是怎麼工作的呢。

其實我們程式有scanf或gets等這種輸入函式的時候,有沒有發現,當我們輸入字串等資料在視窗的時候,並不會立馬輸出我們的字元,需要我們繼續按下回車或別的與字串無關的操作才能使字串列印至螢幕。

這就是因為這些輸入函式(scanf,gets等)擁有輸入緩衝區。類似printf和puts的輸出函式也有輸出緩衝區。

例如下面的函式:

int main()

此函式就不會立馬列印hello,而是等待5秒後出現helloworld,這就是輸出緩衝區在作用。

當printf讀進字串的時候,並不會馬上列印,而是先儲存在buff裡面,當遇到下面4種條件的時候才進行列印:

1、程式結束    return 0;  或 exit(0);

2、遇到」\n」

3、主動重新整理 fflush(stdout);

4、緩衝區滿

所以,hello只是被儲存在了緩衝區裡,沒有遇到上面條件的一種,這就是為什麼會先等待,後出現helloworld。

當在第乙個printf裡加入」\n」,之後就會先列印hello,之後等待5秒,換行繼續列印world

ps:為什麼要引入緩衝區,是因為進行使用者態和核心態的切換過於麻煩,引入緩衝區可以使系統更加有效率的執行,具體內容可以參考系統呼叫與檔案操作。

Redis 輸入輸出緩衝區

id 客戶端連線的唯一標識,這個id是隨著redis的連線自增的,重啟redis後會重置為0 addr 客戶端連線的ip和埠 fd socket的檔案描述符,與lsof命令結果中的fd是同乙個,如果fd 1代表當前客戶端不是外部客戶端,而是redis內部的偽裝客戶端。name 客戶端的名字,後面的c...

輸入緩衝區與輸出緩衝區

本博文通過一段程式來理解輸入緩衝區與輸出緩衝區。程式如下 author wanghao created time thu 17 may 2018 06 03 12 ampdt file name test.c description include int main int argc,const c...

C語言標準輸入輸出緩衝區

緩衝區特徵 緩衝例項 file結構定義 參考資料 緩衝區又稱為快取,它是記憶體空間的一部分。也就是說,在記憶體空間中預留了一定的儲存空間,這些儲存空間用來緩衝輸入或輸出的資料,這部分預留的空間就叫做緩衝區。緩衝區根據其對應的是輸入裝置還是輸出裝置,分為輸入緩衝區和輸出緩衝區。為什麼要引入緩衝區 比如...