




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、計(jì)算機(jī)系綜合性實(shí)驗(yàn)實(shí) 驗(yàn) 報(bào) 告 課程名稱 操作系統(tǒng)實(shí)驗(yàn)報(bào)告 一個簡單的文件系統(tǒng)的詳細(xì)設(shè)計(jì)一個簡單的文件系統(tǒng)的詳細(xì)設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康模?)閱讀并調(diào)試一個簡單的文件系統(tǒng),模擬文件管理的工作過程。從而對各種文件操作命令的實(shí)質(zhì)內(nèi)容和執(zhí)行過程有比較深入的了解。(2)了解設(shè)計(jì)一個n個用戶的文件系統(tǒng),每個用戶可以保存M個文件。用戶在一次運(yùn)行中只能打開一個文件,對文件必須設(shè)置保護(hù)措施,且至少有create、delete、open、close、read、write等命令。二、實(shí)驗(yàn)要求1、根據(jù)流程圖閱讀所給文件系統(tǒng)源程序,并對源程序加以注釋(注釋量達(dá)70%以上)。2、修改、完善該系統(tǒng),指出程序的bug。三、文件系
2、統(tǒng)功能設(shè)計(jì)1. 功能設(shè)計(jì)該文件系統(tǒng)是一個多用戶、多任務(wù)的文件系統(tǒng)。對用戶和用戶的文件數(shù)目并沒有上限。也就是說該系統(tǒng)允許任何用戶申請空間,而且在其目錄下的文件數(shù)目并不做任何的限制。該系統(tǒng)可以支持的操作命令如下: bye用戶注銷命令。當(dāng)使用該命令時,用戶退出系統(tǒng),注銷該用戶功能設(shè)計(jì)并回到登陸界面。命令格式: bye close刪除用戶注冊信息命令。執(zhí)行該命令后,用戶在系統(tǒng)中的所有信息,包括該用戶目錄下的所有文件都被刪除。命令執(zhí)行完成后返回登陸界面。命令格式:close create在當(dāng)前目錄下創(chuàng)建一個文件,且該文件不能跟當(dāng)前已有的文件重名。該文件的管理信息登記在用戶文件信息管理模塊中。執(zhí)行完該命令
3、后回到執(zhí)行命令行。命令格式:createfile1其中:“”符為提示符,file1為要創(chuàng)建的文件名。 delete刪除當(dāng)前用戶目錄下的一個文件,命令執(zhí)行完畢返回至命令行。命令格式:deletefile1 其中:file1為要刪除的文件名。 list顯示當(dāng)前注冊目錄下的所有文件信息,包括文件名、文件長度、文件操作權(quán)限。命令格式:list chmod改變某個文件的執(zhí)行權(quán)限,但前提是該文件是該用戶目錄下的文件。命令格式:chmodfile1。其中:file1為要授權(quán)的文件名。 open在window界面下打開某個文件。執(zhí)行該命令后,文件file1將用在windows界面下的文件形式打開。用戶可以在這
4、個方式中對文件進(jìn)行修改,并將修改后的內(nèi)容保存。命令格式:openfile1其中:file1為要打開的文件名。 read讀文件信息。將文件信息讀入并顯示在終端上。命令格式:readfile1其中:file1為要讀的文件名。 write向某個文件寫入新的信息。用戶可以選擇用覆蓋原來內(nèi)容的方式或和在文件的末尾追加新信息的方式寫入信息。 當(dāng)要退出時輸入“#”即可。(2)系統(tǒng)采用二級文件目錄。設(shè)置主目錄(MFD)和用戶文件目錄(UFD),分別以文件的方式保存在磁盤中。在主目錄中有注冊用戶的用戶名和另一標(biāo)志該用戶目錄下是否有文件的指針標(biāo)記。用戶文件目錄采用用戶名作為文件名保存于磁盤,以便檢索時方便對應(yīng)。在
5、用戶文件目錄中保存著該目錄下所有文件的文件名稱、保護(hù)碼、文件長度。(3)該系統(tǒng)大量使用高級語言中的文件操作函數(shù),所以能實(shí)際看到文件的創(chuàng)建、寫入、讀出、刪除等效果。2. 功能設(shè)計(jì)實(shí)現(xiàn)總體流程3. 主要數(shù)據(jù)結(jié)構(gòu)struct UFD/用戶文件模塊char filename32; /文件名int safecode; /文件保護(hù)碼long length; /文件長度*curfile = NULL;這個是用戶文件模塊數(shù)據(jù)結(jié)構(gòu),結(jié)構(gòu)體的名字是:UFD,在結(jié)構(gòu)體里面定義了三個成員,filename,safecode,length,分別用于存儲用戶文件的名字,文件保護(hù)碼,文件的長度, *curfile = NU
6、LL;,這是一個結(jié)構(gòu)體類型的指針,開始初始化為NULL.struct MFD/主文件模塊char username32; /存放用戶名bool filepoint; /用戶目錄下的文件指針,false表示目錄為空,true為該用戶目錄中有文件*curuser = NULL,*elseuser=NULL;這個是主文件模塊的數(shù)據(jù)結(jié)構(gòu),有兩個成員,username,filepoint,分別用于存放用戶名,用戶目錄下面的文件指針. *curuser = NULL,*elseuser=NULL;這兩個是主文件的結(jié)構(gòu)體變量,用于訪問結(jié)構(gòu)體里面的數(shù)據(jù)成員4. 主要功能模塊1. int LoginDispla
7、y() /登陸選項(xiàng)操作函數(shù)2. bool Login(int SELETE)/用戶登陸,注冊函數(shù)3. void DisplayUFD() /打印用戶信息,包括用戶的各個文件4. void ByeFile(bool BOOL)/注銷函數(shù),調(diào)用次函數(shù)用戶可以退出系統(tǒng)5. bool ClearUserFile()/用戶要將自己的注冊目錄從系統(tǒng)徹底刪除6. void ClearUserMes()/刪除用戶全部信息7. void DeleteUser()/刪除用戶注冊目錄的操作8. void CreatFile()/在當(dāng)前用戶目錄下創(chuàng)建文件9. void DeleteFile()/刪除當(dāng)前目錄下一個文件
8、的操作10. bool QueryModElse(bool BOOL,bool &flag)/查詢其它用戶目錄下文件的文件11. bool QueryMod(bool BOOL)/查詢權(quán)限12. bool WriteRight(int len,bool BOOL) /查看是否已經(jīng)正確地寫入到該文件信息中,是則返回真值13. void WriteLengthToFile(int Len,bool BOOL)/將文件長度寫入文件管理模塊中14. void WriteFile()/向文件寫入信息的操作15. void ReadFile()/讀文件函數(shù)16. void ChangeMod()/修改某文
9、件的執(zhí)行權(quán)限17. void Execute(int i,int len,int cmdset)/執(zhí)行命令函數(shù)18. void Command()/讀取用戶輸入的命令,并將其轉(zhuǎn)換成系統(tǒng)能識別的命令5小組成員及分工 負(fù)責(zé)人:姓名模 塊黃新潮組長分配任務(wù),總結(jié)實(shí)驗(yàn)心得,分析流程圖,給組員講解王強(qiáng)對源程序加以注釋、修改張蒙對源程序讀取,運(yùn)行,截圖,完善四、文件系統(tǒng)功能模塊詳細(xì)設(shè)計(jì)流程圖1. int LoginDisplay() /登陸選項(xiàng)操作函數(shù)YNScanf SELETE_1Return SELETE_10=SELETE_1LOGIN.exeEndCout error圖4 ByeFileNYYNY
10、NBegin 此模塊重復(fù)調(diào)用,因此單獨(dú)列出,更新xFDUpdate為True只更新,反之會進(jìn)行刪除操作Temp=Malloc(xFD)EOFFread(Temp,xFD,1,file/login.exe)Temp=username BufferUpdateFwrite(Temp,xFD,1, outfilelocate.exe) End圖4.1 Update xFD5. bool ClearUserFile()/用戶要將自己的注冊目錄從系統(tǒng)徹底刪除NYYNBeginFile=username.exeFile EOFTemp=Malloc(UFD)Fread(Temp,UFD,1,file)Re
11、move Temp-fileReturn TrueEnd圖5 ClearUserFile6. void ClearUserMes()/刪除用戶全部信息Name=username.exeRemove NameUpdate(False) MFD(圖4.1)End圖6 ClearUserMesBegin7. int DeleteUser()/刪除用戶注冊目錄的操作OtherYY|yEnd圖7 DeleteUserBeginchScanf chRR=ClearUserFile(圖5)ClearUserMes(圖6)Return 18. void CreatFile()/在當(dāng)前用戶目錄下創(chuàng)建文件NOth
12、erNY|yYYBeginBufferScanf ChFread(NewFile,UFD,1,username.exe)Server&Set BufferCout errorEnd圖8 CreatFileCan WriteChScanf BufferCout TureNewFile=Malloc(UFD)9. void DeleteFile()/刪除當(dāng)前目錄下一個文件的操作OtherNY|yNYYBeginTure?ChScanf ChRemove BufferEnd圖9 DeleteFileSearch UFD(圖2.1)Name.exeUpdate(False) UFD(圖4.1)10.
13、bool QueryModElse(bool BOOL,bool &flag)/查詢其它用戶目錄下文件的文件NNNNYYY31|33 YYNNYBeginTemp.File=BufferCout errorFread(Temp,UFD,1,user.exe)Return TrueEnd圖10 QueryModElseEOF?Temp?Return FalseTemp=Malloc(UFD)BOOL32|3311. bool QueryMod(bool BOOL)/查詢權(quán)限NNYYNYNNNYYBeginUsername.exeEOFFread(temp,UFD,1,username.exe)R
14、eturn TrueElse=Malloc(MFD)End圖11 QueryModbuffertemp=Malloc(UFD)EOFFread(Else,MFD,1,Login.exe)Username=ElseTureQueryModElse(圖10)Return False12. bool WriteRight(int len,bool BOOL) /查看是否已經(jīng)正確地寫入到該文件信息中,是則返回真值NYNNYYNYNNYYBeginUsername.exeEOFFread(temp,UFD,1,username.exe)Length=lenReturn FalseEnd圖12 Write
15、Righttemp=Malloc(UFD)BufferFwrite(temp,UFD,1, outfilelocate.exe)outfilelocate.exeLength+lenEOFBufferFread(temp,UFD,1,username.exe) BOOLRemove username.exeoutfilelocate.exe -username.exeReturn Ture13. void WriteLengthToFile(int Len,bool BOOL)/將文件長度寫入文件管理模塊中NYYYNNBegin LOGIN.exeFread(Else,MFD,1,LOGIN.
16、exe)EndCout error圖13 WriteLengthToFileElse=Malloc(MFD)EOFWriteRight(圖12)True?14. void WriteFile()/向文件寫入信息的操作NN2OtherYY21YYNNBegin BufferEndGet char圖14 WriteFileScanf ChmodChmodQueryMod(true)(圖11)True?Char!=#Fput(char,buffer)Get charChar!=#Fput(char,buffer)WriteLengthToFile (圖11)Cout error15. void Re
17、adFile()/讀文件函數(shù)NYYYNNBegin True?Putchar(ch)EndCout error圖15 ReadFileFgetchar(buffer)BufferQueryMod(False)(圖12) EOF?16. void ChangeMod()/修改某文件的執(zhí)行權(quán)限OtherYNY|yBegin True?Scanf ModEndCout error圖16 ChangeModPrintf Mod TestChSearch UFD(圖2.1)Scanf chUpdate UFD(圖4.1)Remove username.exeoutfilelocate.exe-usern
18、ame.exe17. int Execute(int i,int len,int cmdset)/執(zhí)行命令函數(shù)987654231NYNYBegin Cmdi!=0Bufferi=CmdiEndCout error圖17 ExecuteListAllFileBuffer?ChangeMod(圖16)ByeFile(圖4)OpenFileReturn TempcmdsetDeleteUser(圖7)CreatFile (圖8)DeleteFile (圖9)ReadFile (圖15)WriteFile (圖14)18. void Command()/讀取用戶輸入的命令,并將其轉(zhuǎn)換成系統(tǒng)能識別的命令
19、YNYNYNYBegin 1Scanf cmdEnd圖18 CommandBufferi=cmdi| |len-1Cmdset=0|mid二分查找命令編號CmdsetEndIt?Execute(圖17)五、實(shí)驗(yàn)運(yùn)行結(jié)果/* * 文件名: Simple_file_system.c* 功 能: 簡單文件管理系統(tǒng)模擬程序 */#include#include#include#include#include conio.h#include#define NULL 0#define keynum 10#define getspace(type) (type*)malloc(sizeof(type) /宏
20、定義 申請內(nèi)存char cmd64; /存放用戶輸入命令char buffer36;/char user32;/存放當(dāng)前登陸的用戶名typedef char ALFA12;ALFA KWORDkeynum;/-struct UFD/用戶文件管理模塊char filename32; /文件名int safecode; /文件保護(hù)碼long length; /文件長度*curfile = NULL;/-struct MFD/用戶登陸信息管理模塊char username32; /用戶名bool filepoint; /用戶目錄下的文件指針,false表示目錄為空,true為該用戶目錄中有文件*cu
21、ruser = NULL,*elseuser=NULL;typedef UFD UFD; /重命名typedef MFD MFD;void main();/-void KeyWord()/初始化命令關(guān)鍵字strcpy(KWORD 1,bye); /用戶注銷命令strcpy(KWORD 2,chmod); /改變文件的執(zhí)行權(quán)限strcpy(KWORD 3,close); /刪除用戶注冊信息strcpy(KWORD 4,create); / 在當(dāng)前目錄下創(chuàng)建一個文件strcpy(KWORD 5,delete); /刪除當(dāng)前用戶目錄下的一個文件strcpy(KWORD 6,list); /顯示當(dāng)前注
22、冊目錄下的所有文件信息strcpy(KWORD 7,open); /打開文件strcpy(KWORD 8,read); /讀文件信息strcpy(KWORD 9,write); /向文件寫入新的信息/-int LoginDisplay() /登陸選項(xiàng)操作函數(shù)int SELETE_1 = 0; /定義整型數(shù)存放選項(xiàng)do /循環(huán)控制 cout *請選擇操作*n1、用戶登陸 2、用戶注冊 0、退出SELETE_1; /輸入要選擇的命令while(SELETE_12); /選項(xiàng)判斷system(cls); /清屏return SELETE_1; /返回選項(xiàng)數(shù)/-bool Login(int SELET
23、E)/用戶登陸,注冊函數(shù)FILE *fp,*fp1,*fp2; /定義文件char name12; /定義數(shù)組存放登錄名switch(SELETE) /switch選擇case 1:/用戶登陸if(fp = fopen(LOGIN.exe,rb) = NULL)/打開用戶注冊目錄管理文件coutn錯誤:不能打開登陸文件。endl; /顯示錯誤getch(); /讀取結(jié)束符system(cls); /清屏return false; /返回curuser = getspace(MFD); /用戶名申請空間coutname; /輸入用戶登陸名while(!feof(fp) /檢查該用戶是否合法fre
24、ad(curuser,sizeof(MFD),1,fp); /文件讀取if(strcmp(curuser-username,name)=0) /比較輸入用戶名是否與存在用戶名相同break;if(feof(fp) /如果沒有找到跟當(dāng)前登陸用戶名相同的管理信息,執(zhí)行下列代碼coutn錯誤:該用戶不存在。endl; /顯示“錯誤:該用戶不存在” fclose(fp); /關(guān)閉文件 return false; /返回elsefclose(fp); /關(guān)閉文件return true; /返回break; /跳出case 2: /新用戶注冊if(fp=fopen(LOGIN.exe,ab)=NULL)/
25、如果登陸信息管理文件不存在fp=fopen(LOGIN.exe,wb+); /創(chuàng)建該信息管理文件char name12;curuser = getspace(MFD); /用戶申請空間while(1)coutn *新用戶注冊*endl;coutname; /輸入用戶注冊名fp1 = fopen(LOGIN.exe,rb); /打開登陸文件,只允許讀數(shù)據(jù)while(!feof(fp1)/查看該用戶名是否被別的用戶占用fread(curuser,sizeof(MFD),1,fp1); /文件讀取if(strcmp(curuser-username,name) = 0)coutn該用戶已經(jīng)存在,請重
26、新輸入!username,name); /拷貝輸入的用戶名到用戶名結(jié)構(gòu)體 curuser-filepoint = NULL; /文件指針置空 fwrite(curuser,sizeof(MFD),1,fp); /用戶信息寫入文件strcpy(user,curuser-username);/生成用戶文件管理模塊strcat(user,.exe); /用于管理用戶目錄下的各個文件fp2=fopen(user,wb+); /打開文件,允許讀和寫fclose(fp2); /關(guān)閉fp2 coutn注冊成功!endl; /提示注冊成功 LoginDisplay();fclose(fp1); /關(guān)閉fp1
27、fclose(fp); /關(guān)閉fpbreak;fp = fopen(LOGIN.exe,rb); /顯示當(dāng)前注冊用戶的名稱while(1)fread(curuser,sizeof(MFD),1,fp); /文件讀取if(feof(fp) /檢查是否最后用戶break;coutusernamefilepoint = false)/當(dāng)前用戶目錄下沒有任何文件存在coutn用戶 username 文件夾是空的username); /拷貝用戶名到定義strcat(filename,.exe); /擴(kuò)展名.exeif(fp=fopen(filename,rb)=NULL)/打開用戶文件信息管理模塊cou
28、tn無法打開用戶:username 的文件!endl; /顯示getch(); /讀取結(jié)束符return;else /讀入并將用戶全部文件信息打印在終端cout用戶:username目錄下的文件:endl;UFD *ufd; /申請文件模塊int i=0;ufd = getspace(UFD); /申請存放用戶文件模塊的空間while(1)fread(ufd,sizeof(UFD),1,fp); /文件讀取,把文件信息讀到用戶中if(feof(fp) /全部輸出break;else /打印信息coutfilenametlengthtsafecodeendl; /輸出文件信息fclose(fp)
29、; /關(guān)閉文件 /-void ByeFile(bool BOOL)/注銷函數(shù),調(diào)用次函數(shù)用戶可以退出系統(tǒng)FILE *infile,*outfile; /定義文件char out50; /定義數(shù)組out50strcpy(out,outfilelocate.exe); /拷貝信息到數(shù)組if(infile=fopen(LOGIN.exe,rb)=NULL)/檢查是否保存coutn保存錯誤。;/fclose(infile);return;elseif(outfile=fopen(out,wb+)=NULL)/申請一個緩沖區(qū)管理模塊/存放用戶更新后的全部信息coutusername,curuser-us
30、ername)=0)/判斷是否與用戶名相同if(BOOL)/更新當(dāng)前用戶信息的操作fwrite(curuser,sizeof(MFD),1,outfile);/寫文件else continue;/如果用戶想把注冊目錄從系統(tǒng)中徹底刪除/則執(zhí)行該操作elsefwrite(mfd,sizeof(MFD),1,outfile);/寫入新的模塊fclose(infile);fclose(outfile); /關(guān)閉文件remove(LOGIN.exe);/將舊的該用戶的文件管理模塊刪除rename(out,LOGIN.exe);/將新的用戶的文件管理模塊重命名為用戶目錄下的/管理模塊/-bool Clea
31、rUserFile()/用戶要將自己的注冊目錄從系統(tǒng)徹底刪除/首先將該用戶目錄下的全部文件刪除FILE *fp;char file50; /定義數(shù)組file50strcpy(file,curuser-username); /拷貝信息到數(shù)組strcat(file,.exe); /擴(kuò)展名.exeif(fp=fopen(file,rb)=NULL) /打開用戶文件信息管理模塊/fclose(fp);coutfilename);/刪除文件fclose(fp);return true;/-void ClearUserMes()/刪除用戶全部信息char name50; /定義數(shù)組name50strcpy
32、(name,curuser-username); /拷貝用戶名到數(shù)組strcat(name,.exe); /擴(kuò)展名.exeremove(name); /從磁盤中刪除用戶文件信息管理模塊ByeFile(false);/更新系統(tǒng)的用戶登陸信息管理模塊/-void DeleteUser()/刪除用戶注冊目錄的操作int SELETE; /定義SELETEchar ch; /定義chcoutn該操作將會是你在系統(tǒng)所有信息刪除,下次登陸時你必須重新申請用戶名!endl;coutn你確定要刪除你在系統(tǒng)中的注冊信息嗎?Y/Nch; /輸入選擇switch(ch)/提示用戶確認(rèn)刪除case Y:case y:if(ClearUserFile()/如果用戶的全部文件已經(jīng)刪除了/則可以將該用戶的文件信息管理模塊也從磁盤中刪除/以免在沒完全刪
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 當(dāng)代工筆花鳥畫創(chuàng)作形式語言研究
- 科技產(chǎn)品推廣的情感營銷策略
- 施加不同濃度磷肥下接種叢枝菌根真菌對荊條幼苗根系生長的影響
- 華南志留紀(jì)-泥盆紀(jì)界限海洋化學(xué)條件的變化
- 家私材料企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報(bào)告
- 黑磷基納米材料化學(xué)制備及其穩(wěn)定性研究
- 水泥刨花板企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略研究報(bào)告
- 鐵礦石成品礦企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 2025年無機(jī)礦物填充塑料項(xiàng)目合作計(jì)劃書
- 長治市濱河公園景觀微更新設(shè)計(jì)研究
- 《單位內(nèi)個人清繳社保費(fèi)申請表》(填寫樣例)
- T-CAMET 04017.7-2019 城市軌道交通 全自動運(yùn)行系統(tǒng)規(guī)范 第7部分:運(yùn)營管理
- 常用橋牌詞語(中英文對照)
- 小升初、小學(xué)生滿分優(yōu)秀作文匯編100篇
- 次聲波在臨床醫(yī)學(xué)及麻醉中的作用 次聲波在臨床麻醉中的作用
- 中石油HSE培訓(xùn)試題集(共33頁)
- 2022年云南省中考數(shù)學(xué)試題及答案解析
- TS16949五大工具:SPC
- 五年級下冊-綜合實(shí)踐教案
- 貴州出版社小學(xué)五年級下冊綜合實(shí)踐活動教案全冊
- [方案]隱框玻璃幕墻施工方案
評論
0/150
提交評論