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

下載本文檔

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

文檔簡介

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

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

3、構(gòu)73.3 磁盤管理模塊83.3.1功能83.3.2 數(shù)據(jù)結(jié)構(gòu)83.3.3算法83.4 用戶模塊93.4.1 功能93.4.2 數(shù)據(jù)結(jié)構(gòu)93.5 目錄管理模塊93.5.1功能93.5.2 數(shù)據(jù)結(jié)構(gòu)93.6 文件管理模塊103.6.1功能103.6.2 數(shù)據(jù)結(jié)構(gòu)104. 程序設(shè)計與實現(xiàn)124.1 程序流程圖124.2 程序說明184.3 實驗結(jié)果195. 結(jié)論236 參考文獻237. 收獲、體會和建議241 概述1.1 概要設(shè)計本文基于操作系統(tǒng)文件管理,設(shè)計實現(xiàn)一個多用戶、多級目錄結(jié)構(gòu)的文件系統(tǒng),主要實現(xiàn)了多用戶(user0,user1,user2)、多級目錄、系統(tǒng)初始化(format)、用戶登

4、錄(login)、顯示命令幫助(help)、列出文件目錄(dir)、創(chuàng)建目錄(cdir)、改變目錄(cd)、文件的創(chuàng)建(create)、文件的讀(read)、文件的寫(edit)、文件的刪除(del)、文件的重命名(rename)、注銷登錄(logout)、退出(quit)等相關(guān)功能。1.2 基本原理本系統(tǒng)采用磁盤存儲方式,空閑磁盤塊采用成組鏈接法分配與回收。系統(tǒng)主要數(shù)據(jù)結(jié)構(gòu)如下:2 課程設(shè)計任務(wù)及要求2.1 設(shè)計任務(wù)模擬UNIX(或LINUX,或FAT)系統(tǒng)的文件管理功能。包括:多用戶 :usr1, , usr8 (1-8個用戶)多級目錄:可有多級子目錄具有l(wèi)ogin (用戶登錄)系統(tǒng)初始化

5、(建文件卷、提供登錄模塊)文件的創(chuàng)建: create文件的打開:open文件的讀:read文件的寫:write模擬UNIX(或LINUX,或FAT)系統(tǒng)的文件管理功能。包括:文件關(guān)閉:close刪除文件:delete創(chuàng)建目錄:mkdir改變目錄:chdir列出文件目錄:dir退出:logout格式化:format以上是基本內(nèi)容,可以根據(jù)實際文件系統(tǒng)提供的命令和系統(tǒng)調(diào)用,自己增 加和實現(xiàn)附加的功能。2.2 設(shè)計要求1、在深入理解操作系統(tǒng)基本原理的基礎(chǔ)上,對于選定的題目,以小組為單位,先確定設(shè)計方案;2、設(shè)計系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)和程序結(jié)構(gòu),設(shè)計每個模塊的處理流程。要求設(shè)計合理;3、編程序?qū)崿F(xiàn)系統(tǒng),要求實

6、現(xiàn)可視化的運行界面,界面應(yīng)清楚地反映出系統(tǒng)的運行結(jié)果;4、確定測試方案,選擇測試用例,對系統(tǒng)進行測試;5、運行系統(tǒng)并要通過驗收,講解運行結(jié)果,說明系統(tǒng)的特色和創(chuàng)新之處,并回答指導(dǎo)教師的提問;3. 算法及數(shù)據(jù)結(jié)構(gòu)3.1算法的總體思想(流程)文件系統(tǒng)由每塊1024字節(jié)的若干磁盤塊組成。磁盤塊由文件目錄、磁盤i節(jié)點和超級塊管理。采用成組鏈接法分配和回收block塊。3.2系統(tǒng)初始化和安裝模塊3.2.1功能該模塊實現(xiàn)的功能有系統(tǒng)初始化和載入。系統(tǒng)初始化是指將已定義好的磁盤結(jié)構(gòu)寫入磁盤,包括用戶信息、初始用戶目錄、超級塊信息以及磁盤i位圖和block塊位圖初始狀態(tài)。系統(tǒng)安裝是指將上次保存的文件系統(tǒng)重新讀

7、取出來。3.2.2數(shù)據(jù)結(jié)構(gòu)該模塊主要的數(shù)據(jù)結(jié)構(gòu)包括磁盤塊結(jié)構(gòu)、i結(jié)點結(jié)構(gòu)、超級塊結(jié)構(gòu)和目錄項結(jié)構(gòu)。/*磁盤塊結(jié)構(gòu)*/struct block/一個塊占1KB int n; /存放空閑盤快的個數(shù) int free50; /存放空閑盤快的地址 int a; /盤快是否被占用標(biāo)志 char content1000;/快上每個字節(jié)存放的符號memory20449;/*超級塊結(jié)構(gòu)*/struct block_super int n; /空閑的盤快的個數(shù) int free50; /存放進入棧中的空閑塊super_block;/*i結(jié)點結(jié)構(gòu)*/struct node /i結(jié)點信息 int file_styl

8、e; /i結(jié)點 文件類型 int file_length; /i結(jié)點 文件長度 int file_address100; /文件占用的物理塊號。 int limit;/打開讀寫權(quán)限,0表示能打開讀寫,1表示能打開讀,2表示能打開寫,3表示只能打開 int file_UserId; i_node640;/*目錄項結(jié)構(gòu)*/struct dir /目錄項信息 char file_name10; /文件名 int i_num; /文件的結(jié)點號 char dir_name10; /目錄名或者說文件所在目錄root640;3.3 磁盤管理模塊3.3.1功能該模塊包括i節(jié)點和block塊的分配。本系統(tǒng)采用成

9、組鏈接法對block塊進行分配和回收。3.3.2 數(shù)據(jù)結(jié)構(gòu)該模塊的主要數(shù)據(jù)結(jié)構(gòu)用到磁盤塊結(jié)構(gòu)和超級快結(jié)構(gòu)。/*磁盤塊結(jié)構(gòu)*/struct block/一個塊占1KB int n; /存放空閑盤快的個數(shù) int free50; /存放空閑盤快的地址 int a; /盤快是否被占用標(biāo)志 char content1000;/快上每個字節(jié)存放的符號memory20449;/*超級塊結(jié)構(gòu)*/struct block_super int n; /空閑的盤快的個數(shù) int free50; /存放進入棧中的空閑塊super_block;3.3.3算法該模塊采用成組鏈接法管理block塊。將空閑塊分成若干組,每

10、50個空閑塊為一組,每組的第一空閑塊登記了下一組空閑塊的物理盤塊號和空閑塊總數(shù)。如果一個組的第二個空閑塊號等于0,則有特殊的含義,意味著該組是最后一組,即無下一個空閑塊。將第一組放入超級快中。分配空閑塊的時候,從前往后分配,先從第一組開始分配,第一組空閑的50塊分完了,才進入第二組。釋放空閑塊的時候正好相反,從后往前分配,先將釋放的空閑塊放到第一組,第一組滿了,在第一組前再開辟一組,之前的第一組變成第二組。3.4 用戶模塊3.4.1 功能該模塊包括用戶登錄和注銷。用戶通過正確的用戶名和密碼,即可登錄系統(tǒng)。用戶可以創(chuàng)建文件或目錄,但是只能管理自己創(chuàng)建的文件或目錄。3.4.2 數(shù)據(jù)結(jié)構(gòu)本系統(tǒng)中用戶

11、信息包括用戶id、用戶名、密碼。具體定義如下所示。string UserName8 = "user0", "user1", "user2", "user3", "user4", "user5","user6", "user7"string PassWord8 = "12345","12345","12345","12345","12345"

12、;,"12345","12345","12345"UserName數(shù)組下標(biāo)即用戶ID。3.5 目錄管理模塊3.5.1功能 該模塊包括列出目錄下文件、創(chuàng)建目錄、打開目錄、刪除目錄等功能。用戶可以創(chuàng)建不重名的目錄,如果發(fā)現(xiàn)重名目錄,則系統(tǒng)不允許創(chuàng)建。列出文件目錄命令將當(dāng)前所在目錄下的所有子目錄及文件。打開目錄命令能切換當(dāng)前目錄。刪除目錄時首先會判斷所要刪除的目錄下是否有文件,如果有,則不允許刪除,否則可將目錄刪除。3.5.2 數(shù)據(jù)結(jié)構(gòu)/*目錄項結(jié)構(gòu)*/struct dir /目錄項信息 char file_name10; /文件名 int

13、 i_num; /文件的結(jié)點號 char dir_name10; /目錄名或者說文件所在目錄root640;/*i結(jié)點結(jié)構(gòu)*/struct node /i結(jié)點信息 int file_style; /i結(jié)點 文件類型 int file_length; /i結(jié)點 文件長度 int file_address100; /文件占用的物理塊號。 int limit;/打開讀寫權(quán)限,0表示能打開讀寫,1表示能打開讀,2表示能打開寫,3表示只能打開 int file_UserId; i_node640;I節(jié)點中的文件類型為0時代表該文件是目錄文件,可以進行相關(guān)目錄操作。3.6 文件管理模塊3.6.1功能該模塊

14、包括文件的創(chuàng)建、文件的打開與關(guān)閉、文件的讀、文件的寫、文件的刪除等功能。用戶可以創(chuàng)建不重名的文件,如果發(fā)現(xiàn)重名文件,則系統(tǒng)不允許創(chuàng)建。文件的讀命令將文件內(nèi)容顯示在屏幕上。文件的寫命令能添加文件內(nèi)容。文件的刪除命令將文件刪除。3.6.2 數(shù)據(jù)結(jié)構(gòu)該模塊主要的數(shù)據(jù)結(jié)構(gòu)包括磁盤塊結(jié)構(gòu)、i結(jié)點結(jié)構(gòu)、超級塊結(jié)構(gòu)和目錄項結(jié)構(gòu)。/*磁盤塊結(jié)構(gòu)*/struct block/一個塊占1KB int n; /存放空閑盤快的個數(shù) int free50; /存放空閑盤快的地址 int a; /盤快是否被占用標(biāo)志 char content1000;/快上每個字節(jié)存放的符號memory20449;/*超級塊結(jié)構(gòu)*/str

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

16、e10; /文件名 int i_num; /文件的結(jié)點號 char dir_name10; /目錄名或者說文件所在目錄root640;4. 程序設(shè)計與實現(xiàn)4.1 程序流程圖系統(tǒng)流程圖登錄login創(chuàng)建目錄create_dir刪除目錄del_dir創(chuàng)建文件create_file刪除文件del_file打開文件open關(guān)閉文件close 寫文件write讀文件read磁盤塊回收callback磁盤塊分配allot;4.2 程序說明本文件系統(tǒng)是用C語言編寫而成,該系統(tǒng)提供以下功能: 0.初始化-format 1.查看當(dāng)前目錄文件列表-dir 2.查看文件信息-cat-(cat + 空格 + 文件名)

17、 3.查看系統(tǒng)信息-ls 4.創(chuàng)建目錄-md-(md + 空格 + 目錄名) 5.創(chuàng)建文件-vi-(vi + 文件名 + 文件長度 + 權(quán)限) 6.刪除文件-del-(del + 空格 + 文件名) 7.打開文件-open-(open + 空格 + 文件名) 8.關(guān)閉文件-close-(close + 空格 + 文件名) 9.讀取文件-read-(read + 空格 + 文件名) 10.寫入文件-write-(write + 空格 + 文件名+ 空格 + 寫入字符) 11.刪除目錄-deldir-(deldir + 空格 + 目錄名) 12.進入當(dāng)前目錄下的指定目錄-cd-(cd + 空格 +

18、 目錄名) 13.返回上一級目錄-cd. 14.顯示幫助命令-help 15.退出文件系統(tǒng)-quit 16.退出登錄-logout 輸入相應(yīng)命令即可執(zhí)行對應(yīng)功能。注意事項:創(chuàng)建的文件長度 < 1004.3 實驗結(jié)果文件系統(tǒng)執(zhí)行過程如下圖所示。圖4-1登錄界面圖4-2幫助界面圖4-3創(chuàng)建目錄圖4-4創(chuàng)建文件截圖圖4-5讀文件及寫文件截圖圖4-6文件的刪除截圖圖4-8顯示文件屬性截圖圖4-9打開目錄截圖圖4-9返回上級目錄截圖5. 結(jié)論本次課程設(shè)計,我們組設(shè)計實現(xiàn)了一個多用戶、多級目錄下的文件管理系統(tǒng),本系統(tǒng)以成組鏈接法管理磁盤,主要實現(xiàn)了多用戶、多級目錄、用戶登錄、創(chuàng)建目錄、改變目錄、文件

19、的創(chuàng)建、文件的打開、關(guān)閉、讀、寫、刪除、注銷登錄等相關(guān)功能,完成了課程設(shè)計要求的基本功能,系統(tǒng)能夠正常運行并能夠進行格式化操作。通過這次課程設(shè)計,我們對于日常使用的文件系統(tǒng)有了進一步了解,并且對于文件系統(tǒng)中文件的內(nèi)部存儲結(jié)構(gòu)有了更清楚的認(rèn)識。6 參考文獻1 湯子瀛.計算機操作系統(tǒng)(第三版)M.西安:電子科技大學(xué)出版社,20072龐麗萍.操作系統(tǒng)原理M.武漢:華中科技大學(xué)出版社,20003張堯?qū)W、 史美林.計算機操作系統(tǒng)教程 ( 第二版 ) M.北京:清華大學(xué)出版社,20004張麗芬,劉立雄,王全玉.操作系統(tǒng)實驗教程M.北京:清華大學(xué)出版社,20

20、107. 收獲、體會和建議課程設(shè)計進行了三周周,是一次將書本知識應(yīng)用到實踐考驗。經(jīng)過一周設(shè)計,漸漸參透書本上的基礎(chǔ)知識并應(yīng)用到實踐,并且主動去搜集和尋找相關(guān)的資料,自學(xué)一些相關(guān)的知識。在這次課設(shè)過程中,我們通過查閱資料,了解了一些不同的文件系統(tǒng)管理的方法,通過不斷的修改完善,最終實現(xiàn)了這個相對完整的系統(tǒng)。在文件系統(tǒng)的設(shè)計過程中,我們不僅鞏固了課堂上所學(xué)習(xí)到的知識,也提高了我們的編程能力和項目設(shè)計能力。盡管在設(shè)計過程中遇到了許多困難,但在林樹寬老師和張一飛老師的幫助下,組員間的通力協(xié)作下,基本得到了克服。因此,我們特別感謝兩位老師。通過這次課程設(shè)計,我們收獲了一次寶貴的經(jīng)驗,彌補了我們在知識和技

21、能方面的不足之處,這些都將在我們今后的工作和學(xué)習(xí)中起到基石的作用。操作系統(tǒng)課程設(shè)計也許是我們在大學(xué)本科階段做的最后一門課程設(shè)計,我們待它也是格外重視。許多個日日夜夜,經(jīng)過了多次的修改完善,程序的每一行代碼,都是我們經(jīng)過反復(fù)推敲后確定的。我們的設(shè)計也許存在著許多的不足之處,但絕對是我們的心血之作。源碼#include "stdio.h"#include <stdlib.h>#include <conio.h>#include <string>#include <windows.h>#include <iostream>

22、;using namespace std;string UserName8 = "user0", "user1", "user2", "user3", "user4", "user5","user6", "user7"string PassWord8 = "12345","12345","12345","12345","12345",&q

23、uot;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 physic100; /文件地址緩沖區(qū)int style=1; /文件的類型char cur_dir10="filsystem" /當(dāng)前目錄struct command

24、char com10;cmd17;struct block/一個塊占1KB int n; /存放空閑盤快的個數(shù) int free50; /存放空閑盤快的地址 int a; /盤快是否被占用標(biāo)志 char content1000;/快上每個字節(jié)存放的符號memory20449;struct block_super int n; /空閑的盤快的個數(shù) int free50; /存放進入棧中的空閑塊 /int stack50; /存放下一組空閑盤快的地址super_block;struct node /i結(jié)點信息 int file_style; /i結(jié)點 文件類型 int file_length; /

25、i結(jié)點 文件長度 int file_address100; /文件占用的物理塊號。 int limit;/打開讀寫權(quán)限,0表示能打開讀寫,1表示能打開讀,2表示能打開寫,3表示只能打開 int file_UserId; i_node640;/每個I節(jié)點占32字節(jié)struct dir /目錄項信息 char file_name10; /文件名 int i_num; /文件的結(jié)點號 char dir_name10; /目錄名或者說文件所在目錄root640;void format() /格式化 int i,j,k; super_block.n=50; for(i=0;i<50;i+) /超級

26、塊初始化 super_block.freei=i; /存放進入棧中的空閑塊 /super_block.stacki=50+i; /存放下一組的盤塊 for(i=0;i<640;i+) /i結(jié)點信息初始化 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;/用戶ID for(i=0;i<640;i+) /目錄項信息初始化 strcpy

27、(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+) /將空閑塊的信息用成組鏈接的方法寫進每組的最后一個塊中 /存儲

28、空間初始化 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+; else memoryi.freej=-1; memoryi.a=0; /標(biāo)記為沒有使用 continue; /處理完用于存儲下一組盤塊信息的特殊盤塊后,跳過本次循環(huán) for(j=0;j<50;j+) memoryi.freej=-1; memoryi.n=0; int l; for(l=0;l<8;l+) file_

29、arrayl=-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; /棧中的相應(yīng)盤塊的地址 p=sup

30、er_block.free49; /棧中的最后一個盤塊指向的地址 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.free

31、j=memorym.freej; super_block.n+; continue; /要跳過這次循環(huán),下面的語句在IF中已經(jīng)執(zhí)行過 physici=m; /如果棧中超過一個盤,棧中的相應(yīng)盤塊的地址寫進 文件地址緩沖區(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

32、) /注意 當(dāng)super_block.n=50時 m=-1;的值 /super_block.n=50的時候棧滿了,要將這個棧中的所有地址信息寫進下一個地址中 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; /將下一個文件地址中的盤塊號回收到棧底中,這個地址

33、中存放著剛才滿棧的地址的信息 super_block.freem=physici; /將下一個文件地址中的盤塊號回收到棧中 super_block.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_n

34、um=-1) rooti.i_num=i; strcpy(rooti.file_name,filename); strcpy(rooti.dir_name,cur_dir); /把當(dāng)前目錄名 給新建立的文件 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(leng

35、th); for(j=0;j<length;j+) i_nodei.file_addressj=physicj; int u; for(u=0;u<100;u+)/分配完清空緩沖區(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_noderooti.i_num.file_U

36、serId=login_userid) /printf("1get heren"); int add,c; for(add=0;add<i_noderooti.i_num.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&qu

37、ot;); i_nodek.file_UserId=-1; i_nodek.limit=-1; for(j=0;j<i_nodek.file_length;j+) physicj=i_nodek.file_addressj; / printf("get heren"); callback(i_nodek.file_length); /調(diào)用 回收函數(shù) int u;/回收完情空緩存區(qū) for(u=0;u<100;u+) physicu=-1; for(j=0;j<100;j+) /刪除文件后要將文件屬性和目錄項的各個值恢復(fù)初值 i_nodek.file_add

38、ressj=-1; /文件占用的塊號地址恢復(fù)初值 strcpy(rooti.file_name,""); /文件名恢復(fù)初值 rooti.i_num=-1; /目錄項的I結(jié)點信息恢復(fù)初值 strcpy(rooti.dir_name,""); /目錄項的文件目錄信息恢復(fù)初值 i_nodek.file_length=-1; /文件長度恢復(fù) i_nodek.file_style=-1; /文件類型恢復(fù)初值 break; if(i=640) printf("登錄用戶的該目錄下不存在這個文件n"); void display_sys() /顯示系

39、統(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); printf("使用的盤塊數(shù)是:t"); printf("%dn",m);void show_file(char filename) /顯示文件信息 int i,j,k; printf("tt文件名字 文件類型 文件長度 讀取權(quán)限 所屬目錄t所屬用戶n"); for

40、(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); /文件名 printf("t%dt",i_nodek.file_style); /文件的類型 printf("%dt",i_nodek.file_length); /文件的長度 printf("%dt",i_nodek.limit); pri

41、ntf("%st",rooti.dir_name); /文件所在的目錄 printf("user%dn",i_noderooti.i_num.file_UserId); printf("tt文件占用的物理地址n"); for(j=0;j<i_nodek.file_length;j+) /顯示物理地址 printf("%d ",i_nodek.file_addressj); /文件具體占用的盤塊號 printf("n"); break; if(i=640) printf("沒有這個

42、文件 或者這個文件不是正規(guī)文件n"); /shhchvoid write_file(FILE *fp) /將信息寫入系統(tǒng)文件中 int i; fp=fopen("system","wb"); for(i=0;i<20449;i+) fwrite(&memoryi,sizeof(struct block),1,fp); fwrite(&super_block,sizeof(struct block_super),1,fp); for(i=0;i<640;i+) fwrite(&i_nodei,sizeof(st

43、ruct 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"); for(i=0;i<20449;i+) fread(&memoryi,sizeof(struct block),1,fp); fread(&super_block,sizeof(struct block_super

44、),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("title 用戶登錄界面 "); printf("nn 用戶名:"); string tempusername; cin>>tempusername; /cout<<tempusername!;

45、 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"); for(int a =0; a<4; a+) Sleep(500); printf("."); return 0; else system("cls"

46、); 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); if(i=8) system("cls"); printf("沒有此用戶n輸入y:重新登錄n輸入n:退出系統(tǒng)n"); getchar(); char

47、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()/*退出*/ printf(" n Logouting"); for(int 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.fil

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論