東北大學操作系統(tǒng)課設成組鏈接法文件系統(tǒng)報告要點_第1頁
東北大學操作系統(tǒng)課設成組鏈接法文件系統(tǒng)報告要點_第2頁
東北大學操作系統(tǒng)課設成組鏈接法文件系統(tǒng)報告要點_第3頁
東北大學操作系統(tǒng)課設成組鏈接法文件系統(tǒng)報告要點_第4頁
東北大學操作系統(tǒng)課設成組鏈接法文件系統(tǒng)報告要點_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、操作系統(tǒng)課程設計報告設計題目:多用戶、多級目錄結構文件系統(tǒng)的設計與實現(xiàn)班 級:計算機1202班組長學號:20123843設計時間:2015年7月50摘要文件是具有文件名的一組關聯(lián)信息的集合,通常文件由若干個記錄組成。文件系統(tǒng)是操作系統(tǒng)與管理文件有關的軟件和數(shù)據(jù)集合。從用戶的角度看,文件系統(tǒng)實現(xiàn) 按名存取"。從系統(tǒng)的角度看,文件系統(tǒng)是對文件存儲器的存儲空間進行 組織、分配負責文件的存儲并對存入的文件實施保護、檢索的一組軟件集合。為 使用戶能靈活方便地使用和控制文件,文件系統(tǒng)提供了一組進行文件操作的系統(tǒng) 調用:建立文件、刪除文件、打開文件、關閉文件、讀文件和寫文件本文通過分析上課所述的有

2、關文件系統(tǒng)內(nèi)容,學習老師提供的實現(xiàn)設計,按 照任務書的說明,在組員的共同努力下,自主設計數(shù)據(jù)結構與相關算法,模擬了 一個簡易文件系統(tǒng)。能夠實現(xiàn)多用戶、多級目錄,并用成組鏈接法實現(xiàn)空閑磁盤 塊分配與回收。該文件系統(tǒng)提供用戶登錄、目錄管理、文件管理等功能,可滿足 用戶日常使用。通過這次課程設計,我們加深了對操作系統(tǒng)中文件系統(tǒng)的理解, 了解了文件系統(tǒng)中文件的物理存儲結構。關鍵詞:操作系統(tǒng),文件系統(tǒng)。摘要3.1 概述5.1.1 概要設計5.1.2 基本原理5.2課程設計任務及要求5.1.1 設計任務5.1.2 設計要求6.3 .算法及數(shù)據(jù)結構6.3.1 算法的總體思想(流程)63.2 系統(tǒng)初始化和安裝

3、模塊.6.3.2.1 功能7.3.2.2 數(shù)據(jù)結構7.3.3 磁盤管理模塊8.3.3.1 功能8.3.3.2 數(shù)據(jù)結構8.3.3.3 算法8.3.4 用戶模塊9.3.4.1 功能9.3.4.2 數(shù)據(jù)結構9.3.5 目錄管理模塊9.3.5.1 功能9.3.5.2 數(shù)據(jù)結構9.3.6 文件管理模塊 1.03.6.1 功能1.03.6.2 數(shù)據(jù)結構.104 .程序設計與實現(xiàn)1.24.1 程序流程圖1.24.2 程序說明1.84.3 實驗結果1.95 .結論236參考文獻237.收獲、體會和建議241概述1.1 概要設計本文基于操作系統(tǒng)文件管理,設計實現(xiàn)一個多用戶、多級目錄結構的文件 系統(tǒng),主要實現(xiàn)了

4、多用戶(user0,useU,user2)、多級目錄、系統(tǒng)初始化(format)、 用戶登錄(login)、顯示命令幫助(help)、列出文件目錄(dir)、創(chuàng)建目錄(cdir)、 改變目錄(cd)、文件的創(chuàng)建(create、文件的讀(read)、文件的寫(edit)、 文件的刪除(del)、文件的重命名(rename、注銷登錄(logout)、退出(quit) 等相關功能。1.2 基本原理本系統(tǒng)采用磁盤存儲方式,空閑磁盤塊采用成組鏈接法分配與回收。系統(tǒng)主要數(shù)據(jù)結構如下:文件目錄項1節(jié)點于1*4 *4« ,* 停點支&集。文樣長金丈母麻占月及in*. , .» *.

5、占用掙去方看電本 V4 .* *, 壇于卷聚2課程設計任務及要求2.1 設計任務模擬UNIX (或LINUX ,或FAT)系統(tǒng)的文件管理功能。包括多用戶:usr1,,usr8 (1-8個用戶)多級目錄:可有多級子目錄具有l(wèi)ogin (用戶登錄)系統(tǒng)初始化(建文件卷、提供登錄模塊)文件的創(chuàng)建:create文件的打開:open文件的讀:read文件的寫:write模擬UNIX (或LINUX ,或FAT)系統(tǒng)的文件管理功能。包括:文件關閉:close刪除文件:delete創(chuàng)建目錄:mkdir改變目錄:chdir列出文件目錄:dir退出:logout格式化:format以上是基本內(nèi)容,可以根據(jù)實際文

6、件系統(tǒng)提供的命令和系統(tǒng)調用,自己增 加和實現(xiàn)附加的功能。2.2 設計要求1、在深入理解操作系統(tǒng)基本原理的基礎上,對于選定的題目,以小組為單位,先確定設計方案;2、設計系統(tǒng)的數(shù)據(jù)結構和程序結構,設計每個模塊的處理流程。要求設計 合理;3、編程序實現(xiàn)系統(tǒng),要求實現(xiàn)可視化的運行界面,界面應清楚地反映出系 統(tǒng)的運行結果;4、確定測試方案,選擇測試用例,對系統(tǒng)進行測試;5、運行系統(tǒng)并要通過驗收,講解運行結果,說明系統(tǒng)的特色和創(chuàng)新之處, 并回答指導教師的提問;3.算法及數(shù)據(jù)結構3.1 算法的總體思想(流程)文件系統(tǒng)由每塊1024字節(jié)的若干磁盤塊組成。磁盤塊由文件目錄、磁盤 i 節(jié)點和超級塊管理。采用成組鏈

7、接法分配和回收 block塊。3.2 系統(tǒng)初始化和安裝模塊3.2.1 功能該模塊實現(xiàn)的功能有系統(tǒng)初始化和載入。系統(tǒng)初始化是指將已定義好的磁盤 結構寫入磁盤,包括用戶信息、初始用戶目錄、超級塊信息以及磁盤i位圖和block 塊位圖初始狀態(tài)。系統(tǒng)安裝是指將上次保存的文件系統(tǒng)重新讀取出來。3.2.2 數(shù)據(jù)結構該模塊主要的數(shù)據(jù)結構包括磁盤塊結構、i結點結構、超級塊結構和目錄項結構。/*磁盤塊結構*/struct block/一個塊占 1KBint n;/存放空閑盤快的個數(shù)int free50;/存放空閑盤快的地址int a;/盤快是否被占用標志char content1000;快上每個字節(jié)存放的符號m

8、emory20449;/*超級塊結構*/struct block_superint n;/空閑的盤快的個數(shù)int free50;/存放進入棧中的空閑塊super_block;/*i結點結構*/struct node /i 結點信息int file_style;/i結點文件類型int file_length;/i結點文件長度int file_address100; 文件占用的物理塊號。int limit;打開讀寫權限,0表示能打開讀寫,1表示能打開讀,2表示能打開寫, 3表示只能打開int file_UserId; i_node640;/*目錄項結構*/struct dir /目錄項信息char

9、 file_name10;文件名int i_num;/文件的結點號char dir_name10;目錄名或者說文件所在目錄root640;3.3 磁盤管理模塊3.3.1 功能該模塊包括i節(jié)點和block塊的分配。本系統(tǒng)采用成組鏈接法對block塊進行分配和回收。3.3.2 數(shù)據(jù)結構該模塊的主要數(shù)據(jù)結構用到磁盤塊結構和超級快結構。/*磁盤塊結構*/struct block/一個塊占 1KBint n;/存放空閑盤快的個數(shù)int free50;/存放空閑盤快的地址int a;/盤快是否被占用標志char content1000;快上每個字節(jié)存放的符號memory20449;/*超級塊結構*/str

10、uct block_superint n;/空閑的盤快的個數(shù)int free50;/存放進入棧中的空閑塊super_block;3.3.3 算法該模塊采用成組鏈接法管理block塊。將空閑塊分成若干組,每50個空閑塊為一組,每組的第一空閑塊登記了下一組空閑塊的物理盤塊號和空閑塊總數(shù)。如果一個組的第二個空閑塊號等于0,則有特殊的含義,意味著該組是最后一組,即無下一個空閑塊。將第一組放入超級快中。分配空閑塊的時候,從前往后分配,先從第一組開始分配,第一組空閑的50 塊分完了,才進入第二組。釋放空閑塊的時候正好相反,從后往前分配,先將釋放的空閑塊放到第一組, 第一組滿了,在第一組前再開辟一組,之前的

11、第一組變成第二組。3.4 用戶模塊3.4.1 功能該模塊包括用戶登錄和注銷。用戶通過正確的用戶名和密碼,即可登錄系統(tǒng)。 用戶可以創(chuàng)建文件或目錄,但是只能管理自己創(chuàng)建的文件或目錄。3.4.2 數(shù)據(jù)結構本系統(tǒng)中用戶信息包括用戶id、用戶名、密碼。具體定義如下所示。string UserName8 = "user0", "useU", "user2", "user3", "user4", "user5","user6", "user7"str

12、ingPassWord8="12345","12345","12345","12345","12345","12345","12345","12345"UserName數(shù)組下標即用戶ID。3.5 目錄管理模塊3.5.1 功能該模塊包括列出目錄下文件、創(chuàng)建目錄、打開目錄、刪除目錄等功能。用 戶可以創(chuàng)建不重名的目錄,如果發(fā)現(xiàn)重名目錄,則系統(tǒng)不允許創(chuàng)建。列出文件目 錄命令將當前所在目錄下的所有子目錄及文件。打開目錄命令能切換當前目錄。 刪除目

13、錄時首先會判斷所要刪除的目錄下是否有文件,如果有,則不允許刪除, 否則可將目錄刪除。3.5.2 數(shù)據(jù)結構/*目錄項結構*/struct dir /目錄項信息char file_name10; 文件名int i_num;/文件的結點號char dir_name10;目錄名或者說文件所在目錄root640;/*i結點結構*/struct node /i 結點信息int file_style;/i結點文件類型int file_length;/i結點文件長度int file_address100; 文件占用的物理塊號。int limit;打開讀寫權限,0表示能打開讀寫,1表示能打開讀,2表示能打開寫,

14、3表示只能打開int file_UserId; i_node640;I節(jié)點中的文件類型為0時代表該文件是目錄文件,可以進行相關目錄操作。3.6 文件管理模塊3.6.1 功能該模塊包括文件的創(chuàng)建、文件的打開與關閉、文件的讀、文件的寫、文件的 刪除等功能。用戶可以創(chuàng)建不重名的文件,如果發(fā)現(xiàn)重名文件,則系統(tǒng)不允許創(chuàng) 建。文件的讀命令將文件內(nèi)容顯示在屏幕上。文件的寫命令能添加文件內(nèi)容。文件的刪除命令將文件刪除。3.6.2 數(shù)據(jù)結構該模塊主要的數(shù)據(jù)結構包括磁盤塊結構、i結點結構、超級塊結構和目錄項 結構。/*磁盤塊結構*/struct block/一個塊占 1KBint n;/存放空閑盤快的個數(shù)int

15、free50;/存放空閑盤快的地址int a;/盤快是否被占用標志char content1000;快上每個字節(jié)存放的符號memory20449;/*超級塊結構*/ struct block_superint n;/空閑的盤快的個數(shù)int free50;/存放進入棧中的空閑塊super_block;/*i結點結構*/struct node /i 結點信息int file_style;/i結點文件類型int file_length;/i結點文件長度int file_address100; 文件占用的物理塊號。int limit;打開讀寫權限,0表示能打開讀寫,1表示能打開讀,2表示能打開寫, 3

16、表示只能打開int file_UserId; i_node640;/*目錄項結構*/struct dir /目錄項信息 char file_name10; 文件名int i_num;/文件的結點號char dir_name10;目錄名或者說文件所在目錄root640;4.程序設計與實現(xiàn)4.1程序流程圖系統(tǒng)流程圖開始登錄Y登錄login創(chuàng)建目錄create_dir文件類型參數(shù)設為目錄文件T創(chuàng)建文件結束刪除目錄del_dir創(chuàng)建文件create_file開始刪除文件del file打開文件openNNN 錯誤提示關閉文件close錯誤提示文件i節(jié)點號從打開表刪除結束寫文件write開始NNN 7,

17、錯誤提示讀文件readYY錯誤提示用戶有讀 權限?文件存在?文件已打開?將磁盤中的內(nèi)容讀出結束?磁盤塊回收callback開始超級塊已滿回收一個磁盤塊將超級塊中的磁盤塊號放入下一個回收的磁盤塊中結束清空超級塊,將上述磁盤塊號放入超級塊回收結束?磁盤塊分配allot;4.2程序說明本文件系統(tǒng)是用C語言編寫而成,該系統(tǒng)提供以下功能:0.初始化format1 .查看當前目錄文件列表 dir2 .查看文件信息cat-(cat + 空格+文件名)3 .查看系統(tǒng)信息ls4 .創(chuàng)建目錄md(md + 空格 + 目 錄名)5 .創(chuàng)建文件vi-(vi+文件名+文件長度+權限)6 .刪除文件del-(del +

18、空格+文件名)7 .打開文件open-(open + 空格 + 文件名)8 .關閉文件close-(close + 空格 + 文件名)9 .讀取文件read-(read + 空格 + 文件名)10 .寫入文件write-(write + 空格 + 文件名+ 空格 + 寫入字 符)11 .刪除目錄deldir-(deldir + 空格 + 目錄名)12 .進入當前目錄下的指定目錄 cd(cd +空格+目錄名)13 .返回上一級目錄cd.14 .顯示幫助命令help15 .退出文件系統(tǒng)quit16 .退出登錄logout輸入相應命令即可執(zhí)行對應功能。注意事項:創(chuàng)建的文件長度< 1004.3實

19、驗結果文件系統(tǒng)執(zhí)行過程如下圖所示圖4-1登錄界面圖4-2幫助界面回J用占登錄界面-he Ip"-Quit " lagrouit _白_ 一 一 一 一下錄二一 一錄目紊 二 索- 堂前一 Msle i刁uduIJ口V- - - w 1 2 3 4 5 6 4r5Lhr?L8KulrlkLlLliLXkil: is置 J程 he化文 t心口 X* at初UN r入 fo已afiIsystem/md aaaf ilsjFstem/dir用戶名t useMr文件名字文件類型文件長度所屬目錄aaa041f ilsystenf ilaystem/圖4-3創(chuàng)建目錄f用上登錄界面口 I

20、回圖4-4創(chuàng)建文件截圖I-祖A. UMIX +件橫擬f ilsysten/nd aaa f ilsjfstem/dir 用戶名:uwcrl文件名字f ilsystem/ui bbb 4 0f ilsjjFstem/dii'忸戶名:scrl 一 .filsystem/open f ilsjsstem/i'ead文件名字aaahhfabbh bbb文件類型 文件長度 所屬目錄Filsysten文件類型文件長度所屬目錄f ilsysteni文件內(nèi)容,f ilsysCem/write bbb aa已寫入文件末尾! f ilsjrstem/read bbb文件內(nèi)容I曰 filsystem

21、/ 半;圖4-5讀文件及寫文件截圖圖4-6文件的刪除截圖圖4-8顯示文件屬性截圖圖4-9打開目錄截圖圖4-9返回上級目錄截圖5.結論本次課程設計,我們組設計實現(xiàn)了一個多用戶、多級目錄下的文件管理系 統(tǒng),本系統(tǒng)以成組鏈接法管理磁盤,主要實現(xiàn)了多用戶、多級目錄、用戶登錄、 創(chuàng)建目錄、改變目錄、文件的創(chuàng)建、文件的打開、關閉、讀、寫、刪除、注銷登 錄等相關功能,完成了課程設計要求的基本功能,系統(tǒng)能夠正常運行并能夠進行 格式化操作。通過這次課程設計,我們對于日常使用的文件系統(tǒng)有了進一步了解,并且 對于文件系統(tǒng)中文件的內(nèi)部存儲結構有了更清楚的認識。6參考文獻1湯子瀛.計算機操作系統(tǒng)(第三版)M.西安:電子

22、科技大學出版社,2007 2龐麗萍.操作系統(tǒng)原理M.武漢:華中科技大學出版社,20003張堯學、史美林.計算機操作系統(tǒng)教程(第二版)M.北京:清華大學出版社, 20004張麗芬,劉立雄,王全玉.操作系統(tǒng)實驗教程M.北京:清華大學出版社,20107.收獲、體會和建議課程設計進行了三周周,是一次將書本知識應用到實踐考驗。經(jīng)過一周設 計,漸漸參透書本上的基礎知識并應用到實踐,并且主動去搜集和尋找相關的資 料,自學一些相關的知識。在這次課設過程中,我們通過查閱資料,了解了一些不同的文件系統(tǒng)管理 的方法,通過不斷的修改完善,最終實現(xiàn)了這個相對完整的系統(tǒng)。 在文件系統(tǒng)的 設計過程中,我們不僅鞏固了課堂上所

23、學習到的知識, 也提高了我們的編程能力 和項目設計能力。盡管在設計過程中遇到了許多困難,但在林樹寬老師和張一飛 老師的幫助下,組員間的通力協(xié)作下,基本得到了克服。因此,我們特別感謝兩 位老師。通過這次課程設計,我們收獲了一次寶貴的經(jīng)驗,彌補了我們在知識和 技能方面的不足之處,這些都將在我們今后的工作和學習中起到基石的作用。操作系統(tǒng)課程設計也許是我們在大學本科階段做的最后一門課程設計,我 們待它也是格外重視。許多個日日夜夜,經(jīng)過了多次的修改完善,程序的每一行 代碼,都是我們經(jīng)過反復推敲后確定的。我們的設計也許存在著許多的不足之處, 但絕對是我們的心血之作。源碼#include "std

24、io.h"#include <stdlib.h>#include <conio.h>#include <string>#include <windows.h>#include <iostream>using namespace std;string UserName8 = "userO", "useri", "user2", "user3", "user4", "user5","user6&quo

25、t;, "user7"string PassWord8 = "12345”,"12345”,"12345”,"12345”,"12345”,"12345”,"12345”,"12345”;int login_userid=-1;/if login_userid=0 then UserNamelogin_userid="user0"int file_array8=-1,-1,-1,-1,-1,-1,-1,-1;/ 打開文件表組int file_array_head;int ph

26、ysic100;文件地址緩沖區(qū)int style=1;文件的類型char cur_dir10="filsystem"當前目錄struct commandchar com10;cmd17;struct block/ 一個塊占 1KBint n;/存放空閑盤快的個數(shù)int free50;/存放空閑盤快的地址int a;/盤快是否被占用標志char content1000;快上每個字節(jié)存放的符號memory20449;struct block_superint n;空閑的盤快的個數(shù)int free50;存放進入棧中的空閑塊/int stack50;/存放下一組空閑盤快的地址sup

27、er_block;struct node /i 結點信息int file_style;/i結點文件類型int file_length;/i結點文件長度int file_address100;文件占用的物理塊號。int limit;打開讀寫權限,0表示能打開讀寫,1表示能打開讀,2表示能打開寫,3表示只 能打開int file_UserId; i_node640;/每個I節(jié)點占32字節(jié)struct dir/目錄項信息char file_name10;文件名int i_num;文件的結點號char dir_name10;目錄名或者說文件所在目錄root640;void format() / 格式化

28、int i,j,k;super_block.n=50;for(i=0;i<50;i+)超級塊初始化super_block.freei=i;存放進入棧中的空閑塊/super_block.stacki=50+i;存放下一組的盤塊for(i=0;i<640;i+)/i結點信息初始化for(j=0;j<100;j+)i_nodei.file_addressj=-1;/ 文件地址i_nodei.limit=-1;i_nodei.file_length=-1;文件長度i_nodei.file_style=-1; / 文件類型i_nodei.file_UserId=-1;/ 用戶 IDfo

29、r(i=0;i<640;i+)/目錄項信息初始化strcpy(rooti.file_name,"");rooti.i_num=-1;strcpy(rooti.dir_name,"");for(i=0;i<20449;i+)/ 存儲空間初始化memoryi.n=0;必須有這個memoryi.a=0;for(j=0;j<50;j+)memoryi.freej=-1;int c;for(c=0;c<1000;c+)memoryi.contentc='0'for(i=0;i<20449;i+)/將空閑塊的信息用成組鏈

30、接的方法寫進每組的最后一個塊中存儲空間初始化if(i+1)%50=0)k=i+1;for(j=0;j<50;j+)if(k<20450)memoryi.freej=k;/ 下一組空閑地址memoryi.n+;/下一組空閑個數(shù)注意在memoryi.n+之前要給其賦初值k+;elsememoryi.freej=-1;memoryi.a=0;/標記為沒有使用continue;處理完用于存儲下一組盤塊信息的特殊盤塊后,跳過本次循環(huán)for(j=0;j<50;j+)memoryi.freej=-1;memoryi.n=0; int l;for(l=0;l<8;l+)file_arr

31、ayl=-1;file_array_head=0;int u;for(u=0;u<100;u+) physicu=-1;printf("已經(jīng)初始化完畢n");printf("進入 UNIX 文件模擬nn");void callback(int length);void allot(int length)分配空間int i,j,k,m,p;for(i=0;i<length;i+)k=50-super_block.n;超級塊中表示空閑塊的指針m=super_block.freek; 棧中的相應盤塊的地址p=super_block.free49;棧

32、中的最后一個盤塊指向的地址if(p=-1/*|memoryp.a=1*/)沒有剩余盤塊printf("內(nèi)存不足,不能夠分配空間n");callback(i);/之前已分配的i個盤塊回收; break;if(super_block.n=1)memorym.a=1;將最后一個盤塊分配掉physici=m;super_block.free49=-1;super_block.n=0;for(j=50-memorym.n;j<50;j+) /從最后一個盤塊中取出下一組盤塊號寫入棧中 super_block.freej=memorym.freej;super_block.n+;c

33、ontinue;/要跳過這次循環(huán),下面的語句在IF中已經(jīng)執(zhí)行過physici=m;如果棧中超過一個盤,棧中的相應盤塊的地址寫進文件地址緩沖區(qū)memorym.a=1;m=-1;super_block.n-;void callback(int length)回收磁盤空間int i,j,k,m,q=0;for(i=length-1;i>=0;i-)k=physici;需要提供要回收的文件的地址m=49-super_block.n;回收到棧中的哪個位置if(super_block.n=50)注意 當 super_block.n=50 時 m=-1;的值/super_block.n=50的時候棧滿

34、了,要將這個棧中的所有地址信息寫進下一個地址中for(j=0;j<50;j+)memoryk.freej=super_block.freej;int u;for(u=0;u<50;u+)super_block.freeu=-1;super_block.stacku=memoryk.freeu;super_block.n=0;memoryk.n=50;memoryk.a=0;if(m=-1)m=49;/將下一個文件地址中的盤塊號回收到棧底中,這個地址中存放著剛才滿棧的地址的信息super_block.freem=physici; 將下一個文件地址中的盤塊號回收到棧中 super_bl

35、ock.n+;void create_file(char filename口,int length,int userid,int limit) /創(chuàng)建文件int i,j;for(i=0;i<640;i+)if(strcmp(filename,rooti.file_name)=0)printf("已經(jīng)存在同名文件,不允許建立重名的文件n");return;for(i=0;i<640;i+)if(rooti.i_num=-1)rooti.i_num=i;strcpy(rooti.file_name,filename);strcpy(rooti.dir_name,cu

36、r_dir);把當前目錄名給新建立的文件i_nodei.file_style=style;/style=0 說明文件是目錄文件i_nodei.file_length=length;i_nodei.limit=limit;i_nodei.file_UserId=userid; printf("%s.%dn",rooti.file_name,i_nodei.file_UserId);allot(length);for(j=0;j<length;j+)i_nodei.file_addressj=physicj;int u;for(u=0;u<100;u+)分配完清空緩

37、沖區(qū)physicu=-1;break;void del_file(char filename) 刪除文件int i,j,k;for(i=0;i<640;i+)if(strcmp(filename,rooti.file_name)=0)&&(strcmp(cur_dir,rooti.dir_name)=0)&&(i_noder ooti.i_num.file_UserId=login_userid)printf("1get here'n");int add,c;for(add=0;add<i_noderooti.i_num.

38、file_length;add+) 文件內(nèi)容清空for(c=0;memoryi_noderooti.i_num.file_addressadd.contentc!='0'c+)memoryi_noderooti.i_num.file_addressadd.contentc尸0'k=rooti.i_num; printf("2get heren");i_nodek.file_UserId=-1;i_nodek.limit=-1;for(j=0;j<i_nodek.file_length;j+)physicj=i_nodek.file_addres

39、sj; printf("get here'n");callback(i_nodek.file_length); / 調用回收函數(shù)int u;回收完情空緩存區(qū)for(u=0;u<100;u+)physicu=-1;for(j=0;j<100;j+)刪除文件后要將文件屬性和目錄項的各個值恢復初值i_nodek.file_addressj=-1; /文件占用的塊號地址恢復初值strcpy(rooti.file_name,"");文件名恢復初值rooti.i_num=-1; 目錄項的I結點信息恢復初值strcpy(rooti.dir_name

40、,"");目錄項的文件目錄信息恢復初值i_nodek.file_length=-1;/ 文件長度恢復i_nodek.file_style=-1;文件類型恢復初值break;if(i=640)printf("登錄用戶的該目錄下不存在這個文件n");void display_sys()顯示系統(tǒng)信息(磁盤使用情況) int i,m,k=0;for(i=0;i<20449;i+) if(memoryi.a=0) k+; m=20449-k; printf("空閑的盤塊數(shù)是:t"); printf("%dn",k);p

41、rintf("使用的盤塊數(shù)是:t"); printf("%dn",m);void show_file(char filename)顯示文件信息int i,j,k;printf("tt文件名字文件類型文件長度讀取權限所屬目錄t所屬用戶n"); for(i=0;i<640;i+) k=rooti.i_num;if(strcmp(filename,rooti.file_name)=0 && (i_nodek.file_style=1) printf("tt %st",rooti.file_name)

42、; 文件名 printf("t%dt",i_nodek.file_style);文件的類型printf("%dt",i_nodek.file_length);文件的長度printf("%dt",i_nodek.limit);printf("%st",rooti.dir_name);文件所在的目錄printf("user%dn",i_noderooti.i_num.file_UserId); printf("tt文件占用的物理地址 n");for(j=0;j<i_node

43、k.file_length;j+)顯示物理地址 printf("%d ",i_nodek.file_addressj); / 文件具體占用的盤塊號 printf("n"); break; if(i=640) printf("沒有這個文件或者這個文件不是正規(guī)文件n");/shhchvoid write_file(FILE *fp)將信息寫入系統(tǒng)文件中int i;fp=fopen("system","wb");for(i=0;i<20449;i+) fwrite(&memoryi,si

44、zeof(struct block),1,fp);fwrite(&super_block,sizeof(struct block_super),1,fp);for(i=0;i<640;i+) fwrite(&i_nodei,sizeof(struct node),1,fp);for(i=0;i<640;i+) fwrite(&rooti,sizeof(struct dir),1,fp); fclose(fp);void read_file(FILE *fp)讀出系統(tǒng)文件的信息int i;fp=fopen("system","rb

45、"); for(i=0;i<20449;i+)fread(&memoryi,sizeof(struct block),1,fp); fread(&super_block,sizeof(struct block_super),1,fp);for(i=0;i<640;i+) fread(&i_nodei,sizeof(struct node),1,fp);for(i=0;i<640;i+) fread(&rooti,sizeof(struct dir),1,fp);fclose(fp);int login()system("ti

46、tle用戶登錄界面");printf("nn 用戶名:"); string tempusername;cin>>tempusername;cout<<tempusername!;int i=0;for(i=0;i<8;i+)if(tempusername=UserNamei)printf("密碼:");string temppassword;cin>>temppassword;if(temppassword=PassWordi)login_userid=i;printf("登錄成功,請稍等n&

47、quot;);for(int a =0; a<4; a+) Sleep(500); printf(".");return 0; else system("cls");printf("密碼錯誤n輸入y :重新登錄n輸入n:退出系統(tǒng)n"); getchar();char c=getchar();getchar();if(c='y'|c='Y') system("cls"); login();return 0;if(c='n'|c='N')exit(0

48、);if(i=8)system("cls");printf("沒有此用戶n輸入y:重新登錄n輸入n:退出系統(tǒng)n");getchar();char c=getchar();getchar();if(c='y'|c='Y')system("cls");i=0;login();return 0;if(c='n'|c='N')exit(0);return 0; void logout。/* 退出 */Logouting");printf(" nfor(int

49、a =0; a<4; a+)Sleep(500);printf(".");system("cls"); int open(char filename10)int i;for(i=0;i<640;i+)&&if(strcmp(rooti.file_name,filename)=0 && i_noderooti.i_num.file_style=1 i_noderooti.i_num.file_UserId=login_userid)if(file_array_head<8)file_arrayfile_ar

50、ray_head=rooti.i_num;file_array_head+;elseprintf("打開的文件已達上限,無法打開本文件n");return rooti.i_num;if(i=640) printf("您要打開的文件不存在或不屬于該用戶n");return 0;void close(char filename10)int i;for(i=0;i<640;i+)&&if(strcmp(rooti.file_name,filename)=0 && i_noderooti.i_num.file_style=1

51、 i_noderooti.i_num.file_UserId=login_userid)int j;for(j=0;j<file_array_head;j+)if(rooti.i_num=file_arrayj)int m;for(m=j;m<file_array_head;m+)file_arraym=file_arraym+1;file_array_head-;return;if(j=file_array_head)printf("您要關閉的文件未打開過!n"); return;if(i=640) printf("您要關閉的文件不存在或不屬于該用戶

52、n");return ;/ftvoid create_dir(char filename) 創(chuàng)建 目 錄style=0;/0代表文件類型是目錄文件create_file(filename,4,login_userid,-1);style=1;用完恢復初值,因為全局變量,否則void del_dir(char filename) 刪除目錄需要判斷目錄下時候為空,不為空就不刪除int i,j,k;for(i=0;i<640;i+)還要加條件判斷要刪除的目錄是不是當前目錄k=rooti.i_num;找到目錄名字if( strcmp(rooti.file_name,filename)=0 && strcmp(cur_dir,filename)!=0 && (i_nodek.file_style)=0 )for(j=0;j<640;j+)if(strcmp(filename,rootj.dir_name)=0)printf("目錄不為空不能直接刪除n");break;if

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論