版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Linux文件I/O操作編程內(nèi)容不帶緩存的I/O操作帶緩存的I/O操作實訓(xùn)1:文件內(nèi)容拷貝實訓(xùn)2:字符串文件內(nèi)容解析Linux文件結(jié)構(gòu)帶緩存的I/O操作實訓(xùn)1:文件內(nèi)容拷貝不帶緩存的I/O操作帶緩存的I/O操作實訓(xùn)1:文件內(nèi)容拷貝帶緩存的I/O操作不帶緩存的I/O操作帶緩存的I/O操作(1)Linux文件結(jié)構(gòu)1、Linux文件類型:普通文件目錄文件設(shè)備文件鏈接文件管道文件2、文件描述符一個非負(fù)整數(shù),索引值,通常使用宏來表示。代表指向內(nèi)核中每個進(jìn)程打開文件的記錄表。(2)不帶緩存的I/O操作即底層操作。文件底層I/O操作的系統(tǒng)調(diào)用主要有open、close、read、write、lseek函數(shù)來直接操作文件。函數(shù)作用open打開或創(chuàng)建文件close關(guān)閉文件read從指定的文件描述符中讀出的數(shù)據(jù)放到緩沖區(qū)中,并返回實際讀出的字節(jié)數(shù)。write把指定緩沖區(qū)的數(shù)據(jù)寫入指定的文件描述符中,并返回實際寫入的字節(jié)數(shù)。lseek在指定的文件描述符中將文件指針定位到相應(yīng)的位置。open函數(shù)語法需要的頭文件:#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>函數(shù)原型:int
open(constchar*pathname,intflags);int
open(constchar*pathname,intflags,intperms);參數(shù)說明:pathname:被打開的文件名(包括路徑名);flags:文件打開方式:只讀O_RDONLY、可寫O_WRONLY、讀寫O_RDWR、O_CREAT若文件不存在則新建、O_TRUNC若文件存在且只讀或只寫成果打開,則先刪除全部原有數(shù)據(jù)、O_APPEND打開文件后文件指針指向末尾、O_EXCL和O_CREAT一起判斷是否存在。返回值:成功返回文件描述符;失敗返回-1close函數(shù)語法需要的頭文件:#include<unistd.h>函數(shù)原型:int
close(int
fd);函數(shù)參數(shù):fd——文件描述符函數(shù)返回值0——成功-1——出錯使用open、close函數(shù)示例例1:設(shè)計一個程序以只讀方式打開系統(tǒng)配置文件“/etc/inittab”read函數(shù)語法需要的頭文件:#include<unistd.h>函數(shù)原型:ssize_t
read(int
fd,void*buf,size_tcount);函數(shù)參數(shù):fd——文件描述符buf——存儲內(nèi)容的內(nèi)存空間(指定存儲讀出數(shù)據(jù)的緩沖區(qū))count——讀取的字節(jié)數(shù)函數(shù)返回值>0——成功讀取的字節(jié)數(shù)<0——出錯
0——表示遇到文件末尾EOF使用read函數(shù)示例例1改進(jìn):設(shè)計一個程序以只讀方式打開系統(tǒng)配置文件“/etc/inittab”,從中讀取100個字符并打印。write函數(shù)語法需要的頭文件:#include<unistd.h>函數(shù)原型:ssize_t
write(int
fd,void*buf,size_tcount);函數(shù)參數(shù):fd——文件描述符buf——需要寫入內(nèi)容的內(nèi)存空間(緩沖區(qū)的指針)count——寫入的字節(jié)數(shù)函數(shù)返回值>0——成功寫入的字節(jié)數(shù)<0——出錯
0——表示遇到文件末尾EOF使用write函數(shù)示例例2:設(shè)計一個程序,打開當(dāng)前目錄下文件“./test”寫入字符串“Hello,welcometohustwenhua!”。lseek函數(shù)語法需要的頭文件:#include<unistd.h>#include<sys/types.h>函數(shù)原型:ssize_t
lseek(int
fd,off_toffset,intwhence);函數(shù)說明:每一個已打開的文件都有一個讀寫位置,當(dāng)打開文件時通常其讀寫位置是指向文件開頭,若是以附加的方式打開文件(如O_APPEND),則讀寫位置會指向文件尾。當(dāng)read()或write()時,讀寫位置會隨之增加,lseek()便是用來控制該文件的讀寫位置。lseek函數(shù)語法函數(shù)參數(shù):fd——文件描述符offset——偏移量(可正可負(fù))whence:SEEK_SET文件開頭+offset為新讀寫位置
SEEK_CUR目前讀寫位置+offset為新位置
SEEK_END文件結(jié)尾+offset為新位置函數(shù)返回值>0——定位后文件操作位置相對于文件頭的偏移量<0——出錯,返回-1較特別的使用方式:
1)將讀寫位置移到文件開頭:
lseek(fd,0,SEEK_SET)
2)將讀寫位置移到文件尾:
lseek(fd,0,SEEK_END)
3)將取得目前文件位置:
lseek(fd,0,SEEK_CUR)使用lseek函數(shù)示例例3:通過lseek函數(shù)計算/etc/inittab
文件的長度。(3)帶緩存的I/O操作帶緩沖的I/O操作是基于流緩沖的,是符合ANSIC的標(biāo)準(zhǔn)I/O處理。比如:printf()、scanf()函數(shù)等。帶緩沖的I/O操作是在內(nèi)存中開辟一個“緩沖區(qū)”,為程序中的每一個文件使用。當(dāng)執(zhí)行讀文件的操作時,從磁盤文件中將數(shù)據(jù)先讀入內(nèi)存“緩沖區(qū)”,裝滿后再從內(nèi)存“緩沖區(qū)”依次讀入接收的數(shù)據(jù)。函數(shù)作用fopen打開或創(chuàng)建文件fclose關(guān)閉文件fread從文件中讀取一個字節(jié)。fwrite將數(shù)據(jù)成塊寫入文件流。帶緩存的I/O操作函數(shù)作用fseek移動文件流的讀寫位置。ftell查詢文件流當(dāng)前的讀寫位置。rewind把文件的讀寫位置設(shè)置在文件頭。fgetc從文本文件中讀取一個字符。fputc向文本文件中寫入一個字符。fgets從文本文件中讀取一個字符串(一行數(shù)據(jù),以\n結(jié)尾)fputs向文本文件中寫入一個字符串。fopen函數(shù)語法需要的頭文件:#include<stdio.h>函數(shù)原型:FILE*fopen(constchar*path,constchar*mode);參數(shù)說明:path:帶文件路徑的文件名mode:文件打開狀態(tài)。返回值:成功返回指向FILE的文件指針(文件句柄);失敗返回NULLfopen函數(shù)的參數(shù)mode取值參數(shù)作用r打開只讀文件,文件必須存在。r+打開可讀寫文件,文件必須存在。w打開只寫文件,若文件存在則清除內(nèi)容,不存在則新建該文件。w+打開可讀寫文件,若文件存在則清除內(nèi)容,不存在則新建該文件。a以附加方式打開只寫文件,若文件不存在則建立該文件;若存在則寫入的數(shù)據(jù)被加到文件尾。a+以附加方式打開可讀寫文件,若文件不存在則建立該文件;若存在則寫入的數(shù)據(jù)被加到文件尾。上面的可以加上一個b,如rb、w+b、ab+等,b表示打開的二進(jìn)制文件,而不是純文本文件。fclose函數(shù)語法需要的頭文件:#include<stdio.h>函數(shù)原型:int
fclose(FILE*stream);參數(shù)說明:stream:文件句柄。返回值:成功返回0;出錯返回EOFfread函數(shù)語法需要的頭文件:#include<stdio.h>函數(shù)原型:size_t
fread(void*ptr,size_tsize,size_t
nmemb,FILE*stream);參數(shù)說明:ptr:指向一塊存儲空間,用來存放本次讀取到的數(shù)據(jù)size:讀取文件一條記錄的字節(jié)數(shù)大小nmemb:本次讀取文件記錄的數(shù)目stream:將要讀取的文件流句柄返回值:成功返回實際讀取到的nmemb數(shù)目出錯返回EOF使用fopen、fread函數(shù)示例例4:以只讀方式打開系統(tǒng)配置文件“/etc/passwd”,并讀取打印出前100個字符。fwrite函數(shù)語法需要的頭文件:#include<stdio.h>函數(shù)原型:size_t
fwrite(constvoid*ptr,size_tsize,size_t
nmemb,FILE*stream);參數(shù)說明:ptr:需寫入的數(shù)據(jù)地址size:寫入文件一條記錄的字節(jié)數(shù)大小nmemb:寫入文件記錄的數(shù)目stream:將要寫入數(shù)據(jù)的文件流句柄返回值:成功返回實際寫入到的nmemb數(shù)目出錯返回EOF使用fwrite函數(shù)示例例5:設(shè)計一個程序打開當(dāng)前目錄下文件“./test2”并寫入“Hello,welcometohustwenhua!”字符串。fseek函數(shù)語法需要的頭文件:#include<stdio.h>函數(shù)原型:int
fseek(FILE*stream,longoffset,intwhence);參數(shù)說明:stream:文件句柄offset:偏移量(可正可負(fù))whence:SEEK_SET文件開頭+offset為新讀寫位置
SEEK_CUR目前讀寫位置+offset為新位置
SEEK_END文件結(jié)尾+offset為新位置返回值:成功返回0出錯返回-1ftell函數(shù)語法需要的頭文件:#include<stdio.h>函數(shù)原型:int
ftell(FILE*stream);參數(shù)說明:stream:文件句柄返回值:>0:文件流當(dāng)前操作位置相對于文件頭的偏移量<0:出錯函數(shù)說明:簡單地返回當(dāng)前位置。rewind函數(shù)語法需要的頭文件:#include<stdio.h>函數(shù)原型:voidrewind(FILE*stream);參數(shù)說明:stream:文件句柄返回值:無函數(shù)說明:把文件指針位置設(shè)置為0,即把文件指針設(shè)置到文件的起始位置。使用ftell、rewind函數(shù)示例例6:設(shè)計一個程序打開“/etc/passwd”文件,計算文件長度,并一次性讀取文件所有內(nèi)容后打印該內(nèi)容。fgetc函數(shù)語法需要的頭文件:#include<stdio.h>函數(shù)原型:int
fgetc(FILE*stream);參數(shù)說明:stream:文件句柄返回值:>0:成功讀取字符內(nèi)容EOF:出錯函數(shù)說明:從文件中讀取一個字符。fputc函數(shù)語法需要的頭文件:#include<stdio.h>函數(shù)原型:int
fputc(int
ch,FILE*stream);參數(shù)說明:ch:需要寫入文件的字符內(nèi)容stream:文件句柄返回值:>0:成功寫入的字符值EOF:出錯函數(shù)說明:向文件中寫入一個字符。fgets函數(shù)語法需要的頭文件:#include<stdio.h>函數(shù)原型:char*
fgets(char*s,intn,FILE*stream);參數(shù)說明:s:讀取字符串的存儲內(nèi)存指針n:讀取字符串內(nèi)存的大小stream:文件句柄返回值:非空:成功NULL:出錯函數(shù)說明:從文件中讀取一行字符串。fputs函數(shù)語法需要的頭文件:#include<stdio.h>函數(shù)原型:int
fputs(char*string,FILE*stream);參數(shù)說明:string:需要寫入文件的字符串內(nèi)容stream:文件句柄返回值:0:成功<0:出錯函數(shù)說明:向文件中寫入一個字符串。使用fgetc、
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鐵路行業(yè)勞動合同樣本
- 歷史文化名城建設(shè)協(xié)議
- 歷史街區(qū)雨污設(shè)施安裝合同
- 建筑行業(yè)會計崗位聘用協(xié)議
- 通訊公司出納招聘協(xié)議
- 玻璃幕墻浮動價施工協(xié)議
- 核電站樁基機械施工合同
- 勞務(wù)公司財務(wù)知識普及
- 2024版設(shè)計工程師勞動合同
- 2024版商務(wù)咨詢服務(wù)合同協(xié)議書范本
- 2025年中國財產(chǎn)險行業(yè)市場深度分析及發(fā)展趨勢預(yù)測報告
- 巨量信息流廣告(初級)營銷師認(rèn)證考試題及答案
- 銀行會計主管年度工作總結(jié)2024(30篇)
- 上海市12校2025屆高三第一次模擬考試英語試卷含解析
- 重慶市渝中區(qū)2023-2024學(xué)年八年級上學(xué)期期末考試數(shù)學(xué)試題含答案及解析
- 【MOOC】教學(xué)研究的數(shù)據(jù)處理與工具應(yīng)用-愛課程 中國大學(xué)慕課MOOC答案
- 工商企業(yè)管理畢業(yè)論文范文 工商企業(yè)管理5000論文范文
- 《小學(xué)科學(xué)實驗創(chuàng)新》課件
- 2024年手術(shù)室護(hù)士年度工作計劃(4篇)
- 《鐵路軌道維護(hù)》課件-更換道岔尖軌作業(yè)
- 財務(wù)管理基礎(chǔ)規(guī)范操作手冊
評論
0/150
提交評論