




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第十章標準輸入輸出庫1關于標準I/O庫2主要內容標準I/O的基本概念流緩存標準輸入、標準輸出及標準錯誤輸出使用標準I/O進行文件操作流文件的開關方式單字符方式讀寫行方式讀寫二進制方式讀寫格式化輸入/輸出3引入Linux系統(tǒng)下的文件操作有兩種方式:直接調用文件操作的系統(tǒng)調用(API方式)標準輸入輸出方式(標準I/O)標準I/O庫是于1975年左右編寫完成的,是用于處理流和文件的一個庫.
標準I/O庫可以在很多操作系統(tǒng)下移植?;綢/O是針對文件描述符的,而標準I/O是基于流的。當通過標準I/O打開或者創(chuàng)建文件的時候,系統(tǒng)使用一個流和文件相關聯。在Unix&Linux環(huán)境中,標準I/O庫是建立在基本I/O基礎之上的。4流使用標準I/O庫訪問文件時,需要首先打開文件。打開文件成功后,系統(tǒng)內核將返回流(stream)數據結構。所有對該文件的后續(xù)操作都將針對這個數據結構進行。實際上流結構是一個指向FILE結構的指針。FILE結構流文件描述符緩存指針緩存區(qū)Inode結構…………5緩存標準輸入輸出方式(標準I/O)與直接調用文件操作的系統(tǒng)調用(API方式)的區(qū)別:標準I/O帶緩存文件操作無緩存緩存的含義:在對文件進行I/O操作時,對數據的讀寫并不直接對文件系統(tǒng),而是對緩存進行。當緩存空間滿時,由系統(tǒng)根據緩存內容刷新到文件系統(tǒng)。優(yōu)點:降低調用文件操作的頻率。6緩存標準I/O庫提供的緩存方式有3種:全緩存(緩存填滿,則向文件系統(tǒng)刷新)行緩存(遇換行符,則向文件系統(tǒng)刷新)不緩存緩存在第一次調用I/O庫時,由系統(tǒng)自動調用malloc分配。7緩存舉例例:分別向標準輸出(stdout)和標準錯誤(stderr)輸出信息,比較行緩存和不緩存的區(qū)別。8緩存舉例分析:標準輸出采用行緩存,由于未輸出換行符,所以本條消息不會立即顯示;標準錯誤輸出是不緩存的,所以立刻輸出。標準I/O庫提供改變緩存方式的函數:Setbuf()Setbuffer()Setlinebuf()以上函數的聲明位于頭文件<stdio.h>中9改變流的緩存方式#include<stdio.h>voidsetbuf(FILE*stream,char*buf)voidsetbuffer(FILE*stream,char*buf,size_tsize)voidsetlinebuf(FILE*stream)setbuf函數:設置某個流對象的緩存區(qū)為BUFSIZ。buf若為NULL,則表示設置流為無緩沖模式。setlinebuf函數:設置某個流對象為行緩存模式。setbuffer函數:設置某個流對象的緩存區(qū)為指定值。參數說明:stream:流對象buf:自定義緩存區(qū)指針size:緩存區(qū)大小BUFSIZ是一個全局的常量10緩存舉例例:分別向標準輸出(stdout)和標準錯誤(stderr)輸出信息,比較行緩存和不緩存的區(qū)別。11緩存舉例結果分析:調用setbuf關閉緩存,使標準輸出成為無緩存模式。12標準輸入、標準輸出和標準錯誤輸出對每一個進程來說,系統(tǒng)默認為其打開3個流:標準輸入標準輸出標準錯誤輸出分別用宏定義表示(stdin,stdout,stderr)stdinstdoutstderr012UNIX/Linux下的文件描述符
13輸入輸出重定向舉例例:編程實現標準輸出的重定向。文件描述符1代表標準輸出/*流文件描述符*/14上例說明:voidperror(constchar*s);
函數說明:perror()用來將上一個函數發(fā)生錯誤的原因輸出到標準設備(stderr)。參數s所指的字符串會先打印出,后面再加上錯誤原因字符串。此錯誤原因依照全局變量errno的值來決定要輸出的字符串。函數名:dup2功能:復制文件句柄用法:intdup2(intoldhandle,intnewhandle);15主要內容標準I/O的基本概念流緩存標準輸入、標準輸出及標準錯誤輸出使用標準I/O進行文件操作流文件的開關方式單字符方式讀寫行方式讀寫二進制方式讀寫格式化輸入/輸出16使用標準I/O進行文件操作要對一個流進行操作,必先打開該流,然后調用標準I/O函數進行讀寫。17打開關閉流文件fopen函數(用前需打開)類似與底層的open系統(tǒng)調用。主要用于文件的輸入輸出參數說明:filename指定打開的文件mode打開文件的方式18打開關閉流文件mode參數:“r”:以只讀方式打開,該文件必須存在。“r+”:以可讀寫方式打開,該文件必須存在。“rb+”:讀寫打開一個二進制文件。“w”:以只寫方式打開,文件長度截短為零,不存在可建立?!皐+”:以讀寫方式打開,文件清零,不存在可建立?!皐b”:只寫打開或建立一個二進制文件?!皐b+”:讀寫打開或建立一個二進制文件?!癮”:以追加只寫方式打開文件,不存在可建立?!癮+”:以追加可讀寫方式打開文件,不存在可建立。19打開關閉流文件fclose函數(用后需關閉)關閉指定的文件流stream,使所有尚未寫出的數據都寫出。20打開關閉流文件fopen與fclose例程#include<stdio.h>intmain(){ FILE*fp; fp=fopen("file","w"); fclose(fp); return0;}21單字符方式讀寫標準I/O庫提供多種讀寫方式:單字符方式讀寫行方式讀寫二進制方式讀寫單字符讀寫函數有以下6種:fgetc(getc),getchar從流中讀取字符fputc(putc),putchar向流中寫入字符22單字符方式讀寫fgetc、getc和getchar函數從文件流里讀取下一個字節(jié)并把它作為一個字符返回。當達到文件尾時,返回EOF。字符被強制轉換為int型getchar()相當于getc(stdin)23單字符方式讀寫fputc、putc和putchar函數把一個字符寫到一個輸出文件流中。返回寫入的值,如果失敗,返回EOF。24單字符方式讀寫舉例例:編程實現十六進制格式顯示文件內容。(exam4.c)25單字符方式讀寫舉例/*對C取16進制值保存到緩存區(qū)*/26行方式讀寫對于大部分情況下,文本文件與無格式文件進行的讀寫過程都是按行進行。標準I/O庫提供的按行讀寫函數:#include<stdio.h>char*fgets(char*s,intn,FILE*stream)intfputs(char*s,FILE*stream)參數說明:s:讀取或寫入的緩存區(qū)n:從流中讀取的長度,單位字節(jié)stream:流指針27行方式讀寫舉例例:編程實現按行讀取文件的內容并輸出至屏幕。(exam5)優(yōu)點:不必擔心文件過長;不會占用過多緩存區(qū)28二進制方式讀寫按行方式適應大部分文本格式文件,但有些情況,文件的內容卻需要按一定格式存放,比如存儲了某個結構體。此時如果按行讀寫的話,讀取到的數據將無法恢復到原來的格式。在這種情況下,需使用標準I/O庫提供的二進制方式讀寫功能。29二進制方式讀寫二進制方式最常用的場合即是結構體讀寫。#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)參數說明:buffer讀取或寫入的內容size每條記錄長度count記錄個數stream指向流的指針30二進制方式讀寫fread函數從一個文件流里讀取數據。數據從文件流stream讀到ptr指定的數據緩沖區(qū)里,函數返回值是成功讀到數據緩沖區(qū)里的記錄個數(不是字節(jié)數)size參數指定每個數據記錄的長度nitems給出要傳輸的記錄個數31二進制方式讀寫fwrite函數從指定的緩沖區(qū)里讀取數據記錄,并把他們寫到輸出流中,返回值為成功寫入的記錄個數。32二進制方式讀寫舉例例:實現對結構體進行讀寫。姓名年齡身高創(chuàng)建.bin二進制文件33二進制方式讀寫舉例向流中寫入打開.bin文件讀取一條記錄輸出數據34格式化輸入輸出格式化輸入輸出函數:printf();sprintf();fprintf()scanf();sscanf();fscanf();35格式化輸入輸出printf、fprintf和sprintf函數能夠對各種不同類型的參數進行格式編排和輸出。每個參數在輸出流中的表示形式是由格式參數format控制的S緩存區(qū)FILE流3
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 主動脈瓣麻醉管理
- 小學國防教育結合家鄉(xiāng)
- 資源配置計劃
- 用創(chuàng)新推動職業(yè)發(fā)展的思路計劃
- 健康生活方式的倡導與普及計劃
- 幼兒創(chuàng)意表達與藝術教育計劃
- 生產調度的技巧與方法計劃
- 圖書目錄更新計劃
- 2024年新興技術對馬工學管理學的推動試題及答案
- 人力資源管理師??碱愋偷脑囶}及答案歸納
- 青春自護-遠離不良誘惑主題班會
- 《容積和容積單位》5·3天天練
- 離婚協(xié)議書無子女無共同財產范本2024年
- 包頭市重點中學2024-2025學年初三考前仿真模擬化學試題含解析
- DL∕T 1910-2018 配電網分布式饋線自動化技術規(guī)范
- 氣瓶檢驗站質量記錄表格匯編
- 2024北京八中初一(下)期中數學(教師版)
- 2024版《硫化氫培訓課件》課件
- 塔式太陽能光熱發(fā)電站運行規(guī)程
- 2024-2030年中國電子級氟化液行業(yè)應用狀況與供需趨勢預測研究報告
- 【特級教師上優(yōu)課】《黃河頌》名師課件
評論
0/150
提交評論