linux檔案系統模擬

2021-09-02 04:21:13 字數 3394 閱讀 8568

#include"stdio.h"

#include

//#include

#include

#include"unistd.h"

intphysic[100];//檔案位址緩衝區

intstyle=1;//檔案的型別

charcur_dir[10]="root";//當前目錄

structcommand

cmd[12];

structblock

memory[20449];

structblock_super

super_block;

structnode//i結點資訊

i_node[640];

structdir//目錄項資訊

root[640];

voidformat()//格式化

for(i=0;i<640;i++)//i結點資訊初始化

i_node[i].file_length=-1;//檔案長度

i_node[i].file_style=-1;//檔案型別

}for(i=0;i<640;i++)//根目錄區資訊初始化

for(i=0;i<20449;i++)//儲存空間初始化

}for(i=0;i<20449;i++)//將空閒塊的資訊用成組鏈結的方法寫進每組的最後乙個塊中

else

}memory[i].a=0;//標記為沒有使用

continue;//處理完用於儲存下一組盤塊資訊的特殊盤塊後,跳過本次迴圈

}for(j=0;j<50;j++)

memory[i].n=0;

}printf("已經初始化完畢\n");

printf("進入linux檔案系統模擬............\n");

}voidwrite_file(file*fp)//將資訊讀入系統檔案中

fwrite(&super_block,sizeof(structblock_super),1,fp);

for(i=0;i<640;i++)

for(i=0;i<640;i++)

fclose(fp);

}voidread_file(file*fp)//讀出系統檔案的資訊

fread(&super_block,sizeof(structblock_super),1,fp);

for(i=0;i<640;i++)

for(i=0;i<640;i++)

fclose(fp);

}voidcallback(intlength)//**磁碟空間

super_block.n=0;

memory[k].n=50;

}memory[k].a=0;

if(m==-1)

super_block.n++;}}

voidallot(intlength)//分配空間

if(super_block.n==1)

continue;//要跳過這次迴圈,下面的語句在if中已經執行過

}physic[i]=m;//棧中的相應盤塊的位址寫進檔案位址緩衝區

memory[m].a=1;

super_block.n--;}}

voidcreate_file(charfilename,intlength)//建立檔案

}for(i=0;i<640;i++)

break;}}

}voidcreate_dir(charfilename)//建立目錄

voiddel_file(charfilename)//刪除檔案

callback(i_node[k].file_length);//呼叫**函式

for(j=0;j<100;j++)//刪除檔案後要將檔案屬性和目錄項的各個值恢復初值

strcpy(root[i].file_name,"");//檔名恢復初值

root[i].i_num=-1;//目錄項的i結點資訊恢復初值

strcpy(root[i].dir_name,"");//目錄項的檔案目錄資訊恢復初值

i_node[k].file_length=-1;//檔案長度恢復

i_node[k].file_style=-1;//檔案型別恢復初值

break;}}

if(i==640)

}voiddel_dir(charfilename)//刪除目錄需要判斷目錄下時候為空,不為空就不刪除

}if(j==640)

break;}}

if(i==640)

}voiddisplay_curdir()//顯示當前目錄下的檔案列表}}

voiddisplay_dir(charfilename)//進入指定的目錄

}if(i==640)

}voidopen_file(charfilename)//開啟檔案

printf("\n");

break;}}

if(i==640)

}voidback_dir()//返回上一級目錄}}

voiddisplay_sys()//顯示系統資訊(磁碟使用情況)

m=20449-k;

printf("空閒的盤塊數是:\t");

printf("%d\n",k);

printf("使用的盤塊數是:\t");

printf("%d\n",m);

}voidhelp()//顯示幫助資訊

voidmain()//主函式

else

while(1)}}

strcpy(tmp2[j].com,tmp);

for(i=j;i>=0;i--)

scanf("%s",com);//輸入命令並且查詢命令的相關操作

for(i=0;i<12;i++)

}if(i==12)//如果沒有這個語句以後輸入的命令都和第一次輸入的效果一樣

switch(p)

}if(i==640)

break;

case7:

scanf("%s",tmp);//刪除目錄

del_dir(tmp);

break;

case8:scanf("%s",tmp1);//進入當前目錄下的指定目錄相當於進入目錄cd+目錄名

display_dir(tmp1);

break;

case9:back_dir();//返回上一級目錄

break;

case10:help();

break;

case11:write_file(fp);//將磁碟利用資訊寫進系統檔案,退出

return;

default:printf("沒有這個命令\n");

linux檔案系統模擬

include stdio.h include include include include unistd.h int physic 100 檔案位址緩衝區 int style 1 檔案的型別 char cur dir 10 root 當前目錄 struct command cmd 12 stru...

linux 檔案系統 Linux 檔案系統結構介紹

ubuntu 像所有類unix系統一樣 在分層樹中組織檔案,其中的關係就像父母和孩子一樣。目錄可以包含其他目錄以及常規檔案,它們是樹的 葉子 樹的任何元素都可以通過路徑名引用 絕對路徑以字元 標識根目錄,其中包含所有其他目錄和檔案 開頭,然後列出必須遍歷以到達該元素的每個子目錄,每個子目錄用 符號分...

Python 模擬檔案系統

通過乙個簡單檔案系統目錄結構的模擬設計,加深了解檔案系統的功能和實現 實驗預備內容 複習資料結構中的樹型結構。熟悉樹節點的插入 刪除 修改以及樹的遍歷方法。實驗內容 編寫一段程式,模擬實現乙個簡單檔案系統的樹型目錄結構,實現以下命令 命令名 功能 格式 create 建立檔案 create file...