九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

模擬文件系統(tǒng)實(shí)驗(yàn)報(bào)告

上傳人:jun****875 文檔編號(hào):17756876 上傳時(shí)間:2020-12-05 格式:DOC 頁(yè)數(shù):17 大?。?.03MB
收藏 版權(quán)申訴 舉報(bào) 下載
模擬文件系統(tǒng)實(shí)驗(yàn)報(bào)告_第1頁(yè)
第1頁(yè) / 共17頁(yè)
模擬文件系統(tǒng)實(shí)驗(yàn)報(bào)告_第2頁(yè)
第2頁(yè) / 共17頁(yè)
模擬文件系統(tǒng)實(shí)驗(yàn)報(bào)告_第3頁(yè)
第3頁(yè) / 共17頁(yè)

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《模擬文件系統(tǒng)實(shí)驗(yàn)報(bào)告》由會(huì)員分享,可在線閱讀,更多相關(guān)《模擬文件系統(tǒng)實(shí)驗(yàn)報(bào)告(17頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、操作系統(tǒng)大型試驗(yàn) 實(shí) 驗(yàn) 報(bào) 告 姓名:XX 班級(jí):軟件工程110x 學(xué)號(hào):201126630xxx 一、名稱 操作系統(tǒng)大型試驗(yàn)。 二、目的 用C++編寫出一個(gè)簡(jiǎn)單的模擬文件系統(tǒng),實(shí)現(xiàn)目錄的添加、刪除、重命名,文件的添加、刪除、重命名、文件和目錄、文件的拷貝。 三、要求 開發(fā)工具:word,vc win32api 1.設(shè)計(jì)和實(shí)現(xiàn)一個(gè)簡(jiǎn)單的文件系統(tǒng),要求包括目錄、普通文件和文件的存儲(chǔ) 2.文件系統(tǒng)的目錄結(jié)構(gòu)采用類似Linux的樹狀結(jié)構(gòu); 3.要求模擬的操作包括:

2、a)目錄的添加、刪除、重命名; b)目錄的顯示(列表) c)文件的添加、刪除、重命名 d)文件和目錄的拷貝 4.用戶進(jìn)入時(shí)顯示可用命令列表;用戶輸入help時(shí)顯示所有命令的幫助文檔; 輸入某個(gè)命令+?時(shí)顯示該條命令的使用說(shuō)明 5.用戶輸入exit時(shí)退出該系統(tǒng) 6.實(shí)驗(yàn)實(shí)現(xiàn)基于windows平臺(tái); 7.實(shí)驗(yàn)開發(fā)語(yǔ)言可以選用C/c++等 四、設(shè)計(jì) 1.主要思路說(shuō)明 本模擬系統(tǒng)通過(guò)一個(gè)大小固定的數(shù)組要代表物理盤塊,假設(shè)共有1024塊,新增目錄占一塊,新增文件占一塊,文件中可輸入內(nèi)容,內(nèi)容假設(shè)定義為5個(gè)字符占一塊,超出則應(yīng)新申請(qǐng)空間。模擬物理盤塊的數(shù)組中,數(shù)組內(nèi)容為-99代表改物理

3、盤塊內(nèi)容為空,可使用,其他數(shù)字均代表該物理盤塊被占用,其中-3代表是占用文件的末結(jié)點(diǎn),其他整數(shù)代表是文件內(nèi)容的下一個(gè)尋址下標(biāo),另有一個(gè)string類型的數(shù)組來(lái)存儲(chǔ)內(nèi)容,模擬文件寫入了對(duì)應(yīng)下標(biāo)的物理盤塊中。設(shè)置了一個(gè)全局指針指向根結(jié)點(diǎn),一個(gè)全局指針指向當(dāng)前操作目錄。搜索空白物理盤塊時(shí)采用順序搜索物理盤塊數(shù)組。存儲(chǔ)形式主要采用類似二叉樹結(jié)構(gòu),如目錄為根,目錄下的第一個(gè)文件或目錄存在根的子節(jié)點(diǎn),目錄下的其他文件或目錄存在第一個(gè)文件或目錄的兄弟節(jié)點(diǎn),以此類推。 本程序僅seperate()函數(shù)使用現(xiàn)成代碼,此函數(shù)功能為將輸入命令串分離,僅僅起到美觀作用,其余所有代碼均為原創(chuàng)! 2.申優(yōu)功能: 1

4、)能實(shí)現(xiàn)動(dòng)態(tài)增長(zhǎng),即當(dāng)輸入文件的內(nèi)容大小大于分配的模擬物理盤塊時(shí)系統(tǒng)能夠自動(dòng)尋找空物理盤塊并分配,將超出的內(nèi)容保存在新的物理盤塊中,若超出模擬磁盤大小,則超出部分不保存且返回提示。 2)能實(shí)現(xiàn)級(jí)聯(lián)刪除,即當(dāng)刪除目錄(文件夾)時(shí),目錄下的所有內(nèi)容也應(yīng)當(dāng)刪除并正確釋放物理盤塊空間。 3)能實(shí)現(xiàn)目錄的復(fù)制,即復(fù)制目錄時(shí)(文件夾)時(shí),該目錄下的所有文件和目錄也應(yīng)準(zhǔn)確復(fù)制至目標(biāo)目錄中,并正確分配物理盤塊空間。 3.主要函數(shù)和類的定義 1)主要函數(shù)定義 #define show_bnum 20 //顯示物理盤塊的塊數(shù) #define block_size 1024 /

5、/物理盤塊塊數(shù) int block[block_size]; //假設(shè)有block_size塊物理盤塊 string content[block_size]; //存放文件內(nèi)容 int Msize=5; //此處為模擬磁盤大小為輸入5個(gè)字符 fnode *root=new fnode("WP:",0,0); //設(shè)置根目錄 fnode *current_path=new fnode(); //當(dāng)前路徑 fnode *seek_flag=new fnode(); //作為查找標(biāo)志 fnode *cp_flag=new fnode();

6、//作為復(fù)制的位置標(biāo)志 void initialize(); //初始化 int seekTarget(string name); //搜索文件或目錄 int seek_log(string name); //搜索目錄 void delete_node(string name); //刪除節(jié)點(diǎn) int freeblock(fnode *); //釋放物理盤塊 int seekfreeblock(); //搜索可用物理盤塊 void show_current_path(); //顯示當(dāng)前路徑 void add_fi

7、le(string name,int t); //增加目錄、文件 void show_curpath_all(); //顯示當(dāng)前目錄下的所有文件 void rename_file(string Oname,string Nname); //重命名 void seperate(); //分離命令 void cd(); //進(jìn)入目錄 void add_File(); //增加文件功能入口 void add_Log(); //增加目錄功能入口 void delete_file(); //刪除文件或目錄

8、功能入口 void show_memory(); //顯示物理盤塊占用情況 void re_name(); //重命名功能入口 void help(); //查看幫助 void show_content(); //查看文件內(nèi)容 void write_file(); //寫文件 void Clear_(); //清屏 void Exit(); //退出 void cp(); //復(fù)制功能入口 void cp_log(fnode *target,fnode *source);

9、 //復(fù)制目錄 void cp_file(fnode *target,fnode *source); //復(fù)制文件 void cp_node(fnode *target,fnode *source); //復(fù)制節(jié)點(diǎn) int find_target_log(); //找到復(fù)制的目標(biāo)目錄 int calculate_logsizeMain(fnode *); //計(jì)算目錄大小 int calculate_logsize(fnode *); 2)文件節(jié)點(diǎn)類的定義: class fnode { public: strin

10、g filename; //文件名 int type; //文件類型,1為普通文件,0為目錄文件 fnode *parent; //父節(jié)點(diǎn) fnode *child; //子節(jié)點(diǎn) fnode *brother; //兄弟節(jié)點(diǎn) int block_num; //表示占用的物理盤塊塊號(hào) int isBro; //表示是否是在同級(jí)目錄下,0表示不是,1表示是 int isCld; //是否為目錄下第一個(gè)

11、節(jié)點(diǎn),1表示是,0表示不是 fnode() //初始化 { type=-1; parent=NULL; child=NULL; brother=NULL; block_num=-1; isBro=0; isCld=0; } fnode(string n,int t,int b) //根節(jié)點(diǎn)初始化 { typ

12、e=t; filename=n; parent=NULL; child=NULL; brother=NULL; block_num=b; block[block_num]=-3; isBro=0; isCld=0; } fnode(fnode *p,string name,int t,int b) //文件節(jié)點(diǎn)初始化 { parent=p

13、; filename=name; type=t; child=NULL; brother=NULL; block_num=b; block[block_num]=-3; isBro=0; isCld=0; } void copy(fnode *cp) //拷貝函數(shù) { filename=cp->filename;

14、 type=cp->type; parent=cp->parent; child=cp->child; brother=cp->brother; block_num=cp->block_num; } }; 4.命令: 命令 解釋 echo echo命令可以在當(dāng)前目錄下創(chuàng)建一個(gè)文件,具體格式:echo+name md md命令可以在當(dāng)前目錄下創(chuàng)建一個(gè)目錄文件,具體格式:md+name del del命令可以在當(dāng)前目錄下刪除一個(gè)已存在的文件或目錄(支持

15、級(jí)聯(lián)刪除),具體格式:del+name cd cd命令可以進(jìn)入下一級(jí)目錄或返回上級(jí)目錄、根目錄,具體格式:cd+name或cd+.或cd+.. cp cp命令可以復(fù)制當(dāng)前目錄下一個(gè)指定的文件或目錄至指定的目錄,具體格式:cp+name+road dir dir命令可以顯示當(dāng)前目錄下的所有文件和目錄,具體格式:del ren ren命令可以重命名一個(gè)存在于當(dāng)前目錄下的文件或目錄,具體格式:ren+name +new name typ typ命令可以查看當(dāng)前目錄下一個(gè)文件的內(nèi)容,具體格式:typ+name wrt wrt命令可以在當(dāng)前目錄下寫內(nèi)容至一個(gè)已存在的文件,具體格

16、式:wrt+name +content mem mem命令可以查看模擬物理盤塊的使用情況,具體格式:mem cls cls命令為清屏命令,具體格式:cls exit exit命令為退出命令,具體格式:exit 五、關(guān)鍵技術(shù)流程圖及說(shuō)明 提示:若圖中文字無(wú)法看清,可用Micorsoft Visio打開壓縮包下“部分程序流程圖”文件夾的繪圖文件查看。 1.增加文件或目錄(此功能比較簡(jiǎn)單,流程圖寫的較詳細(xì)就不做說(shuō)明): 2.刪除目錄(實(shí)現(xiàn)級(jí)聯(lián)刪除): 說(shuō)明:刪除目錄時(shí)刪除文件和刪除目錄本身放在同一個(gè)

17、函數(shù)中,刪除目錄下的所有文件放在freeblock函數(shù)里,這樣比較好處理。下面給只給出遞歸函數(shù)的流程圖。 3.將內(nèi)容寫入文件(實(shí)現(xiàn)動(dòng)態(tài)增長(zhǎng)): 說(shuō)明:圖中Msize為模擬規(guī)定的文件塊字符串大小,比如Msize=5,那么一個(gè)物理盤塊只能存5個(gè)字符,超出則要申請(qǐng)新的空間。主要采用雙重循環(huán)方法寫入,外層循環(huán)為需要的塊數(shù),內(nèi)層循環(huán)為Msize,用string累加字符串內(nèi)容,內(nèi)層循環(huán)退出后新申請(qǐng)一個(gè)空間并將對(duì)應(yīng)下標(biāo)賦給上一個(gè)物理盤塊數(shù)組,再將對(duì)應(yīng)內(nèi)容存入content(為string類型的數(shù)組,模擬存儲(chǔ)內(nèi)容)數(shù)組中,直至退出外層循環(huán)。 4.復(fù)制目錄: 說(shuō)明:這里和刪除目錄

18、一樣,寫了兩個(gè)復(fù)制函數(shù),這樣寫同樣因?yàn)檫f歸調(diào)用是比較方便,第一個(gè)函數(shù)傳入?yún)?shù)為目標(biāo)目錄指針和被復(fù)制的目錄的指針,第一個(gè)函數(shù)里新建了一個(gè)階段復(fù)制被復(fù)制的目錄的內(nèi)容,然后將新建節(jié)點(diǎn)的子節(jié)點(diǎn)和被復(fù)制目錄的子結(jié)點(diǎn)傳入下一個(gè)遞歸調(diào)用函數(shù)(因?yàn)槟夸浀膬?nèi)容存于目錄的子節(jié)點(diǎn),與兄弟節(jié)點(diǎn)無(wú)關(guān)),第二個(gè)函數(shù)就是遞歸調(diào)用函數(shù)cp_node,下面就只給出cp_node的流程圖(復(fù)制之前同樣進(jìn)行了路徑的判誤操作,內(nèi)存大小的判斷操作,是否重名的判斷操作,被復(fù)制目錄是否存在判斷操作,這些操作在遞歸函數(shù)之前完成,所以下面的遞歸函數(shù)不體現(xiàn)這些操作)。 六、運(yùn)行結(jié)果 1.主界面展示: 圖:主界面展示 2.

19、help命令展示: 圖:help命令展示 3.echo命令展示: 圖:echo命令展示 4.del命令展示: 圖:del命令展示-普通刪除 說(shuō)明:創(chuàng)建了目錄log1,在log1中創(chuàng)建一系列文件和目錄,磁盤使用情況顯示已分配,實(shí)用del刪除命令后查看磁盤分配證明級(jí)聯(lián)刪除是可靠的。 圖:del命令展示-級(jí)聯(lián)刪除 5.md命令展示: 圖:md命令展示 6.cd命令展示: 說(shuō)明:圖中展示了cd+name、cd+.、cd+..三種cd命令的使用和判別情況。 圖:cd命令展示 7.dir命令展示:

20、 圖:dir命令展示 8.typ命令展示: 圖:typ命令展示 9.ren命令展示: 圖:ren命令展示 10.wrt命令展示: 圖:wrt命令展示 說(shuō)明:此處為了實(shí)驗(yàn)方便,將磁盤大小限定為5,每塊磁盤輸入的字符數(shù)限2,輸入的內(nèi)容112233445566778899需要9塊磁盤塊,而磁盤塊為5,根目錄占用一塊,只能輸入4塊大小的內(nèi)容,即11223344,所有文件file只寫入了11223344 。 圖:wrt動(dòng)態(tài)增長(zhǎng)展示 11.mem命令展示: 圖:mem命令展示 12.cls命令展示: 圖:cls命令

21、展示-1 圖:cls命令展示-2 13.cp命令展示: 說(shuō)明:圖中根目錄(WP:)下創(chuàng)建了目錄a(md a)、目錄b(md b),在a目錄下創(chuàng)建了b目錄(md b),在b目錄中創(chuàng)建了文件a(echo a)、目錄c(md c),文件a中輸入1111122222(wrt a 111112222)內(nèi)容代表占了兩塊物理盤塊(程序中Msize模擬大小,設(shè)為5個(gè)字符了),再進(jìn)入目錄c(cd c),c中先創(chuàng)建目錄f(md f)再創(chuàng)建文件g(與之前創(chuàng)建順序不同說(shuō)明程序在不同情況下能正常運(yùn)行),在g中輸入5個(gè)3,5個(gè)2,5個(gè)1(wrt g 333332222211111)代表占用3塊物理盤塊空

22、間,再返回目錄a(cd . cd .),將目錄a下的目錄b復(fù)制給目錄WP下的目錄c(cp b WP:\c),再將目錄a中的目錄b刪除(del b證明的確是復(fù)制而非簡(jiǎn)單指針指向),進(jìn)入WP下的目錄c查看剛復(fù)制的內(nèi)容(dir)。物理盤塊使用情況中第一個(gè)-3為根目錄占用,第二個(gè)-3是目錄a,第三個(gè)-3是目錄c,接下來(lái)的8個(gè)-99是目錄a中原目錄b占用的空間(此處證明刪除是可靠的),圖中顯示目錄c中確實(shí)成功復(fù)制了目錄b及目錄下的所有內(nèi)容(使用dir命令查看)。 圖:cp命令展示 14.exit命令展示: 圖:exit命令展示 15.綜合展示: 說(shuō)明:echo a在根目錄(WP

23、:)下創(chuàng)建了文件a,md b在根目錄(WP:)下創(chuàng)建了目錄b,dir顯示根目錄下的所有文件和目錄,wrt a aaaaabbbbbccccc在文件a中輸入了一串內(nèi)容,typ a顯示文件a中的內(nèi)容,cd b進(jìn)入目錄b,md a在目錄b下創(chuàng)建了目錄a,cd a進(jìn)入目錄a,cd .返回目錄b,cd .返回根目錄WP:,ren b newname將目錄b重命名為newname,mem顯示內(nèi)存情況,第一個(gè)-3代表根節(jié)點(diǎn)占用,第二個(gè)3代表文件a占用且下一塊盤塊下標(biāo)為3,第三個(gè)-3代表目錄b占用,之后的4代表被文件a占用且的下一塊盤塊的尋找下標(biāo)為4,下一個(gè)-3代表文件a的末盤塊,下一個(gè)-3代表目錄b內(nèi)的目錄

24、a占用,del a在根目錄WP:下刪除文件a,mem查看物理盤塊實(shí)驗(yàn)情況,圖中顯示原文件a占用的內(nèi)存空間已經(jīng)變?yōu)?99,代表成功刪除a并釋放磁盤空間(-99代表磁盤空間空閑可用),dir顯示根目錄WP:下所有文件和目錄,顯示只有newname,則證明重命名和刪除操作是成功的。 圖:綜合展示 七、心得體會(huì)和調(diào)試中遇到的問(wèn)題及解決辦法 編寫調(diào)試過(guò)程中遇到許多問(wèn)題,一類是指針指向空還繼續(xù)操作造成程序停止運(yùn)行,經(jīng)檢查后修改正確,一類是邏輯上出現(xiàn)錯(cuò)誤導(dǎo)致級(jí)聯(lián)刪除或者目錄復(fù)制出錯(cuò),經(jīng)改正后成功實(shí)現(xiàn)。 主要的難點(diǎn)在于兄弟結(jié)點(diǎn)和子結(jié)點(diǎn)的處理,所以再程序中引入了isBro這個(gè)標(biāo)志位來(lái)判斷是否

25、是兄弟結(jié)點(diǎn)即與父節(jié)點(diǎn)是否在同級(jí)目錄,若不在同級(jí)目錄則父節(jié)點(diǎn)為真父節(jié)點(diǎn)(是指向本目錄而非本目錄中上個(gè)文件)。還有一個(gè)難點(diǎn)是在進(jìn)行遞歸調(diào)用刪除或復(fù)制目錄時(shí)發(fā)現(xiàn)處理目錄和目錄下的內(nèi)容不太合適放在同一個(gè)遞歸程序中,所以單獨(dú)寫了兩個(gè)函數(shù)處理目錄的復(fù)制或刪除,然后對(duì)應(yīng)兩個(gè)遞歸程序處理目錄下的所有內(nèi)容。 實(shí)驗(yàn)總結(jié)及有待改進(jìn)的問(wèn)題。 因?yàn)闀r(shí)間比較緊張,在幾門考試中抽空寫了這個(gè)小程序,所以并沒(méi)有實(shí)現(xiàn)存盤,另因?yàn)閷?duì)輸入命令字符串的處理上有點(diǎn)瑕疵,所有在寫文件內(nèi)容中只能寫入連續(xù)的字符串(中間不能插入空格),否則會(huì)被判定為命令輸入錯(cuò)誤,并且只實(shí)現(xiàn)了文件的寫入,不能修改或插入,有待改進(jìn)。沒(méi)有實(shí)現(xiàn)目錄樹的展示,只能顯示目錄下所有文件,有待改進(jìn)。但相信時(shí)間再充裕一些這些小問(wèn)題都能很好地解決。 八、源代碼 在壓縮包內(nèi)“源代碼”文件夾內(nèi)。

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!