版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第26課LINUX文件編程
(庫函數(shù))庫函數(shù)基于C函數(shù)庫的文件編程是獨立于具體的操作系統(tǒng)平臺的,不管是在Windows、Linux還是其他的操作系統(tǒng)中,都是使用這些函數(shù)。使用庫函數(shù)進行程序設(shè)計可提高程序的可移植性。流對于標(biāo)準(zhǔn)的C函數(shù)庫,它們的操作都是圍繞流來進行的。流是一個抽象的概念,當(dāng)程序需要
數(shù)據(jù)的時候,就會開啟一個通向數(shù)據(jù)源的流,這個數(shù)據(jù)源可以是文件,內(nèi)存,或是網(wǎng)絡(luò)連接。類似的,當(dāng)程序需要寫入數(shù)據(jù)的時候,就會開啟一個通向目的地的流。這時候你就可以想象數(shù)據(jù)好像在這其中“流”動一樣。流文件指針在系統(tǒng)調(diào)用方式實現(xiàn)的文件
中,使用文件描述符(一個整數(shù))來指向一個文件。在庫函數(shù)方式的文件
中,使用FILE類型來表示一個打開的文件,這個類型中包含了管理文件流的信息。而指向該類型的指針FILE*
則被稱之為文件指針。打開文件-fopen函數(shù)函數(shù)原型:FILE*
fopen(const
char
*filename,const
char
*mode)函數(shù)作用:創(chuàng)建一個新的文件/打開一個已有的文件所屬頭文件:<stdio.h>函數(shù)返回值:成功時,返回文件對象指針。失敗時返回NULL打開文件-fopen函數(shù)函數(shù)參數(shù):-filename:文件名(含路徑),如”/home/test.c”-mode:打開文件的模式,常見的創(chuàng)建模式有:r,
rbw,
wba,
ab只讀方式打開只寫方式打開,如果文件不存在,則創(chuàng)建該文件追加方式打開,如果文件不存在,則創(chuàng)建該文件r+,r+b,rb+
讀寫方式打開w+,w+b,wh+
讀寫方式打開,如果文件不存在,則創(chuàng)建該文件a+,a+b,ab+
讀和追加方式打開。如果文件不存在,則創(chuàng)建該文件關(guān)閉文件-fclose函數(shù)函數(shù)原型:int
fclose(FILE
*fp);函數(shù)作用:關(guān)閉打開的文件所屬頭文件:<stdio.h>函數(shù)參數(shù):fp:打開的文件指針函數(shù)返回值:成功時,返回0。失敗時返回EOF手把 你寫代碼打開/關(guān)閉文件讀文件-fread函數(shù)函數(shù)原型:size_t
fread(void
*
ptr,size_t
size,size_t
nmemb,FILE
*
fp);函數(shù)作用:從打開的文件中
數(shù)據(jù)。所屬頭文件:<stdio.h>函數(shù)返回值:返回實際
的塊數(shù)。讀文件-fread函數(shù)函數(shù)參數(shù):-ptr:讀出的數(shù)據(jù)保存的位置-size:每塊數(shù)據(jù)的長度-nmemb:讀多少塊數(shù)據(jù)-fp:打開的文件指針手把 你寫代碼讀文件寫文件-fwrite函數(shù)函數(shù)原型:size_t
fwrite(const
void
*
ptr,size_t
size,size_t
nmemb,FILE
*
fp);函數(shù)作用:向打開的文件中寫入數(shù)據(jù)。所屬頭文件:<stdio.h>函數(shù)返回值:返回實際寫入的塊數(shù)。寫文件-fwrite函數(shù)函數(shù)參數(shù):-ptr:待寫入的數(shù)據(jù)保存的位置-size:每塊數(shù)據(jù)的長度-nmemb:寫多少塊數(shù)據(jù)-fp:打開的文件指針手把 你寫代碼寫文件定位文件-fseek函數(shù)函數(shù)原型:int
fseek(FILE
*
fp,long
offset,int
whence)函數(shù)作用:調(diào)整文件讀寫位置,作用等同于lseek.所屬頭文件:<stdio.h>函數(shù)返回值:成功時則返回0,錯誤則返回-1定位文件-fseek函數(shù)函數(shù)參數(shù):-fp:要調(diào)整的文件-whence:從什么位置可以調(diào)整SEEK_SET
文件開頭SEEK_CUR
當(dāng)前的讀寫位置SEEK_END
文件尾-offset:相對調(diào)整起始位置的偏移量手把 你寫代碼定位文件格式化輸出-fprintf函數(shù)函數(shù)原型:int
fprintf(FILE
*
fp
,const
char
*format,....)函數(shù)作用:將數(shù)據(jù)格式化以后輸出到文件所屬頭文件:<stdio.h>函數(shù)返回值:成功時則返回參數(shù)個數(shù),錯誤則返回-1格式化輸出-fprintf函數(shù)函數(shù)參數(shù):-fp:要輸出的文件-format:需要轉(zhuǎn)化的格式手把 你寫代碼格式化輸出Contents系統(tǒng)調(diào)用方式文件編程庫函數(shù)方式文件編程文件高級編程技術(shù)1.阻塞型IO圖示+思考?當(dāng)我們使用read/write
某些文件(比如:管道文件,終端文件)的時候,如果文件暫時滿足不了我們的要求。Linux系統(tǒng)該如何處理?例如:我們從鍵盤終端讀入數(shù)據(jù),但是這時鍵盤上沒有敲入按鍵的時候,系統(tǒng)如何處理?阻塞型IO實例演示非阻塞型IO如何將系統(tǒng)默認的阻塞型IO方式修改為非阻塞型IO呢?O_NONBLOCK手把 你寫代碼非阻塞型IO非阻塞型IO除了在打開文件的時候設(shè)置非阻塞標(biāo)志O_NONBLOCK還有其他的辦法來設(shè)置非阻塞標(biāo)志嗎?修改文件屬性tl函數(shù)函數(shù)原型:int
fcntl(int
fd,
int
cmd);int
fcntl(int
fd,
int
cmd,
long
arg);int
fcntl(int
fd,
int
cmd,
struct
flock
*lock);函數(shù)作用:一個現(xiàn)有的描述符(cmd=F_DUPFD).獲得/設(shè)置文件描述符標(biāo)記(cmd=F_GETFD或F_SETFD).獲得/設(shè)置文件狀態(tài)標(biāo)記(cmd=F_GETFL或F_SETFL).獲得/設(shè)置異步I/O所
(cmd=F_GETOWN或F_SETOWN).獲得/設(shè)置記錄鎖(cmd=F_GETLK,F_SETLK或F_SETLKW).修改文件屬性tl函數(shù)所屬頭文件:<fcntl.h>函數(shù)參數(shù):-fd:要操作的文件描述符-cmd:對文件的控制命令-arg:
cmd所需要的參數(shù)手把 你寫代碼設(shè)置文件標(biāo)志2.多路復(fù)用-select圖解:為什么我們需要select?多路復(fù)用-select函數(shù)函數(shù)原型:int
select(int
maxfd,
fd_set
*readfds,
fd_set
*writefds,
fe_set*exceptfds,
const
struct timeval
*timeout)函數(shù)作用:同時 多個文件,如果有一個文件滿足要求,函數(shù)返回。當(dāng)沒有文件滿足要求的時候,函數(shù)可能阻塞。所屬頭文件:<unistd.h>返回值:成功時返回滿足要求的文件個數(shù),出錯時返回-1.多路復(fù)用-select函數(shù)函數(shù)參數(shù):-maxfd:
要
的最大的文件描述符+1-readfds:要進行讀-writefds:要進行寫的文件集合的文件集合的文件集合-exceptfds:要進行異常-timeout:阻塞時間NULL:一直阻塞0:不阻塞,立即返回特定的時間值:當(dāng)沒有文件滿足要求時,阻塞的時間多路復(fù)用-select函數(shù)Linux系統(tǒng)提供了一系列宏來幫助我們操作文件集合:FD_ZERO(fd_set
*fdset)清空文件集合fdsetFD_SET(intfd,
fd_set
*fdset)將fd所指代的文件加入文件集合fdsetFD_CLR(int
fd,
fd_set
*fdset)將fd所指代的文件從文件集合fdset中去除FD_ISSET(int
fd,
fd_set
*fdset)判斷fd所指的文件是否在文件集合fdset中。在調(diào)用select后,不滿足要求的文件將會被select函數(shù)從文件集合中清除掉,仍然留在文件集合中的文件將是滿足要求的文件,因此使用FD_ISSET來檢測文件是否還在集合中來判斷文件是否滿足要求。手把 你寫代碼同時 多個文件3.文件-mmap文件
-mmap函數(shù)函數(shù)原型:void*
mmap
(void
*addr
,
size_t
len
,
int
prot
,
int
flags
,int
fd
,
off_t
offset
)函數(shù)作用:負責(zé)把文件內(nèi)容到進程的虛擬內(nèi)存空間,通過對這段內(nèi)存的和修改,來實現(xiàn)對文件的和修改,而不需要再調(diào)用read,write等操作。所屬頭文件:<unistd.h>返回值:
成功時返回的地址。文件-mmap函數(shù)函數(shù)參數(shù):-addr:指定的起始地址,通常設(shè)為NULL,由系統(tǒng)指定-length:-prot:到內(nèi)存的文件長度。區(qū)的保護方式,可以是:PROT_EXEC:PROT_READ:PROT_WRITE:區(qū)可被執(zhí)行區(qū)可被區(qū)可被寫入文件
-mmap函數(shù)函數(shù)參數(shù):-flags:區(qū)的特性,可以是:MAP_SHARED:寫入MAP_PRIVATE:對-fd:文件描述符,代表要區(qū)的數(shù)據(jù)會
回文件。區(qū)的寫入操作不會寫回原文件。文件。-offset:
從offset處開始取文件內(nèi)容來
,通常為0,表示從文件頭開始
。文件-munmap函數(shù)函數(shù)原型:int
munmap(void
*start,size_t
length)函數(shù)作用:解除文件所屬頭文件:<unistd.h>返回值:成功時返回0;失敗時返回-1.文件
-munmap函數(shù)函數(shù)參數(shù):-start:
取消 的地址-length:
取消 的長度手把 你寫代碼文件4.文件鎖圖解:為什么我們需要文件鎖文件鎖-分類排他鎖:如果事務(wù)T對文件A加上該鎖后,則其他事務(wù)不能再對A加任任何類型的鎖,直到在事務(wù)的末尾將資源上的鎖為止。獲取排他鎖的事務(wù)既能讀數(shù)據(jù),又能修改數(shù)據(jù)。共享鎖:如果事務(wù)T對數(shù)據(jù)A加上該鎖后,則其他事務(wù)只能對A再加共享鎖,不能加排他鎖,直到已所有共享鎖。獲準(zhǔn)共享鎖的事務(wù)只能讀數(shù)據(jù),不能修改數(shù)據(jù)。文件鎖-實現(xiàn)Linux有兩種方法可以實現(xiàn)文件鎖:使用
fcntl系統(tǒng)調(diào)用與使用lockf調(diào)用。我們會主要介紹fcntl接口,因為這是最經(jīng)常用到的接口。文件鎖
tl函數(shù)原型:int
fcntl
(int
fd,
int
cmd,
struct
flock
*lock);函數(shù)作用:對文件鎖進行操作所屬頭文件:<fcntl.h>文件鎖
tl函數(shù)參數(shù):-cmd:操作鎖
令F_SETLK:加鎖或。如果加鎖失敗,則fcntl立即返回,
此時errno被設(shè)置為EAGAIN。F_SETLKW:這是F_SETLK的阻塞版本。如果加鎖失敗,
則使調(diào)用進程休眠。F_GETLK:獲取文件的加鎖信息。注意:該命令并不會為文
件加鎖。成功時返回滿足要求的文件個數(shù),出錯時返回-1.文件鎖
tl函數(shù)參數(shù):-
struct
flockstruct
flock{shortoff_tl_type;l_
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 普通述職報告
- 新應(yīng)急預(yù)案編制
- 保護家庭網(wǎng)絡(luò)安全的方法
- 股票實戰(zhàn)課件教學(xué)課件
- 交通安全人人有責(zé)
- DB1304T 492-2024農(nóng)村消防設(shè)施管理指南
- 傳媒經(jīng)營管理
- 校園艾滋病健康
- 初中引體向上教案
- 菱形的性質(zhì)說課稿
- 灌溉試驗常規(guī)觀測
- 機動車檢測站可行性研究報告-建設(shè)機動車檢測站可行性報告
- 水字的演變與含意
- RoHS物料及產(chǎn)品管理規(guī)定
- 教師專業(yè)發(fā)展的文化自覺
- 2023年大西北游考察報告
- 幼兒行為觀察與指導(dǎo):日記描述法
- 路燈工程施工勞務(wù)清包合同
- 人行道透水磚施工解決方案2445
- 2023年高考浙江卷英語試題(2023年1月考試-含聽力音頻、聽力原文和答案)
- 五年級上冊數(shù)學(xué)蘇教版課件第1課時 用列舉法解決問題-教案
評論
0/150
提交評論