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()「讀開啟」的檔案中讀乙個字元,其原型是:
但上述不是判定是否到達檔案尾的最佳方法。c檔案系統也可以操作二進位制資料,讀入二進位制檔案時,可能遇到等於eof值的整數,而檔案尚未結束。其次getc()失敗或到達檔案尾均返回eof,所以最好使用另乙個函式feof()來判斷。到達檔案尾時,feof()返回真值,否則返回零。以下**讀入二進位制資料直到檔案末尾:int getc(file *fp);
dowhile(ch!=eof);
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鍊錶...