資源簡介
包括實驗題目,代碼及運行結果
實驗8 文件管理(2學時)
一、實驗目的
理解文件系統的主要概念及文件系統內部功能和實現過程。
二、實驗內容
采用二級文件目錄結構,編寫程序實現文件系統的文件存儲空間的管理、文件的物理結構、目錄結構管理和文件操作。
三、實驗要求
1、設計一個有m個用戶的文件系統,每個用戶最多可保存一個文件。
2、規定用戶在一次運行中只能打開K個文件。
3、系統能檢查鍵入命令的正確性,出錯時應能顯示出錯原因。
4、對文件應能設置保護措施,如只能執行、允許讀、允許寫等。
5、對文件的操作設計提供一套文件操作:
CREATE建立文件;
DELETE刪除文件;
OPEN打開文件;
CLOSE關閉文件;
READ讀文件;
WRITE寫文件。
6、二級目錄結構如下圖所示。
用戶名 用戶文件目錄地址
主文件目錄MFD
文件名 狀態(打開/建立) 指針
用戶文件目錄UFD
實驗8 文件管理(2學時)
一、實驗目的
理解文件系統的主要概念及文件系統內部功能和實現過程。
二、實驗內容
采用二級文件目錄結構,編寫程序實現文件系統的文件存儲空間的管理、文件的物理結構、目錄結構管理和文件操作。
三、實驗要求
1、設計一個有m個用戶的文件系統,每個用戶最多可保存一個文件。
2、規定用戶在一次運行中只能打開K個文件。
3、系統能檢查鍵入命令的正確性,出錯時應能顯示出錯原因。
4、對文件應能設置保護措施,如只能執行、允許讀、允許寫等。
5、對文件的操作設計提供一套文件操作:
CREATE建立文件;
DELETE刪除文件;
OPEN打開文件;
CLOSE關閉文件;
READ讀文件;
WRITE寫文件。
6、二級目錄結構如下圖所示。
用戶名 用戶文件目錄地址
主文件目錄MFD
文件名 狀態(打開/建立) 指針
用戶文件目錄UFD

代碼片段和文件信息
#include?
#include?
#include?
#include?
using?namespace?std;
struct?MFD{?//?主文件目錄
????string?u_name;?//?用戶名
????int?addr;?//?指向子目錄指針
}mfd[10];
int?mfdcnt;?//?用戶數
int?k;?//?每個用戶最多打開的文件數
struct?File{
????string?name;?//?文件名
????bool?exist;?//?0表示文件已經刪除,1表示文件存在
????bool?state;?//?0表示文件處于關閉狀態,1表示打開狀態
????int?protect;?//?1表示只執行,2表示只讀,3表示只寫,4表示可讀可寫
????string?content;?//?文件內容
????void?create();
????void?del();
????bool?open();
????bool?close();
????void?read();
????void?write();
};
struct?UFD{?//?用戶文件目錄
????File?file[1000];
????string?u_name;?//?用戶名
????int?id;?//?文件的總數
????int?cnt;?//?用戶文件存在的個數
????int?open_cnt;?//?用戶打開文件個數,最大為k
????void?init()?{?cnt=0;?open_cnt=0;?id=0;}
????void?create()?{?file[id].create();?cnt++;?id++;}
????void?del(int?pos)?{?file[pos].del();?cnt--;}
????void?open(int?pos)?{
????????if(open_cnt?==?k)?cout<<“您已經打開了“< ????????else?{
????????????if(file[pos].open()?==?1)?open_cnt++;
????????}
????}
????void?close(int?pos)?{?if(file[pos].close()?==?1)?open_cnt--;?}
????void?read(int?pos)?{?file[pos].read();?}
????void?write(int?pos)?{?file[pos].write();?}
????int?Find(string?name)?{
????????int?pos?=?-1;??//?需要操作文件的位置
????????for(int?i=0;?i ????????????if(file[i].exist==1?&&?file[i].name==name)?return?pos=i;
????????cout?<“找不到該文件,請檢查文件名\n“;
????????return?pos;
????}
}ufd[10];
void?see(string?u_name){
????int?addr?=?-1;
????for(int?i=0;?i ????????if(mfd[i].u_name?==?u_name)?addr?=?mfd[i].addr;
????}
????if(addr?==?-1)?{?cout?<“沒有該用戶“?<????else{
????????UFD?user?=?ufd[addr];
????????cout?<“********************用戶名“?<????????cout?<“文件個數:?“?<????????cout?<“文件名\t文件狀態\t文件權限\t文件內容\n“;
????????for(int?i=0;?i ????????????File?f?=?user.file[i];
????????????if(f.exist?==?0)?continue;
????????????cout?<????????????if(f.state?==?0)?cout?<“關閉\t\t“;
????????????else?cout?<“打開\t\t“;
????????????if(f.protect?==?1)?cout?<“只執行\t\t“;
????????????else?if(f.protect?==?2)?cout?<“只讀\t\t“;
????????????else?if(f.protect?==?3)?cout?<“可寫\t\t“;
????????????cout?<????????}
????????cout?<“*************************************************\n“;
????}
}
void?File::create(){
????cout?<“請輸入文件名與文件權限(1只執行?2只讀?3可寫):?“;?cin?>>?name?>>?protect;
????cout?<“請輸入文件內容:?“;?cin?>>?content;
????exist?=?1;
????state?=?0;
}
void?File::del(){
????exist?=?0;
}
bool?File::open(){
????if(protect?==?1)?{?cout?<“打開失敗,該文件為只執行文件!“?<????else?if(state?==?1)?{?cout?<“該文件已處于打開狀態“?<????else?{?state?=?1;?cout?<“打開成功“?<}
bool?File::close(){
????if(state?==?0)?{?cout?<“該文件已處于關閉狀態“?<????else?{?state?=?0;?cout?<“關閉成功“?<}
void?File::read(){
?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????5170??2018-06-13?20:36??main.cpp
?????文件???????35840??2018-06-13?15:08??實驗題目8.doc
?????文件??????124818??2018-06-13?20:40??新建?Microsoft?Word?文檔.docx
- 上一篇:操作系統實驗五 內存管理
- 下一篇:科東縱加客戶端軟件
評論
共有 條評論