檔案管理系統模擬
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 如下 共享記憶體的傳...