標準IO(farsight部分)(課堂PPT)_第1頁
標準IO(farsight部分)(課堂PPT)_第2頁
標準IO(farsight部分)(課堂PPT)_第3頁
標準IO(farsight部分)(課堂PPT)_第4頁
標準IO(farsight部分)(課堂PPT)_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、1標準I/O庫-讀寫流調用fopen()成功打開流之后,可在三種不同類型的非格式化I/O中進行選擇,對其進行讀、寫操作:每次一個字符的每次一個字符的I/O。使用fgetc()/fputc()一次讀或寫一個字符,如果流是帶緩存的,則標準I/O函數(shù)處理所有緩存。每次一行的每次一行的I/O。使用fgets()和fputs()一次讀或寫一行。每行都以一個新行符終止。當調用fgets()時,應說明能處理的最大行長。直接直接I/O。fread()和fwrite()函數(shù)支持這種類型的I/O。每次I/O操作讀或寫某種數(shù)量的對象,而每個對象具有指定的長度。這兩個函數(shù)常用于從二進制文件中讀或寫一個結構。2標準I/

2、O庫-讀寫流結束判定 feof() 判斷文件是否結束,可用于二進制文件。 char cTemp; while (!feof(fp) & !ferror(stdin) cTemp = fgetc(fp); EOF/feof() EOF文件結束的返回標志,一般使用方法: char cTemp; cTemp = fgetc(fp); while (cTemp != EOF) cTemp = fgetc(infile); 3標準I/O庫-讀寫流-字符I/O-輸入以下三個函數(shù)可用于一次讀一個字符: 三個函數(shù)的返回:若成功則為下一個字符,若已處文件尾端或出錯則為EOF 函數(shù)getchar()等同于

3、getc(stdin) 注意,不管是出錯還是到達文件尾端,這三個函數(shù)都返回同樣的值。為了區(qū)分這兩種不同的情況,必須調用ferror()或feof()。 getc()的實現(xiàn)是一個宏,而fgetc()是一個函數(shù)。 返回值為int類型。4標準I/O庫-讀寫流-出錯函數(shù)檢查文件出錯函數(shù):檢查文件出錯函數(shù):在大多數(shù)的FILE對象的實現(xiàn)中,保留兩個標志: 出錯標志。 文件結束標志。5標準I/O庫-讀寫流-字符I/O-輸出以下三個函數(shù)可用于一次輸出一個字符: putchar(c)等價于putc(c,stdout)。 出錯返回EOF。 getc()/getchar()/putc()/putchar()實現(xiàn)為宏

4、,fgetc()/fputc()實現(xiàn)為函數(shù),請根據(jù)情況選擇。6標準I/O庫-讀寫流-字符I/O-exampleexample: 循環(huán)從標準輸入(stdin)逐個字符讀入數(shù)據(jù),并逐個字符顯示到標準輸出。輸出結果:7標準I/O庫-讀寫流-行I/O-輸入下列兩個函數(shù)提供每次輸入一行的功能: 兩個函數(shù)返回:若成功則為buf,若已處文件尾端或出錯則為null 這兩個函數(shù)都指定了緩存地址,讀入的行將送入其中。gets()從標準輸入讀,而fgets()則從指定的流讀。 對于fgets(),必須指定緩存的長度n。此函數(shù)一直讀到下一個新行符為止,但是不超過n-1個字符,讀入的字符被送入緩存。該緩存以null字符

5、結尾。如若該行,包括最后一個新行符的字符數(shù)超過n-1,則只返回一個不完整的行,而且緩存總是以null字符結尾。對fgets()的下一次調用會繼續(xù)讀該行。 gets()是一個不推薦使用的函數(shù),因為調用者在使用gets()時不能指定緩存的長度,這樣就可能造成緩存越界(如若該行長于緩存長度),寫到緩存之后的存儲空間中,從而產(chǎn)生不可預料的后果。 gets()與fgets()的另一個區(qū)別是,gets()并不將新行符存入緩存中。8標準I/O庫-讀寫流-行I/O-輸出下列兩個函數(shù)提供每次輸出一行的功能: 兩個函數(shù)返回:若成功則為非負值,若出錯則為EOF 函數(shù)fputs()將一個以null符終止的字符串寫到指

6、定的流,終止符null不寫出。注意,這并不一定是每次輸出一行,因為它并不要求在null符之前一定是新行符。通常,在null符之前是一個新行符,但并不要求總是如此。 puts()將一個以null符終止的字符串寫到標準輸出,終止符不寫出。但是,puts()然后又將一個新行符寫到標準輸出。 puts()并不像它所對應的gets()那樣不安全。但是我們還是應避免使用它,以免需要記住它在最后又加上了一個新行符。如果總是使用fgets()和fputs(),那么就會熟知在每行終止處我們必須自己加一個新行符。9標準I/O庫-讀寫流-行I/O-example輸出結果:example: 循環(huán)從標準輸入(stdin

7、)逐行讀入數(shù)據(jù),并逐行字符顯示到標準輸出,每次讀取的最大長度為20字節(jié)。10標準I/O庫-讀寫流-二進制I/O下列兩個函數(shù)以執(zhí)行二進制I/O(direct I/O)操作: 兩個函數(shù)的返回:讀或寫的對象數(shù) 對于二進制數(shù)據(jù)我們更愿意一次讀或寫整個結構。 為了使用getc()或putc()做到這一點,必須循環(huán)讀取整個結構,一次讀或寫一個字節(jié)。(效率低) fputs()在遇到null字節(jié)時就停止,而在結構中可能含有null字節(jié),所以不能使用每次一行函數(shù)實現(xiàn)這種要求。如果輸入數(shù)據(jù)中包含有null字節(jié)或換行符,則fgets()也不能正確工作。(實現(xiàn)限制)11標準I/O庫-讀寫流-二進制I/O-exampl

8、eexample1:讀或寫一個二進制數(shù)組,將一個浮點數(shù)組的第2至第5個元素寫至一個文件上:12標準I/O庫-讀寫流-二進制I/O-exampleexample2:讀或寫一個結構體,將一個結構體寫至一個文件上:13標準I/O 效率 fgets()/fputs()/getc/putc調用代碼14標準I/O 效率 fgets()/fputs()/getc/putc 效率對比圖15標準I/O庫-定位流定位標準I/O流的兩種方式 ftell()和fseek(): 這兩個函數(shù)自V7以來就存在了,但是它們都假定文件的位置可以存放在一個長整型中。 fgetpos()和fsetpos()。這兩個函數(shù)是新由ANS

9、I C引入的。它們引進了一個新的抽象數(shù)據(jù)類型fpos_t,它記錄文件的位置。 需要移植到非UNIX系統(tǒng)上運行的應用程序應當使用fgetpos()和fsetpos()16標準I/O庫-定位流- fseek()/ftell()/rewind()fseek()/ftell()/rewind()函數(shù)原型: ftell()用于取得當前的文件位置,調用成功則為當前文件位置指示,若出錯則為-1L fseek()用戶設定stream流的文件位置指示,調用成功返回0,失敗返回-1,并設置errno fseek()的whence參數(shù):SEEK_SET/ SEEK_CUR/ SEEK_END。 rewind()用于

10、設定流的文件位置指示為文件開始,該函數(shù)調用成功無返回值。 rewind()等價于(void)fseek(stream, 0L, SEEK_SET)17標準I/O庫-定位流 - fgetpos()/fsetpos() 兩個函數(shù)返回:若成功則為0,若出錯則為非0 fgetpos()將文件位置指示器的當前值存入由pos指向的對象中。在以后調用fsetpos()時,可以使用此值將流重新定位至該位置。 需要移植的程序,應該優(yōu)先考慮fgetpos()/fsetpos()。fgetpos()/fsetpos()函數(shù)原型:18標準I/O庫-臨時文件標準I / O庫提供了兩個函數(shù)以幫助創(chuàng)建臨時文件: tmpna

11、m()產(chǎn)生一個與現(xiàn)在文件名不同的一個有效路徑名字符串。每次調用它時,它都產(chǎn)生一個不同的路徑名。 tmpnam()的s如果為NULL,則返回值存放到一個靜態(tài)的區(qū)中。如果s不為NULL,則認為其指向長度至少為L_tmpnam個數(shù)的字符數(shù)組中。所產(chǎn)生的文件名存放到該數(shù)組中,也作為函數(shù)返回值返回。 tmpfile()創(chuàng)建一個臨時二進制文件(類型wb+),在關閉該文件或程序結束時將自動刪除這種文件。19標準I/O庫-臨時文件example 自己實現(xiàn)一個tmpfile()函數(shù)。 先調用tmpnam()產(chǎn)生一個唯一的路徑名。 調用fopen()打開。 調用unlink()刪除。說明:Linux系統(tǒng)規(guī)定,一個文件如果有連接計數(shù)器不為0,或者其進程打開數(shù)不為0,均不會刪除其文件內(nèi)容,利用這個特點來實現(xiàn)tmpfile()。20I/O模型比較I/O模型文件I/O標準I/O緩沖方式非緩沖I/O緩沖I/O操作對象文件

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論