標準IO和不帶快取的IO

2021-06-26 06:02:31 字數 925 閱讀 4731

分類: unix程式設計

2014-09-17 00:47

42人閱讀收藏 

舉報io快取c

最近在看《unix環境高階程式設計》,這是自己的一些心得體會。

不帶快取的io是什麼,比如read()函式和write()函式,這兩個函式的函式原型如下:

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

而標準io是什麼呢?《unix環境高階程式設計》中是這麼說的,標準io函式提供一種對不用快取的io函式的帶快取的介面。讀起來十分拗口,個人的理解就是對不帶快取io函式進行打包,提供了一種帶快取的io函式。就拿書中舉的例子來說吧,**如下:

[cpp]view plain

copy

#include"ourhdr.h"

intmain()  

if(ferror(stdin))  

err_sys("get error!"

);  

return

0;  

}        這個程式就是用getc()從標準輸入讀取乙個字元,存放到c裡面,然後再把c用putc()存放到標準輸出裡面。執行結果如下:

大家需要注意的是,我輸入了abcdefg之後,程式並沒有立即回顯abcdefg,按下回車之後才回顯了,那麼此時abcd這四個字元存放到**去了呢?c麼,不可能,c只有4個位元組長,存放不下啊!那就是存放到這個函式自帶的快取裡面了,這就是自帶快取的io函式!

不帶快取的I O和標準 帶快取的 I O

ssize t write int fd,const void buf,size t count 寫操作時,設每次寫入長度count 10個位元組,那麼你幾要呼叫10次這個函式才能把這個緩衝區寫滿,此時資料還是在緩衝區,並沒有寫入到磁碟,緩衝區滿時才進行實際上的io操作,把資料寫入到磁碟上,所以上面...

帶快取IO和不帶快取IO

ssize t write int fd,const void buf,size t count 寫操作時,設每次寫入長度count 10個位元組,那麼你幾要呼叫10次這個函式才能把這個緩衝區寫滿,此時資料還是在緩衝區,並沒有寫入到磁碟,緩衝區滿時才進行實際上的io操作,把資料寫入到磁碟上,所以上面...

標準IO快取

linux的io操作學習總結如下 一 linux對io檔案操作的方式 1.不帶快取 如open read等。這是posix標準,在使用者空間沒有快取,在核心空間還是將進行快取。以寫資料時為例,先呼叫write 函式將資料寫入記憶體緩衝區,可能會呼叫write 多次之後才會將核心空間的緩衝區寫滿,寫滿...