C語言的檔案系統

2021-08-11 08:27:41 字數 3051 閱讀 8437

c檔案系統由若干互相聯絡的函式構成,這類函式要求包含標頭檔案。常用的緩衝檔案系統函式有:

fopen():開啟乙個檔案

fclose():關閉乙個檔案

putc(),fputc():向檔案寫乙個字元

getc(),fgetc():從檔案中讀取乙個字元

fgets():從檔案中讀一字串

fputs():寫字串到檔案

fseek():寫檔案中定位於特定位元組

ftell():返回當前檔案位置

fprintf():與檔案的關係和pritnf()與控制台的關係相同

fscan():與檔案的關係和scanf()與控制台的關係相同

feof():到達檔案結尾時返回真值(true)

ferror():發生錯誤時返回真值(true)

rewind():把檔案的定位指示置回檔案開始處

remove():刪除乙個檔案

flush():對乙個檔案清倉

標頭檔案提供i/o函式的原型,同時定義size_t, fpos_t和file三個型別。型別size_t和fpos_t本質上與unsigned一樣。

還定義了若干巨集,如null,eof,fopen_max,seek_set,seek_cur和seek_end。巨集null定義為空指標。巨集eof一般定義為-1,作為輸入函式讀過檔案尾時的返回值。fopen_max定義整型值,用以確定在任何時刻可以開啟的檔案數目。其他巨集和fseek()一起作用,對檔案實施隨機訪問。

檔案指標(file pointer):是貫穿緩衝i/o系統的主線。檔案指標是指向定義檔案操作資訊的指標,資訊中包含檔案的名字,狀態和當前讀寫位置。檔案指標標識乙個特定磁碟檔案,被相連的流用來指導緩衝檔案函式的操作。

檔案指標是file型指標變數。為了讀寫檔案,程式需要使用檔案指標,為了得到乙個檔案指標變數,應書寫的語句結構如下所示:

file *fp;

開啟檔案:fopen()開啟乙個流,將該流和乙個檔案關聯,然後返回有關的檔案指標。函式fopen()的原型是:

file *fopen(const char *filename,const char *mode);
函式fopen()返回乙個檔案指標,空檔案指標標識fopen()失敗。程式中絕不應該更改fopen()返回的檔案指標。mode指向的串決定檔案的開啟方式。其取值和意義如下:

方式意義

r「讀開啟」文字檔案

w「寫生成」文字檔案

a向文字檔案追加

rb「讀開啟」二進位制檔案

wb「寫生成」二進位制檔案

ab向二進位制檔案追加

r+「讀寫開啟」文字檔案

w+「讀寫生成」文字檔案

a+向文字「讀寫」檔案追加

r+b「讀寫開啟」二進位制檔案

w+b「讀寫生成」二進位制檔案

a+b向二進位制「讀寫」檔案追加

下面的**示例為輸出而使用fopen()開啟名為test的檔案:

file *fp;

if((fp=fopen("test","w"))==null)

關閉檔案:函式fclose()關閉fopen()開啟的流。fclose()把遺留在緩衝區的資料寫入檔案,實施作業系統級的關閉操作。fclose()的原型:

int fclose(file *fp);
fp是fclose()返回的檔案指標。返回零值表示關閉成功,其他值表示關閉錯誤。

寫字元:putc()和fputc()是輸出字元的2個等價函式。存在兩個相同函式的簡單目的是保持與c語言早期版本的相容性。本函式向預先用fopen()「寫開啟」的檔案寫乙個字元,其原型是:

int putc(int ch, file *fp);
fp是fopen()返回的file型指標。ch是被寫入檔案的字元。成功時返回寫入的字元,否則返回eof。

讀字元:同上,讀字元也是2個等價的函式getc()和fgetc()。本函式從fopen()「讀開啟」的檔案中讀乙個字元,其原型是:

int getc(file *fp);

dowhile(ch!=eof);

但上述不是判定是否到達檔案尾的最佳方法。c檔案系統也可以操作二進位制資料,讀入二進位制檔案時,可能遇到等於eof值的整數,而檔案尚未結束。其次getc()失敗或到達檔案尾均返回eof,所以最好使用另乙個函式feof()來判斷。到達檔案尾時,feof()返回真值,否則返回零。以下**讀入二進位制資料直到檔案末尾:

while(!feof(fp))

ch=getc(fp);

乙個應用上述函式的綜合例子:

//新建乙個文字檔案,從螢幕輸入字元,將字元寫入檔案,輸入「$」符號則關閉檔案,終止程式

#include #include int main(int argc, char *argv)

//判定檔案開啟是否成功

if((fp=fopen(argv[1], "w"))==null)

//從螢幕持續獲取輸入字元,寫入檔案,直到輸入$符號時結束迴圈

do while (ch != '$');

//關閉檔案

fclose(fp);

return 0;

}

以下**則將上述**寫入的檔案逐字元讀出,並顯示在螢幕上。

#include #include int main(int argc, char *argv)

if((fp=fopen(argv[1], "r"))==null)

ch = getc(fp); /* 讀出乙個字元 */

//檔案尚未到達檔案末尾,則持續讀取

while (!feof(fp))

fclose(fp);

return 0;

}

C語言整理 檔案系統和檔案訪問

標準c中規定了檔案系統的訪問和對檔案本身的訪問。不管是windows系統或者是泛unix系統,都實現了這些介面。在了解這些知識後,跨平台程式設計也將非常容易。對檔案系統的訪問介面有 chdrive 改變當前的工作驅動器。ref。getdrive 返回當前的磁碟驅動器,1代表a盤,2代表b盤,依次類推...

基於C語言實現的檔案系統

2 需求說明 2.1基本要求 設計並實現乙個目錄列表函式 無須支援選項,如ls a ls l等 用來顯示當前目錄下包含的檔案資訊 設計並實現乙個改變目錄函式 無須處理路徑名,如.directoryname等 用來把當前目錄切換到上一層目錄或當前目錄的子目錄 設計並實現乙個刪除檔案函式,使用當前目錄中...

檔案系統 檔案系統的架構

vfs是具體檔案系統的抽象,依靠超級塊 inode dentry以及檔案這些結構來發揮作用,檔案系統的架構就體現在這些結構的使用方式中。1 超級塊作用分析 1 2 所有的dentry都指向乙個dentry hashtable dentry hashtable是乙個樹組,每乙個樹組成員都是hash鍊錶...