带缓冲的IO和不带缓冲的IO
??文件操作中有兩套函數(shù),一套是C庫中的 fopen()、fread()…,還有一套是linux的系統(tǒng)調(diào)用 open()、read()…
??雖然都是實(shí)現(xiàn)文件操作,但它們之間還是有一些不同。或許在網(wǎng)上我們會(huì)查到:fopen()、fread()…是緩沖系統(tǒng)的調(diào)用,open()、read()…是非緩沖系統(tǒng)的調(diào)用。那么這的 緩沖 到底是什么意思呢?
先上代碼:
(1)C庫函數(shù)調(diào)用
(1)linux系統(tǒng)調(diào)用
#include <stdio.h> #include <fcntl.h> #include <unistd.h>int main(){//打開文件int src = open("file.txt",O_RDONLY);//以只讀形式打開test文件,返回一個(gè)文件描述符int dest = open("backup_linux.txt",O_RDWR|O_CREAT,0644);//讀寫方式打開,644是權(quán)限//讀取test內(nèi)容,寫入copy_testchar buf[2];//定義字符緩沖數(shù)組,用于存放讀取到的文件內(nèi)容int read_size,write_size = 0;while((read_size = read(src,buf,1))!= 0)//返回0說明讀取完畢{write_size += write(dest,buf,read_size);}printf("寫入文件內(nèi)容大小為:%d\n",write_size);//關(guān)閉文件close(src);close(dest);return 0; }??在上面的兩份代碼中,我們發(fā)現(xiàn)其實(shí)它們都需要一個(gè)稱之為緩沖區(qū)的東西來暫存文件內(nèi)容,
C庫函數(shù)調(diào)用.cchar buf; //建立緩沖區(qū) linux系統(tǒng)調(diào)用.cchar buf[2];//定義字符緩沖數(shù)組,用于存放讀取到的文件內(nèi)容但是,此緩沖非彼緩沖,“緩沖系統(tǒng)”、“非緩沖系統(tǒng)”中的“緩沖”與上面代碼中的“緩沖區(qū)”,這兩個(gè)概念是不同的。
??所謂非緩沖系統(tǒng)是指用戶層沒有緩存,通過系統(tǒng)調(diào)用直接對(duì)磁盤文件進(jìn)行讀寫,但是對(duì)于內(nèi)核來說,還是進(jìn)行了緩存,內(nèi)核現(xiàn)將數(shù)據(jù)寫到內(nèi)核緩沖存儲(chǔ)器中,當(dāng)緩沖存儲(chǔ)器溢出時(shí)再進(jìn)行實(shí)際的IO操作,緩沖系統(tǒng)是指在用戶層建立一個(gè)流緩存區(qū),庫函數(shù)向流緩存區(qū)讀寫數(shù)據(jù),流緩存區(qū)溢出時(shí)進(jìn)行系統(tǒng)調(diào)用,即再調(diào)用無緩沖的IO。
兩個(gè)系列函數(shù)的區(qū)別:
引用資料:
帶緩沖的IO和不帶緩沖的IO
open/read/write和fopen/fread/fwrite函數(shù)的區(qū)別
總結(jié)
以上是生活随笔為你收集整理的带缓冲的IO和不带缓冲的IO的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 客座编辑:杜小勇(1963-),男,中国
- 下一篇: SQL Server Managemen