寫一下fopen/getc/putc等C庫的粗略實(shí)現(xiàn),參考了K&R,但是有幾點(diǎn)根據(jù)自己理解的小改動(dòng),下面再具體說一下^_^
成都創(chuàng)新互聯(lián)公司是專業(yè)的東平網(wǎng)站建設(shè)公司,東平接單;提供網(wǎng)站制作、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行東平網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!寫這篇文章主要是幫助自己理解下標(biāo)準(zhǔn)I/O庫大體是怎么工作的。
fopen與open之間的關(guān)系
操作系統(tǒng)提供的接口即為系統(tǒng)調(diào)用。而C語言為了讓用戶更加方便的編程,自己封裝了一些函數(shù),組成了C庫。而且不同的操作系統(tǒng)對同一個(gè)功能提供的系統(tǒng)調(diào)用可能不同,在不同的操作系統(tǒng)上C庫對用戶屏蔽了這些不同,所謂一次編譯處處運(yùn)行。這里open為系統(tǒng)調(diào)用,fopen為C庫提供的調(diào)用。
C庫對的讀寫操作封裝了一個(gè)緩沖區(qū)。試想假如用戶頻繁的對文件讀寫少量字符,會(huì)頻繁的進(jìn)行系統(tǒng)調(diào)用(read函數(shù)),而系統(tǒng)調(diào)用比較耗時(shí)。C庫自己封裝了一個(gè)緩沖區(qū),每次讀取特定數(shù)據(jù)量到緩沖區(qū),讀取時(shí)優(yōu)先從緩沖區(qū)讀取,當(dāng)緩沖區(qū)內(nèi)容被讀光后才進(jìn)行系統(tǒng)調(diào)用將緩沖區(qū)再次填滿。
FILE結(jié)構(gòu)體
上面我們看到一個(gè)結(jié)構(gòu)體,里面有5個(gè)參數(shù),分別記錄了:緩沖區(qū)剩余的字符數(shù)cnt、下一個(gè)字符的位置ptr、緩沖區(qū)的位置base、文件訪問模式flag、文件描述符fd。
其中文件描述符就是系統(tǒng)調(diào)用open返回的文件描述符fd,是int類型。ptr與base上面圖中已經(jīng)展示了。cnt是緩沖區(qū)剩余字符數(shù),當(dāng)cnt為0時(shí),會(huì)系統(tǒng)調(diào)用read來填滿緩沖區(qū)。flag為文件訪問模式,記錄了文件打開方式、是否到達(dá)文件結(jié)尾等。
結(jié)構(gòu)體的具體定義如下,對應(yīng)調(diào)用fopen返回的文件指針FILE *fp = fopen(xxx,r):
typedef struct _iobuf{ int cnt; //緩沖區(qū)剩余字節(jié)數(shù) char *base; //緩沖區(qū)地址 char *ptr; //緩沖區(qū)下一個(gè)字符地址 int fd; //文件描述符 int flag; //訪問模式 } FILE; //別名,與標(biāo)準(zhǔn)庫一致
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站aaarwkj.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
本文題目:C標(biāo)準(zhǔn)I/O庫的粗略實(shí)現(xiàn)教程-創(chuàng)新互聯(lián)
瀏覽地址:http://aaarwkj.com/article8/cdhpip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、定制網(wǎng)站、App設(shè)計(jì)、自適應(yīng)網(wǎng)站、軟件開發(fā)、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容