1. 程式人生 > >程式進度條分析及程式設計

程式進度條分析及程式設計

   在printf的實現中有一步呼叫write的操作。而write是一個系統呼叫,系統呼叫是軟中斷,頻繁呼叫會使核心頻繁陷入核心態,效率不是很高,所以printf的實現中在呼叫write之前,加了一個IO緩衝區。printf輸出資料的時候實際上是先往使用者空間的IO緩衝區寫,在滿足條件的情況下才會呼叫write並且重新整理緩衝區,這樣會提高核心工作的效率。 
 滿足條件的情況有以下幾種:

  1. 緩衝區填滿;
  2. 寫入的字元中有‘\n’;
  3. 呼叫fflush函式手動重新整理緩衝區;
  4. 呼叫scanf要從緩衝區中讀資料時,也會將緩衝區的資料重新整理;
  5. printf語句生命結束時;

滿足上面任意一個條件,緩衝區都會進行重新整理,然後將資料輸出至螢幕。緩衝區的大小一般為1024bytes,我們進度條的實現最多輸出不到150個字元而且後面還不能加‘\n’換行符。所以我們只能在每次printf後面呼叫fflush手動重新整理IO緩衝區,以達到在sleep之前輸出printf內容的目的。

    

如上圖所示,該輸出結果的3秒後才輸出 hehe


修改後 正常瞬間輸出