版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第十章標(biāo)準(zhǔn)輸入輸出庫1關(guān)于標(biāo)準(zhǔn)I/O庫2主要內(nèi)容標(biāo)準(zhǔn)I/O的基本概念流緩存標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出及標(biāo)準(zhǔn)錯誤輸出使用標(biāo)準(zhǔn)I/O進(jìn)行文件操作流文件的開關(guān)方式單字符方式讀寫行方式讀寫二進(jìn)制方式讀寫格式化輸入/輸出3引入Linux系統(tǒng)下的文件操作有兩種方式:直接調(diào)用文件操作的系統(tǒng)調(diào)用(API方式)標(biāo)準(zhǔn)輸入輸出方式(標(biāo)準(zhǔn)I/O)標(biāo)準(zhǔn)I/O庫是于1975年左右編寫完成的,是用于處理流和文件的一個庫.
標(biāo)準(zhǔn)I/O庫可以在很多操作系統(tǒng)下移植?;綢/O是針對文件描述符的,而標(biāo)準(zhǔn)I/O是基于流的。當(dāng)通過標(biāo)準(zhǔn)I/O打開或者創(chuàng)建文件的時候,系統(tǒng)使用一個流和文件相關(guān)聯(lián)。在Unix&Linux環(huán)境中,標(biāo)準(zhǔn)I/O庫是建立在基本I/O基礎(chǔ)之上的。4流使用標(biāo)準(zhǔn)I/O庫訪問文件時,需要首先打開文件。打開文件成功后,系統(tǒng)內(nèi)核將返回流(stream)數(shù)據(jù)結(jié)構(gòu)。所有對該文件的后續(xù)操作都將針對這個數(shù)據(jù)結(jié)構(gòu)進(jìn)行。實(shí)際上流結(jié)構(gòu)是一個指向FILE結(jié)構(gòu)的指針。FILE結(jié)構(gòu)流文件描述符緩存指針緩存區(qū)Inode結(jié)構(gòu)…………5緩存標(biāo)準(zhǔn)輸入輸出方式(標(biāo)準(zhǔn)I/O)與直接調(diào)用文件操作的系統(tǒng)調(diào)用(API方式)的區(qū)別:標(biāo)準(zhǔn)I/O帶緩存文件操作無緩存緩存的含義:在對文件進(jìn)行I/O操作時,對數(shù)據(jù)的讀寫并不直接對文件系統(tǒng),而是對緩存進(jìn)行。當(dāng)緩存空間滿時,由系統(tǒng)根據(jù)緩存內(nèi)容刷新到文件系統(tǒng)。優(yōu)點(diǎn):降低調(diào)用文件操作的頻率。6緩存標(biāo)準(zhǔn)I/O庫提供的緩存方式有3種:全緩存(緩存填滿,則向文件系統(tǒng)刷新)行緩存(遇換行符,則向文件系統(tǒng)刷新)不緩存緩存在第一次調(diào)用I/O庫時,由系統(tǒng)自動調(diào)用malloc分配。7緩存舉例例:分別向標(biāo)準(zhǔn)輸出(stdout)和標(biāo)準(zhǔn)錯誤(stderr)輸出信息,比較行緩存和不緩存的區(qū)別。8緩存舉例分析:標(biāo)準(zhǔn)輸出采用行緩存,由于未輸出換行符,所以本條消息不會立即顯示;標(biāo)準(zhǔn)錯誤輸出是不緩存的,所以立刻輸出。標(biāo)準(zhǔn)I/O庫提供改變緩存方式的函數(shù):Setbuf()Setbuffer()Setlinebuf()以上函數(shù)的聲明位于頭文件<stdio.h>中9改變流的緩存方式#include<stdio.h>voidsetbuf(FILE*stream,char*buf)voidsetbuffer(FILE*stream,char*buf,size_tsize)voidsetlinebuf(FILE*stream)setbuf函數(shù):設(shè)置某個流對象的緩存區(qū)為BUFSIZ。buf若為NULL,則表示設(shè)置流為無緩沖模式。setlinebuf函數(shù):設(shè)置某個流對象為行緩存模式。setbuffer函數(shù):設(shè)置某個流對象的緩存區(qū)為指定值。參數(shù)說明:stream:流對象buf:自定義緩存區(qū)指針size:緩存區(qū)大小BUFSIZ是一個全局的常量10緩存舉例例:分別向標(biāo)準(zhǔn)輸出(stdout)和標(biāo)準(zhǔn)錯誤(stderr)輸出信息,比較行緩存和不緩存的區(qū)別。11緩存舉例結(jié)果分析:調(diào)用setbuf關(guān)閉緩存,使標(biāo)準(zhǔn)輸出成為無緩存模式。12標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤輸出對每一個進(jìn)程來說,系統(tǒng)默認(rèn)為其打開3個流:標(biāo)準(zhǔn)輸入標(biāo)準(zhǔn)輸出標(biāo)準(zhǔn)錯誤輸出分別用宏定義表示(stdin,stdout,stderr)stdinstdoutstderr012UNIX/Linux下的文件描述符
13輸入輸出重定向舉例例:編程實(shí)現(xiàn)標(biāo)準(zhǔn)輸出的重定向。文件描述符1代表標(biāo)準(zhǔn)輸出/*流文件描述符*/14上例說明:voidperror(constchar*s);
函數(shù)說明:perror()用來將上一個函數(shù)發(fā)生錯誤的原因輸出到標(biāo)準(zhǔn)設(shè)備(stderr)。參數(shù)s所指的字符串會先打印出,后面再加上錯誤原因字符串。此錯誤原因依照全局變量errno的值來決定要輸出的字符串。函數(shù)名:dup2功能:復(fù)制文件句柄用法:intdup2(intoldhandle,intnewhandle);15主要內(nèi)容標(biāo)準(zhǔn)I/O的基本概念流緩存標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出及標(biāo)準(zhǔn)錯誤輸出使用標(biāo)準(zhǔn)I/O進(jìn)行文件操作流文件的開關(guān)方式單字符方式讀寫行方式讀寫二進(jìn)制方式讀寫格式化輸入/輸出16使用標(biāo)準(zhǔn)I/O進(jìn)行文件操作要對一個流進(jìn)行操作,必先打開該流,然后調(diào)用標(biāo)準(zhǔn)I/O函數(shù)進(jìn)行讀寫。17打開關(guān)閉流文件fopen函數(shù)(用前需打開)類似與底層的open系統(tǒng)調(diào)用。主要用于文件的輸入輸出參數(shù)說明:filename指定打開的文件mode打開文件的方式18打開關(guān)閉流文件mode參數(shù):“r”:以只讀方式打開,該文件必須存在?!皉+”:以可讀寫方式打開,該文件必須存在?!皉b+”:讀寫打開一個二進(jìn)制文件?!皐”:以只寫方式打開,文件長度截短為零,不存在可建立?!皐+”:以讀寫方式打開,文件清零,不存在可建立。“wb”:只寫打開或建立一個二進(jìn)制文件?!皐b+”:讀寫打開或建立一個二進(jìn)制文件?!癮”:以追加只寫方式打開文件,不存在可建立?!癮+”:以追加可讀寫方式打開文件,不存在可建立。19打開關(guān)閉流文件fclose函數(shù)(用后需關(guān)閉)關(guān)閉指定的文件流stream,使所有尚未寫出的數(shù)據(jù)都寫出。20打開關(guān)閉流文件fopen與fclose例程#include<stdio.h>intmain(){ FILE*fp; fp=fopen("file","w"); fclose(fp); return0;}21單字符方式讀寫標(biāo)準(zhǔn)I/O庫提供多種讀寫方式:單字符方式讀寫行方式讀寫二進(jìn)制方式讀寫單字符讀寫函數(shù)有以下6種:fgetc(getc),getchar從流中讀取字符fputc(putc),putchar向流中寫入字符22單字符方式讀寫fgetc、getc和getchar函數(shù)從文件流里讀取下一個字節(jié)并把它作為一個字符返回。當(dāng)達(dá)到文件尾時,返回EOF。字符被強(qiáng)制轉(zhuǎn)換為int型getchar()相當(dāng)于getc(stdin)23單字符方式讀寫fputc、putc和putchar函數(shù)把一個字符寫到一個輸出文件流中。返回寫入的值,如果失敗,返回EOF。24單字符方式讀寫舉例例:編程實(shí)現(xiàn)十六進(jìn)制格式顯示文件內(nèi)容。(exam4.c)25單字符方式讀寫舉例/*對C取16進(jìn)制值保存到緩存區(qū)*/26行方式讀寫對于大部分情況下,文本文件與無格式文件進(jìn)行的讀寫過程都是按行進(jìn)行。標(biāo)準(zhǔn)I/O庫提供的按行讀寫函數(shù):#include<stdio.h>char*fgets(char*s,intn,FILE*stream)intfputs(char*s,FILE*stream)參數(shù)說明:s:讀取或?qū)懭氲木彺鎱^(qū)n:從流中讀取的長度,單位字節(jié)stream:流指針27行方式讀寫舉例例:編程實(shí)現(xiàn)按行讀取文件的內(nèi)容并輸出至屏幕。(exam5)優(yōu)點(diǎn):不必?fù)?dān)心文件過長;不會占用過多緩存區(qū)28二進(jìn)制方式讀寫按行方式適應(yīng)大部分文本格式文件,但有些情況,文件的內(nèi)容卻需要按一定格式存放,比如存儲了某個結(jié)構(gòu)體。此時如果按行讀寫的話,讀取到的數(shù)據(jù)將無法恢復(fù)到原來的格式。在這種情況下,需使用標(biāo)準(zhǔn)I/O庫提供的二進(jìn)制方式讀寫功能。29二進(jìn)制方式讀寫二進(jìn)制方式最常用的場合即是結(jié)構(gòu)體讀寫。#include<stdio.h>size_tfread(void
*buffer,
size_t
size,
size_t
count,
FILE
*stream)size_tfwrite(constvoid*buffer,size_tsize,size_tcount,FILE*stream)參數(shù)說明:buffer讀取或?qū)懭氲膬?nèi)容size每條記錄長度count記錄個數(shù)stream指向流的指針30二進(jìn)制方式讀寫fread函數(shù)從一個文件流里讀取數(shù)據(jù)。數(shù)據(jù)從文件流stream讀到ptr指定的數(shù)據(jù)緩沖區(qū)里,函數(shù)返回值是成功讀到數(shù)據(jù)緩沖區(qū)里的記錄個數(shù)(不是字節(jié)數(shù))size參數(shù)指定每個數(shù)據(jù)記錄的長度nitems給出要傳輸?shù)挠涗泜€數(shù)31二進(jìn)制方式讀寫fwrite函數(shù)從指定的緩沖區(qū)里讀取數(shù)據(jù)記錄,并把他們寫到輸出流中,返回值為成功寫入的記錄個數(shù)。32二進(jìn)制方式讀寫舉例例:實(shí)現(xiàn)對結(jié)構(gòu)體進(jìn)行讀寫。姓名年齡身高創(chuàng)建.bin二進(jìn)制文件33二進(jìn)制方式讀寫舉例向流中寫入打開.bin文件讀取一條記錄輸出數(shù)據(jù)34格式化輸入輸出格式化輸入輸出函數(shù):printf();sprintf();fprintf()scanf();sscanf();fscanf();35格式化輸入輸出printf、fprintf和sprintf函數(shù)能夠?qū)Ω鞣N不同類型的參數(shù)進(jìn)行格式編排和輸出。每個參數(shù)在輸出流中的表示形式是由格式參數(shù)format控制的S緩存區(qū)FILE流3
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電商系統(tǒng)課程設(shè)計(jì)
- 電壓微課程設(shè)計(jì)教案
- 研學(xué)科技創(chuàng)新課程設(shè)計(jì)
- 知網(wǎng)課程設(shè)計(jì)研究生
- 液壓式定量泵課程設(shè)計(jì)
- 正確的洗手方式課程設(shè)計(jì)
- 港焙蛋糕裱花課程設(shè)計(jì)
- 物理光學(xué)課程設(shè)計(jì)
- 二零二五年吊車租賃與施工現(xiàn)場通信保障合同3篇
- 園林工程分包合同2025年
- 2024年河南省中職對口升學(xué)高考語文試題真題(解析版)
- 《食品行業(yè)ERP應(yīng)用》課件
- 41-降低懸挑式卸料平臺安全隱患發(fā)生率 棗莊華廈(4:3定稿)
- 2024年北京市學(xué)業(yè)水平合格性地理試卷(第一次)
- 黑龍江哈爾濱六中2025屆高三第六次模擬考試數(shù)學(xué)試卷含解析
- 2023年不動產(chǎn)登記代理人《不動產(chǎn)登記法律制度政策》考前通關(guān)必練題庫(含答案)
- GB/T 36547-2024電化學(xué)儲能電站接入電網(wǎng)技術(shù)規(guī)定
- 期末測試卷(一)2024-2025學(xué)年 人教版PEP英語五年級上冊(含答案含聽力原文無聽力音頻)
- 售后服務(wù)人員培訓(xùn)資料課件
- 禁止隨地亂扔垃圾
- 期末 (試題) -2024-2025學(xué)年人教PEP版(2024)英語三年級上冊
評論
0/150
提交評論