作業系統檔案管理系統模擬實驗

2021-08-05 20:13:31 字數 3261 閱讀 1809

檔案管理系統模擬

1.實驗目的

通過乙個簡單多使用者檔案系統的設計,加深理解檔案系統的內部功能及內部實現

2.實驗內容

為linux系統設計乙個簡單的二級檔案系統。要求做到以下幾點:

(1)可以實現下列幾條命令(至少4條)

login 使用者登入

dir 列檔案目錄

create 建立檔案

delete 刪除檔案

open 開啟檔案

close 關閉檔案

read 讀檔案

write 寫檔案

(2)列目錄時要列出檔名、實體地址、保護碼和檔案長度;

(3)原始檔可以進行讀寫保護。

3.實驗提示

(1)首先應確定檔案系統的資料結構:主目錄、子目錄及活動檔案等。主目錄和子目錄都以檔案的形式存放於磁碟,這樣便於查詢和修改。

(2)使用者建立的檔案,可以編號儲存於磁碟上。入file0,file1,file2…並以編號作為實體地址,在目錄中進行登記。

4.源**

#include

#include

#include

#define mem_d_size 1024*1024 //總磁碟空間為1m

#define disksize 1024磁碟塊的大小1k

#define disk_num 1024磁碟塊數目1k

#define fatsize disk_num*sizeof(struct fatitem) //fat表大小

#define root_disk_no fatsize/disksize+1根目錄起始盤塊號

#define root_disk_size sizeof(struct direct根目錄大小

#define dir_maxsize 1024路徑最大長度為1kb

#define msd 5最大子目錄數5

#define mofn 5最大檔案深度為5

#define max_write 1024*128最大寫入文字長度128kb

struct fatitem /* size 8*/

; struct direct

directitem[msd+2];

}; struct opentable

openitem[mofn];

int cur_size; /*當前打檔案的數目*/

}; struct fatitem *fat; /*fat表*/

struct direct *root; /*根目錄*/

struct direct *cur_dir; /*當前目錄*/

struct opentable u_opentable; /*檔案開啟表*/

int fd=-1; /*檔案開啟表的序號*/

char *bufferdir; /*記錄當前路徑的名稱*/

char *fdisk; /*虛擬磁碟起始位址*/

void initfile();

void format();

void enter();

void halt();

int create(char *name);

int open(char *name);

int close(char *name);

int write(int fd,char *buf,int len);

int read(int fd,char *buf);

int del(char *name);

int mkdir(char *name);

int rmdir(char *name);

void dir();

int cd(char *name);

void print();

void show();

void initfile()

void format()

fat[root_disk_no].item=-1; /*存放根目錄的磁碟塊號*/

fat[root_disk_no].em_disk='1';

for(i=root_disk_no+1;i

root = (struct direct *)(fdisk+disksize+fatsize); /*根目錄的位址*/

/*初始化目錄*/

指向當前目錄的目錄項

root->directitem[0].sign = 1;

root->directitem[0].firstdisk = root_disk_no;

strcpy(root->directitem[0].name,".");

root->directitem[0].next = root->directitem[0].firstdisk;

root->directitem[0].property = '1';

root->directitem[0].size = root_disk_size;

指向上一級目錄的目錄項

root->directitem[1].sign = 1;

root->directitem[1].firstdisk = root_disk_no;

strcpy(root->directitem[1].name,"..");

root->directitem[1].next = root->directitem[0].firstdisk;

root->directitem[1].property = '1';

root->directitem[1].size = root_disk_size;

if((fp = fopen("disk.dat","wb"))==null)

for(i=2;i

if((fp = fopen("disk.dat","wb"))==null)

if(fwrite(fdisk,mem_d_size,1,fp)!=1) /*把虛擬磁碟空間儲存到磁碟檔案中*/

fclose(fp);

} void enter()

if(!fread(fdisk,mem_d_size,1,fp)) /*把磁碟檔案disk.dat 讀入虛擬磁碟空間(記憶體)*/

fat = (struct fatitem *)(fdisk+disksize); /*找到fat表位址*/

root = (struct direct *)(fdisk+disksize+fatsize);/*找到根目錄位址*/

作業系統檔案管理

博文很長,我把一章的內容都總結在這裡了。在現代計算機系統中,要用到大量的程式和資料,因記憶體容量有限,且不能長期儲存,故而平時總是把它們以檔案的形式存放在外存中,需要時再隨時將它們調入記憶體。如果由使用者直接管理外存上的檔案,不僅要求使用者熟悉外存特性,了解各種檔案的屬性,以及它們在外存上的位置,而...

作業系統模擬檔案管理大作業要點

1 建立乙個簡單的模擬檔案管理系統。2 理解使用者介面和操作命令在作業系統中的作用。需要實現乙個命令列操作介面,包含如下命令 1.建立檔案 功能 創立乙個指定名字的新檔案,即在目錄中增加一項,不考慮檔案內容,但必須能輸入檔案長度。2.刪除檔案 功能 刪除指定的檔案 3.建立目錄 功能 在當前路徑下建...

作業系統實驗

1.共享記憶體的通訊方式 1 2.訊息佇列的通訊方式 3 迴圈從訊息佇列中接收訊息,讀入end結束接收 43.管道通訊 6 4.訊號機制 7 5.兩個執行緒的同步。posix的無名訊號量機制 96.system r訊號量機制實現同步 117.使用訊號量保證語句沒有交叉 16 1 如下 共享記憶體的傳...