linux檔案系統模擬

2021-06-23 03:52:54 字數 3875 閱讀 5334

#include "stdio.h" 

#include 

//#include 

#include 

#include"unistd.h"

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

int style=1;     //檔案的型別

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

struct command 

cmd[12]; 

struct block 

memory[20449]; 

struct block_super 

super_block; 

struct node      //i結點資訊

i_node[640]; 

struct dir      //目錄項資訊

root[640]; 

void format()     //格式化

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"); 

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

fwrite(&super_block,sizeof(struct block_super),1,fp); 

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

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

fclose(fp); 

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

fread(&super_block,sizeof(struct block_super),1,fp); 

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

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

fclose(fp); 

} void callback(int length)    //**磁碟空間

super_block.n=0;  

memory[k].n=50; 

} memory[k].a=0;  

if(m==-1) 

super_block.n++; 

} } 

void allot(int length)     //分配空間

if(super_block.n==1) 

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

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

memory[m].a=1;   

super_block.n--; 

} } 

void create_file(char filename,int length) //建立檔案 } 

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

break; 

} } 

} void create_dir(char filename)    //建立目錄

void del_file(char filename)     //刪除檔案

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) 

} void del_dir(char filename)     //刪除目錄   需要判斷目錄下時候為空,不為空就不刪除 } 

if(j==640) 

break; 

} } 

if(i==640) 

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

} void display_dir(char filename)     //進入指定的目錄   } 

if(i==640)  } 

void open_file(char filename)        //開啟檔案

printf("\n"); 

break; 

}  } 

if(i==640)  } 

void back_dir()         //返回上一級目錄 } 

} void display_sys()        //顯示系統資訊(磁碟使用情況)

m=20449-k; 

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

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

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

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

} void help()          //顯示幫助資訊

void main()          //主函式

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; 

case 7:  

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

del_dir(tmp);    

break; 

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

display_dir(tmp1); 

break; 

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

break; 

case 10:help(); 

break; 

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

return; 

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

linux檔案系統模擬

include stdio.h include include include include unistd.h intphysic 100 檔案位址緩衝區 intstyle 1 檔案的型別 charcur dir 10 root 當前目錄 structcommand cmd 12 structbl...

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

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

Python 模擬檔案系統

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