【正文】
strcat(user,.exe)。 //跳出 } } if(feof(fp1))//該名稱沒有被別的用戶占用 { strcpy(curuserusername,name)。 //打開登陸文件,只允許讀數據 while(!feof(fp1))//查看該用戶名是否被別的用戶占用 { fread(curuser,sizeof(MFD),1,fp1)。 //用戶申請空間 while(1) { cout\n *****新用戶注冊 *****endl。 //返回 } break。 //顯示“錯誤:該用戶不存在” fclose(fp)。 //輸入用戶登陸名 while(!feof(fp)) //檢查該用戶是否合法 { fread(curuser,sizeof(MFD),1,fp)。 //清屏 return false。 //定義數組存放登錄名 switch(SELETE) //switch 選擇 { case 1://用戶登陸 if((fp = fopen(,rb)) == NULL)//打開用戶注冊目錄管理文件 { cout\n 錯誤:不能打開登陸文件。 //選項判斷 system(cls)。 //向文件寫入新的信息 } // int LoginDisplay() //登陸選項操作函數 { int SELETE_1 = 0。 //刪除當前用戶目錄下的一個文件 strcpy(KWORD[ 6],list)。 //用戶注銷命令 strcpy(KWORD[ 2],chmod)。 typedef UFD UFD。 //文件長度 }*curfile = NULL。 ALFA KWORD[keynum]。flag)//查詢其它用戶目錄下文件的文件 N N N N Y Y Y 31||33 Y Y N N Y Begin =Buffer Cout error Fread(Temp,UFD,1,) Return True End 圖 10 QueryModElse EOF? Temp? Return False Temp=Malloc(UFD) BOOL 32||33 11. bool QueryMod(bool BOOL)//查詢權限 N N Y Y N Y N N N Y Y Begin EOF Fread(temp,UFD,1,) Return True Else=Malloc(MFD) End 圖 11 QueryMod buffer temp=Malloc(UFD) EOF Fread(Else,MFD,1,) Username=Else Ture QueryModElse(圖 10) Return False 12. bool WriteRight(int len,bool BOOL) //查看是否已經正確地寫入到該文件信息中 , 是則返回真值 N Y N N Y Y N Y N N Y Y Begin EOF Fread(temp,UFD,1,) Length=len Return False End 圖 12 WriteRight temp=Malloc(UFD) Buffer Fwrite(temp,UFD,1, ) Length+len EOF Buffer Fread(temp,UFD,1,) BOOL Remove Return Ture 13. void WriteLengthToFile(int Len,bool BOOL)//將文件長度寫入文件管理模塊中 14. void WriteFile()//向文件寫入信息的操作 N N 2 Other Y Y 1 Y Y N N Begin Buffer End Get char 圖 14 WriteFile Scanf Chmod Chmod QueryMod(true)(圖 11) True? Char!= Fput(char,buffer) Get char Char!= Fput(char,buffer) WriteLength ToFile (圖 11) Cout error N Y Y Y N N Begin Fread(Else,MFD,1,) End Cout error 圖 13 WriteLengthToFile Else=Malloc(MFD) EOF WriteRight(圖 12) True? 15. void ReadFile()//讀文件函數 16. void ChangeMod()//修改某文件的執(zhí)行權限 Other Y N ?Y?||?y? Begin True? Scanf Mod End Cout error 圖 16 ChangeMod Printf Mod Test Ch Search UFD(圖 ) Scanf ch Update UFD(圖 ) Remove N Y Y Y N N Begin True? Putchar(ch) End Cout error 圖 15 ReadFile Fgetchar(buffer) Buffer QueryMod(False)(圖 12) EOF? 17. int Execute(int i,int len,int cmdset)//執(zhí)行命令函數 9 8 7 6 5 4 2 3 1 N Y N Y Begin Cmd[i]!=0 Buffer[i]=Cmd[i] End Cout error 圖 17 Execute ListAllFile Buffer? ChangeMod(圖 16) ByeFile(圖 4) OpenFile Return Temp cmdset DeleteUser(圖 7) CreatFile (圖 8) DeleteFile (圖 9) ReadFile (圖 15) WriteFile (圖 14) 18. void Command()//讀取用戶輸入的命令,并將其轉換成系統能識別的命令 五、實驗運行結果 /***************************************************************** * 文件名 : * 功 能 : 簡單文件管理系統模擬程序 *******************************************************************/ include include include include include include define NULL 0 define keynum 10 Y N Y N Y N Y Begin 1 Scanf cmd End 圖 18 Command Buffer[i]=cmd[i] ??||? ?||len1 Cmdset=0||mid 二分查找命令編號 Cmdset EndIt? Execute(圖 17) define getspace(type) (type*)malloc(sizeof(type)) //宏定義 申請內存 char cmd[64]。 這個是主文件模塊的數據結構,有兩個成員, username,filepoint,分別用于存放用戶名,用戶目錄下面的文件指針 . *curuser = NULL,*elseuser=NULL。 這個是用戶文件模塊數據結構,結構體的名字是 :UFD,在結構體里面定義了三個成員 ,filename,safecode,length,分別用于存儲用戶文件的名字,文件保護碼,文件的長度 , *curfile = NULL。 2. 功能設計實現總體流程 選 擇 操 作用 戶 登 錄用 戶 注 冊退 出在 M F D 中 找到 該 用 戶 ?初 始 化 命 令 關 鍵 字輸 入 操 作 命 令刪除文件讀文件寫文件創(chuàng)建文件刪除文件打開文件改變權限保存當前主目錄顯示文件繼 續(xù) 操 作 執(zhí) 行 ?開 始結 束結 束Y N N Y 3. 主要數據結構 struct UFD {//用戶文件模塊 char filename[32]。在主目錄中有注冊用戶的用戶名和另一標志該用戶目錄下是否有文件的指針標記。用戶可以選擇用覆蓋原來內容的方式或和在文件的末尾追加新信息的方式寫入信息。 ⑧ read——讀文件信息。 ⑦ open——在 window 界面下打開某個文件。 ⑤ list——顯示當前注冊目錄下的所有文件信息,包括文件名、文件長度、文件操作權限。執(zhí)行完該命令后回到執(zhí)行命令行。執(zhí)行該命令后,用戶在系統中的所有信息,包括該用戶目錄下的所有文件都被刪除。也就是說該系統允許任何用戶申請空間,而且在其目錄下的文件數目并不做任何的限制。 二、 實驗要求 根據流程圖 閱讀所給文件系統源程序 ,并對源程序加以注釋(注釋量達 70%以上)。 計算機系綜合性實驗 實 驗 報 告 課程名稱 操作系統 實驗報告 一個簡單的文件系統 的 詳細設計 一個簡單的文件系統 的 詳細設計 一、實驗目的 ( 1)閱讀并調試一個簡單的文件系統,模擬文件管理的工作過程。用戶在一次運行中只能打開一個文件,對文件必須設置保護措施,且至少有 create、 delete、 open、 close、read、 write 等命令。對用戶和用戶的文件數目并沒有上限。 命令格式: bye ② close——刪除用戶注冊信息命令。該文件的管理信息登記在用戶文件信息管理模塊中。 命令格式: deletefile1 其中: file1 為要刪除的文件名。 其中: file1 為要授權的文件名。 命令格式: openfile1 其中: file1 為要打開的文件名。 ⑨ write——向某個文件寫入新的信息。設置主目錄( MFD)和用戶文件目錄 (UFD),分別以文件的方式保存在磁盤中。 ( 3)該系統大量使用高級語言中的文件操作函數,所以能實際看到文件的創(chuàng)建、寫入、讀出、刪除等效果。 //文件長度 }*curfile = NULL。 //用戶目錄下的文件指針, false 表示目錄為 空 ,true 為該用戶目錄中有文件 }*curuser = NULL,*elseuser=NULL。Set Buffer Cout error End 圖 8 CreatFile Can Write Ch Scanf Buffer Cout Ture NewFile=Malloc(UFD) Other Y ?Y?||?y? End 圖 7 DeleteUser Begin ch Scanf ch R R=ClearUserFile(圖 5) ClearUse