標準IO和不帶緩存的IO


分類: Unix編程 42人閱讀 評論(1) 收藏 舉報

最近在看《Unix環境高級編程》,這是自己的一些心得體會。

不帶緩存的IO是什麼,比如read()函數和write()函數,這兩個函數的函數原型如下:


    需要注意的是這兩個函數都有一個參數就是buf,這個參數用來指向讀取或者寫入的地方,通常我們都是自己新建一個數組,用來讀取或者寫入,這就是不帶緩存的IO,需要自己考慮讀取內容的存放位置(或者寫入內容的存放位置),同時還得考慮讀取或者寫入的長度。

    而標準IO是什麼呢?《Unix環境高級編程》中是這麼說的,標準IO函數提供一種對不用緩存的IO函數的帶緩存的界面。讀起來十分拗口,個人的理解就是對不帶緩存IO函數進行打包,提供了一種帶緩存的IO函數。就拿書中舉的例子來說吧,代碼如下:

  1. #include"ourhdr.h"  
  2. int main()  
  3. {  
  4.     int c;  
  5.   
  6.     while((c=getc(stdin)) != EOF)  
  7.     {     
  8.         if((putc(c,stdout)) == EOF)  
  9.             err_sys("put error!");  
  10.     }     
  11.     if(ferror(stdin))  
  12.         err_sys("get error!");  
  13.   
  14.     return 0;  
  15. }  
     這個程序就是用getc()從標準輸入讀取一個字符,存放到c裏面,然後再把c用putc()存放到標準輸出裏面。運行結果如下:


   大家需要注意的是,我輸入了abcdefg之後,程序並沒有立即回顯abcdefg,按下回車之後纔回顯了,那麼此時abcd這四個字符存放到哪裏去了呢?c麼,不可能,c只有4個字節長,存放不下啊!那就是存放到這個函數自帶的緩存裏面了,這就是自帶緩存的IO函數!

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