




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1第十章第十章 標準輸入輸出庫標準輸入輸出庫 2關于標準關于標準I/O庫庫3主要內容主要內容 標準標準I/O的基本概念的基本概念 流流 緩存緩存 標準輸入、標準輸出及標準錯誤輸出標準輸入、標準輸出及標準錯誤輸出 使用標準使用標準I/O進行文件操作進行文件操作 流文件的開關方式流文件的開關方式 單字符方式讀寫單字符方式讀寫 行方式讀寫行方式讀寫 二進制方式讀寫二進制方式讀寫 格式化輸入格式化輸入/輸出輸出4引入引入 Linux系統下的文件操作有兩種方式:系統下的文件操作有兩種方式:直接調用文件操作的系統調用(直接調用文件操作的系統調用(API方式)方式)標準輸入輸出方式(標準標準輸入輸出方式(標
2、準I/O) 標準標準I/O庫是于庫是于1975年左右編寫完成的,是用于處理流和文件的一年左右編寫完成的,是用于處理流和文件的一個庫個庫. 標準標準I/O庫可以在很多操作系統下移植。庫可以在很多操作系統下移植。 基本基本I/O是針對文件描述符的,而標準是針對文件描述符的,而標準I/O是基于流的。是基于流的。 當通過標準當通過標準I/O打開或者創建文件的時候,系統使用一個流和文件打開或者創建文件的時候,系統使用一個流和文件相關聯。相關聯。 在在Unix&Linux環境中,標準環境中,標準I/O庫是建立在基本庫是建立在基本I/O基礎之上的。基礎之上的。5流流 使用標準使用標準I/O庫訪問文件時,需要
3、首先打開文件。庫訪問文件時,需要首先打開文件。 打開文件成功后,系統內核將返回流(打開文件成功后,系統內核將返回流(stream)數據)數據結構。結構。所有對該文件的后續操作都將針對這個數據結構進行。所有對該文件的后續操作都將針對這個數據結構進行。實際上流結構是一個指向實際上流結構是一個指向FILE結構的指針。結構的指針。FILE結構流文件描述符緩存指針緩存區Inode結構6緩存緩存 標準輸入輸出方式(標準標準輸入輸出方式(標準I/O)與直接調用文件)與直接調用文件操作的系統調用(操作的系統調用(API方式)的區別:方式)的區別:標準標準I/O帶緩存帶緩存文件操作無緩存文件操作無緩存 緩存的含
4、義:在對文件進行緩存的含義:在對文件進行I/O操作時,對數據操作時,對數據的讀寫并不直接對文件系統,而是對緩存進行。的讀寫并不直接對文件系統,而是對緩存進行。當緩存空間滿時,由系統根據緩存內容刷新到文當緩存空間滿時,由系統根據緩存內容刷新到文件系統。件系統。優點:降低調用文件操作的頻率。優點:降低調用文件操作的頻率。7緩存緩存 標準標準I/O庫提供的緩存方式有庫提供的緩存方式有3種:種: 全緩存(緩存填滿,則向文件系統刷新)全緩存(緩存填滿,則向文件系統刷新) 行緩存(遇換行符,則向文件系統刷新)行緩存(遇換行符,則向文件系統刷新) 不緩存不緩存 緩存在第一次調用緩存在第一次調用I/O庫時,由
5、系統自動調用庫時,由系統自動調用malloc分分配。配。8緩存舉例緩存舉例 例:分別向標準輸出(例:分別向標準輸出(stdout)和標準錯誤)和標準錯誤(stderr)輸輸出信息,比較行緩存和不緩存的區別。出信息,比較行緩存和不緩存的區別。9緩存舉例緩存舉例 分析:標準輸出采用行緩存,由于未輸出換行符,所以分析:標準輸出采用行緩存,由于未輸出換行符,所以本條消息不會立即顯示;標準錯誤輸出是不緩存的,所本條消息不會立即顯示;標準錯誤輸出是不緩存的,所以立刻輸出。以立刻輸出。 標準標準I/O庫提供改變緩存方式的函數:庫提供改變緩存方式的函數: Setbuf() Setbuffer() Setlin
6、ebuf() 以上函數的聲明位于頭文件以上函數的聲明位于頭文件中中10改變流的緩存方式改變流的緩存方式 #include void setbuf(FILE *stream,char *buf) void setbuffer(FILE *stream,char *buf,size _t size) void setlinebuf(FILE *stream) setbuf函數:設置某個流對象的緩存區為函數:設置某個流對象的緩存區為BUFSIZ。buf若為若為NULL,則表示設置流為無緩沖模式。,則表示設置流為無緩沖模式。 setlinebuf函數:設置某函數:設置某個流對象為行緩存模式。個流對象為
7、行緩存模式。 setbuffer函數:設置某個流對象的緩存區為指定值。函數:設置某個流對象的緩存區為指定值。 參數說明:參數說明: stream:流對象:流對象 buf:自定義緩存區指針:自定義緩存區指針 size:緩存區:緩存區大小大小BUFSIZ是一個全局的常量 11緩存舉例緩存舉例 例:分別向標準輸出(例:分別向標準輸出(stdout)和標準錯誤)和標準錯誤(stderr)輸輸出信息,比較行緩存和不緩存的區別。出信息,比較行緩存和不緩存的區別。12緩存舉例緩存舉例 結果分析:調用結果分析:調用setbuf關閉緩存,使標準輸出成為無緩關閉緩存,使標準輸出成為無緩存模式。存模式。13標準輸入
8、、標準輸出和標準錯誤輸出標準輸入、標準輸出和標準錯誤輸出 對每一個進程來說,系統默認為其打開對每一個進程來說,系統默認為其打開3個流:個流: 標準輸入標準輸入 標準輸出標準輸出 標準錯誤輸出標準錯誤輸出 分別用宏定義表示(分別用宏定義表示(stdin,stdout,stderr)stdin stdout stderr 0 1 2 UNIX/Linux下的文件描述符 14輸入輸出重定向舉例輸入輸出重定向舉例 例:編程實現標準輸出的重定向。例:編程實現標準輸出的重定向。文件描述符1代表標準輸出/*流文件描述符*/15上例說明:上例說明: void perror(const char *s); 函數
9、說明:函數說明:perror( ) 用來將上一個函數發生錯誤的原因輸出到標準設備(stderr)。參數 s 所指的字符串會先打印出,后面再加上錯誤原因字符串。此錯誤原因依照全局變量errno 的值來決定要輸出的字符串。 函數名: dup2 功能: 復制文件句柄 用法: int dup2(int oldhandle,int newhandle); 16主要內容主要內容 標準標準I/O的基本概念的基本概念 流流 緩存緩存 標準輸入、標準輸出及標準錯誤輸出標準輸入、標準輸出及標準錯誤輸出使用標準使用標準I/O進行文件操作進行文件操作流文件的開關方式流文件的開關方式單字符方式讀寫單字符方式讀寫行方式讀
10、寫行方式讀寫二進制方式讀寫二進制方式讀寫格式化輸入格式化輸入/輸出輸出17使用標準使用標準I/O進行文件操作進行文件操作 要對一個流進行操作,必先打開該流,然后調用標準要對一個流進行操作,必先打開該流,然后調用標準I/O函數進行讀寫。函數進行讀寫。18打開關閉流文件打開關閉流文件 fopen函數(用前需打開) 類似與底層的open系統調用。主要用于文件的輸入輸出參數說明: filename 指定打開的文件 mode 打開文件的方式19打開關閉流文件打開關閉流文件 mode參數: “r” : 以只讀方式打開,該文件必須存在。 “r+”:以可讀寫方式打開,該文件必須存在。 “rb+”:讀寫打開一個
11、二進制文件。 “w” :以只寫方式打開,文件長度截短為零,不存在可建立。 “w+”:以讀寫方式打開,文件清零,不存在可建立。 “wb”:只寫打開或建立一個二進制文件。 “wb+”:讀寫打開或建立一個二進制文件。 “a”:以追加只寫方式打開文件,不存在可建立。 “a+”:以追加可讀寫方式打開文件,不存在可建立。20打開關閉流文件打開關閉流文件 fclose函數函數(用后需關閉)(用后需關閉) 關閉指定的文件流stream,使所有尚未寫出的數據都寫出。21打開關閉流文件打開關閉流文件 fopen與fclose例程#include int main()FILE *fp;fp = fopen(file
12、,w);fclose(fp);return 0;22單字符方式讀寫單字符方式讀寫 標準標準I/O庫提供多種讀寫方式:庫提供多種讀寫方式: 單字符方式讀寫單字符方式讀寫 行方式讀寫行方式讀寫 二進制方式讀寫二進制方式讀寫 單字符讀寫函數有以下單字符讀寫函數有以下6種:種: fgetc(getc),getchar從流中讀取字符從流中讀取字符 fputc(putc),putchar向流中寫入字符向流中寫入字符23單字符方式讀寫單字符方式讀寫 fgetc、getc和和getchar函數函數 從文件流里讀取下一個字節并把它作為一個字符返回。從文件流里讀取下一個字節并把它作為一個字符返回。當達到文件尾時,
13、返回當達到文件尾時,返回EOF。字符被強制轉換為int型getchar()相當于getc(stdin)24單字符方式讀寫單字符方式讀寫 fputc、putc和和putchar函數函數 把一個字符寫到一個輸出文件流中。返回寫入的值,如把一個字符寫到一個輸出文件流中。返回寫入的值,如果失敗,果失敗, 返回返回EOF。25單字符方式讀寫舉例單字符方式讀寫舉例 例:編程實現十六進制格式顯示文件內容。例:編程實現十六進制格式顯示文件內容。(exam4.c)26單字符方式讀寫舉例單字符方式讀寫舉例/*對對C取取16進制值保存進制值保存到緩存區到緩存區*/27行方式讀寫行方式讀寫 對于大部分情況下,文本文件
14、與無格式文件進行的讀寫對于大部分情況下,文本文件與無格式文件進行的讀寫過程都是按行進行。過程都是按行進行。 標準標準I/O庫提供的按行讀寫函數:庫提供的按行讀寫函數: #include char *fgets(char *s,int n,FILE *stream) int fputs(char *s,FILE *stream) 參數說明:參數說明: s :讀取或寫入的緩存區:讀取或寫入的緩存區 n : 從流中讀取的長度,單位字節從流中讀取的長度,單位字節 stream: 流指針流指針28行方式讀寫舉例行方式讀寫舉例 例:編程實現按行讀取文件的內容并輸出至屏幕。例:編程實現按行讀取文件的內容并輸
15、出至屏幕。(exam5)優點:不必擔心文件過長;不會占用過多緩存區29二進制方式讀寫二進制方式讀寫 按行方式適應大部分文本格式文件,但有按行方式適應大部分文本格式文件,但有些情況,文件的內容卻需要按一定格式存些情況,文件的內容卻需要按一定格式存放,比如存儲了某個結構體。此時如果按放,比如存儲了某個結構體。此時如果按行讀寫的話,讀取到的數據將無法恢復到行讀寫的話,讀取到的數據將無法恢復到原來的格式。在這種情況下,需使用標準原來的格式。在這種情況下,需使用標準I/O庫提供的二進制方式讀寫功能。庫提供的二進制方式讀寫功能。30二進制方式讀寫二進制方式讀寫 二進制方式最常用的場合即是結構體讀寫。二進制
16、方式最常用的場合即是結構體讀寫。#include size_t fread(void *buffer, size_t size, size_t count, FILE *stream )size_t fwrite(const void*buffer,size_t size,size_t count,FILE*stream ) 參數說明:參數說明: buffer讀取或寫入的內容讀取或寫入的內容 size每條記錄長度每條記錄長度 count記錄個數記錄個數 stream指向流的指針指向流的指針31二進制方式讀寫二進制方式讀寫 fread函數函數 從一個文件流里讀取數據。數據從文件流從一個文件流里讀
17、取數據。數據從文件流stream讀讀到到ptr指定的數據緩沖區里指定的數據緩沖區里,函數返回值是成功讀到數函數返回值是成功讀到數據緩沖區里的記錄個數據緩沖區里的記錄個數(不是字節數不是字節數)size參數指定每個數據記錄的長度nitems給出要傳輸的記錄個數32二進制方式讀寫二進制方式讀寫 fwrite函數函數 從指定的緩沖區里讀取數據記錄,并把他們寫到輸從指定的緩沖區里讀取數據記錄,并把他們寫到輸出流中,返回值為成功寫入的記錄個數。出流中,返回值為成功寫入的記錄個數。33二進制方式讀寫舉例二進制方式讀寫舉例 例:實現對結構體進行讀寫。例:實現對結構體進行讀寫。姓名年齡身高創建.bin二進制文
18、件34二進制方式讀寫舉例二進制方式讀寫舉例向流中寫入打開.bin 文件讀取一條記錄輸出數據35格式化輸入輸出格式化輸入輸出 格式化輸入輸出函數:格式化輸入輸出函數: printf();sprintf();fprintf() scanf(); sscanf(); fscanf();36格式化輸入輸出格式化輸入輸出 printf、fprintf和和sprintf函數函數 能夠對各種不同類型的參數進行格式編排和輸出。能夠對各種不同類型的參數進行格式編排和輸出。每個參數在輸出流中的表示形式是由格式參數format控制的S 緩存區FILE 流37格式化輸入輸出格式化輸入輸出 scanf、fscanf和和ssc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 英語單詞掌握之道
- 2025通風工程承包合同書
- 藝術教育全景
- 2025終止商業租賃合同書范本
- 腸梗阻護理查房
- 2025年中國石油集團大慶鉆探工程有限公司招聘筆試參考題庫附帶答案詳解
- 2025年廣東湛江市吳川市吳川城市發展控股集團招聘筆試參考題庫含答案解析
- 2025年中國中煤能源集團有限公司西部分公司招聘筆試參考題庫含答案解析
- 2025年江西吉安市旺廬國有資產經營有限公司招聘筆試參考題庫含答案解析
- 剪紙中的軸對稱圖形
- (四調)武漢市2025屆高中畢業生四月調研考試 地理試卷(含答案)
- 海南省海口市(2024年-2025年小學五年級語文)統編版期中考試((上下)學期)試卷及答案
- 2024年螞蟻云客服支付寶云客服工作證客戶工作證培訓試題及答案
- 酒店水單模板
- 作業指導書露天礦山作業指導書
- 部編五年級下冊道德與法治第7課《不甘屈辱-奮勇抗爭》課件
- 社會單位1234+N消防安全標準化管理達標評定標準
- 熔射(熱噴涂工藝)
- 地質災害防治培訓教學課件
- 2022法考刑法歷年真題答案及解析(一)
- 球形網架屋面板安裝專項施工方案
評論
0/150
提交評論