最近在看《Unix環境高級編程》,這是自己的一些心得體會。
不帶緩存的IO是什麼,比如read()函數和write()函數,這兩個函數的函數原型如下:
需要注意的是這兩個函數都有一個參數就是buf,這個參數用來指向讀取或者寫入的地方,通常我們都是自己新建一個數組,用來讀取或者寫入,這就是不帶緩存的IO,需要自己考慮讀取內容的存放位置(或者寫入內容的存放位置),同時還得考慮讀取或者寫入的長度。
而標準IO是什麼呢?《Unix環境高級編程》中是這麼說的,標準IO函數提供一種對不用緩存的IO函數的帶緩存的界面。讀起來十分拗口,個人的理解就是對不帶緩存IO函數進行打包,提供了一種帶緩存的IO函數。就拿書中舉的例子來說吧,代碼如下:
這個程序就是用getc()從標準輸入讀取一個字符,存放到c裏面,然後再把c用putc()存放到標準輸出裏面。運行結果如下:
- #include"ourhdr.h"
- int main()
- {
- int c;
- while((c=getc(stdin)) != EOF)
- {
- if((putc(c,stdout)) == EOF)
- err_sys("put error!");
- }
- if(ferror(stdin))
- err_sys("get error!");
- return 0;
- }
大家需要注意的是,我輸入了abcdefg之後,程序並沒有立即回顯abcdefg,按下回車之後纔回顯了,那麼此時abcd這四個字符存放到哪裏去了呢?c麼,不可能,c只有4個字節長,存放不下啊!那就是存放到這個函數自帶的緩存裏面了,這就是自帶緩存的IO函數!