Linux標準IO庫緩衝策略介紹

來源:互聯網
上載者:User

標準IO庫操作是圍繞著流來進行的,當我們通過fopen標準IO庫函數開啟一個檔案,我們就使一個檔案和一個IO流相關聯。在這裡我們把IO流和檔案指標FILE*等同起來,因為所有針對IO流的操作都是通過FILE*指標來實現的。

    我們知道引入標準IO庫的目的是為了提高IO的效率,避免頻繁的進行read/write系統調用,而系統調用會消耗較多的資源。因此標準IO庫引入了IO緩衝,通過累積一定量的IO資料後,然後集中寫入到實際的檔案中來減少系統調用,從而提高IO效率。標準IO庫會自動管理內部的緩衝,不需要程式員介入。然而,也正是因為我們看不到標準IO庫的緩衝,有時候會給我們帶來一定的迷惑性。這裡介紹下標準IO庫的緩衝策略。

    一。標準I/O的緩衝--標準輸出為例:(這裡都是指預設情況下)

    1)當STDOUT串連到終端裝置時,那麼它就是行緩衝的,也就是標準IO庫沒看到一個新行符 /n時就重新整理一次緩衝(即執行一次實際的輸出操作)。這一特性可以通過如下測試代碼來驗證

   int main()
  {
      printf("This Line Should be Cached...");
      sleep(3);    //這時候在終端上是看不到任何輸出
      printf("/nThis Line Should be Cached Again");  //這時候可以看到第一個printf的輸出,因為被分行符號重新整理了
      sleep(3);  //這時候也只能看到一行輸出,而看不到第二個printf輸出的
      printf("This Line Should Not be Cached Again/n"); //這時候可以看到第二個和第三個printf的輸出,因為被結尾的/n重新整理
      sleep(3);
      getchar();
  }

  2)當STDOUT被重新導向到一個具體檔案時,那麼標準輸出是全緩衝的,也就是說只有當輸出緩衝被塞滿或者調用fflush或fclose時才會執行實際的寫入操作,這裡就不給出具體例子,可以通過freopen將STDOUT重新導向到一個具體檔案來進行測試。

   二。標準出錯STDERR:為了儘快的看到出錯資訊,標準出錯是不帶任何緩衝的

 

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/whrail/archive/2010/09/01/5856083.aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.