# include "stdio.h"
# include "string.h"
# define maxsize 1000
# define shannum 320
char opr[10];
char fname[maxsize];
int i_length;
int n_index;
struct supiecesup;
struct inodeinode[maxsize];
struct datadata[maxsize];
void dowhat(char opr,char fname) //根據輸入的命令進行相應的操作
else if(!strcmp(opr,"delete"))
else
if(!strcmp(opr,"open"))
else
if(!strcmp(opr,"ls"))
else
if(!strcmp(opr,"createdir"))
else
if(!strcmp(opr,"deletedir"))
else
if(!strcmp(opr,"ls_l"))
else
else }}
int existsfile(char e_fname) //判斷檔案或目錄是否存在,存在則返回1,不存在則返回0
}if(f==1)return 1;
if(f==0)return 0;
}int lookuppiece(int len) //找到有效可占用的空閒物理塊號,將相應物理塊標誌位置1,並返回首物理塊號
for(i=1;i<=shannum-11;i++) //對資料塊編號
inode[1].length=2048; //初始化根目錄區,長度為2048個位元組
strcpy(inode[1].name,temp2); //名稱為「.」
n=2048/512;
for(j=1;j<1+n;j++) //將對應塊標誌位置1,表示已占用
data[j].flags=1;
inode[1].flags=1; //設定對應根目錄區德inode表相關資訊
inode[1].f_d='d';
inode[1].number=data[1].number;
inode[1].ci=data[1].number/8;
}main()
else
getch();
return 0;
}/*1.程式通過呼叫乙個遞迴函式re_deldir()完成多級目錄的刪除.*/
/*2.對檔案以及目錄的命名加強了限制:即普通檔案不能以'#'開頭,目錄檔案必須以'#'開頭.*/
/*不足:雖然目錄塊的索引錶可占有多個物理塊,但在具體實現時,僅對一塊進行了查詢.在查詢空閒塊時,用了first_fit演算法而不是磁碟排程演算法*/
/*補充:對於物理空間分配情況的檢視,可通過使用ls_l命令檢視相應物理塊號,結合塊長和檔案長度進行推算得知.*/
C語言的檔案系統
c檔案系統由若干互相聯絡的函式構成,這類函式要求包含標頭檔案。常用的緩衝檔案系統函式有 fopen 開啟乙個檔案 fclose 關閉乙個檔案 putc fputc 向檔案寫乙個字元 getc fgetc 從檔案中讀取乙個字元 fgets 從檔案中讀一字串 fputs 寫字串到檔案 fseek 寫檔案...
C語言寫乙個類
ifndef 50 2 h define 50 2 h typedef void demo demo demo create int i,int j int demo geti demo pthis int demo getj demo pthis int demo add demo pthis,i...
如何實現乙個檔案系統(六)
1 1 請參見 operation systems internals and design principles 一書第12章 2 2 扇區是磁碟的最小定址單元,而檔案塊是核心操作檔案的最小單位,乙個塊可以包含乙個或數個扇區。這些磁碟塊被讀入記憶體後即刻被存入緩衝中,同樣,檔案塊被寫出也要通過緩衝...