操作系統(tǒng)課程設(shè)計(jì)-文件系統(tǒng)目錄管理_第1頁(yè)
操作系統(tǒng)課程設(shè)計(jì)-文件系統(tǒng)目錄管理_第2頁(yè)
操作系統(tǒng)課程設(shè)計(jì)-文件系統(tǒng)目錄管理_第3頁(yè)
操作系統(tǒng)課程設(shè)計(jì)-文件系統(tǒng)目錄管理_第4頁(yè)
操作系統(tǒng)課程設(shè)計(jì)-文件系統(tǒng)目錄管理_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余25頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、文 件 管 理 系 統(tǒng) 目錄文件管理的設(shè)計(jì)27目 錄第一章 課程設(shè)計(jì)目的和要求11 課程設(shè)計(jì)目的12 課程設(shè)計(jì)要求12.1 課程設(shè)計(jì)思想原理12。2 課程題目12.3 提交課程設(shè)計(jì)報(bào)告2第二章 課程設(shè)計(jì)內(nèi)容31 文件管理系統(tǒng)結(jié)構(gòu)32 文件系統(tǒng)采用索引文件結(jié)構(gòu)32.1 磁盤模擬32.2文件的邏輯結(jié)構(gòu)32。3目錄結(jié)構(gòu)32。4用戶接口5第三章 詳細(xì)設(shè)計(jì)71 程序功能模塊圖72 實(shí)體關(guān)系圖73 數(shù)據(jù)流圖84 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)85 程序流程圖115。1 建立文件目錄(mkdir)程序流程圖115.2 刪除文件目錄(rmdir)程序流程圖 12第四章 程序運(yùn)行與測(cè)試131 程序運(yùn)行主界面132 用mkdir

2、dirname 命令創(chuàng)建子目錄133用ls命令顯示當(dāng)前目錄下信息134 用rmdir dirname 命令刪除子目錄145 用cd dirname 命令改名當(dāng)前目錄14第五章 課程設(shè)計(jì)總結(jié)16附錄 參考文獻(xiàn)17附錄 程序清單18第一章 課程設(shè)計(jì)目的和要求1 課程設(shè)計(jì)目的操作系統(tǒng)課程主要講述的內(nèi)容是多道操作系統(tǒng)的原理與技術(shù),與其它計(jì)算機(jī)原理、編譯原理、匯編語言、計(jì)算機(jī)網(wǎng)絡(luò)、程序設(shè)計(jì)等專業(yè)課程關(guān)系十分密切。本課程設(shè)計(jì)的目的綜合應(yīng)用學(xué)生所學(xué)知識(shí),建立系統(tǒng)和完整的計(jì)算機(jī)系統(tǒng)概念,理解和鞏固操作系統(tǒng)基本理論、原理和方法,掌握操作系統(tǒng)開發(fā)的基本技能。通過模擬文件系統(tǒng)的實(shí)現(xiàn),深入理解操作系統(tǒng)中文件系統(tǒng)的理論

3、知識(shí), 加深對(duì)教材中的重要算法的理解.同時(shí)通過編程實(shí)現(xiàn)這些算法,更好地掌握操作系統(tǒng)的原理及實(shí)現(xiàn)方法,提高綜合運(yùn)用各專業(yè)課知識(shí)的能力。2 課程設(shè)計(jì)要求2.1 課程設(shè)計(jì)思想原理閱讀操作系統(tǒng)方面的書籍,了解操作系統(tǒng)的文件系統(tǒng)原理.結(jié)合分析課程設(shè)計(jì)要求,確定實(shí)體以及它們之間的關(guān)系。實(shí)體關(guān)系有三張表(磁盤空間分配表、文件表、打開文件表)、一個(gè)模擬磁盤的空間、命令服務(wù)和用戶構(gòu)成。用戶負(fù)責(zé)輸入命令.命令服務(wù)實(shí)現(xiàn)命令的解釋、命令檢查以及調(diào)用相關(guān)模塊執(zhí)行相應(yīng)的命令功能。磁盤空間分配表,采用鏈表結(jié)構(gòu),每個(gè)節(jié)點(diǎn)保存模擬磁盤的一個(gè)邏輯塊的信息,包括塊的最大長(zhǎng)度,文件占用長(zhǎng)度,占用標(biāo)志。如果占用標(biāo)志為0,即該空間可分配

4、給文件.初始化磁盤空間分配表鏈表,首先把整個(gè)模擬磁盤作來一塊,并置占用位為0.當(dāng)有進(jìn)程申請(qǐng)磁盤空間時(shí),從頭開始遍歷,檢查占用位,如果該塊為可分配,則檢查塊大小,若塊長(zhǎng)度大于或等于申請(qǐng)空間大小,則把塊的前一部分(等于申請(qǐng)大小)分配給文件,并置標(biāo)志位為占用。剩下的大小作來一個(gè)新塊,作來一個(gè)新節(jié)點(diǎn)插入到原節(jié)點(diǎn)的后邊,標(biāo)志位為可用。這樣就實(shí)現(xiàn)了模擬磁盤的線性分配。構(gòu)造這些實(shí)體的關(guān)系圖,數(shù)據(jù)流圖、程序流程圖來進(jìn)行具體的設(shè)計(jì)。2.2 課程題目要求設(shè)計(jì)一個(gè)文件系統(tǒng)目錄模擬程序,通過該程序能夠?qū)崿F(xiàn)簡(jiǎn)單的目錄管理操作: 創(chuàng)建多級(jí)目錄 設(shè)計(jì)樹型目錄結(jié)構(gòu),能夠從根目錄開始創(chuàng)建樹狀的多級(jí)子目錄. 刪除子目錄 實(shí)現(xiàn)刪除

5、當(dāng)前目錄下的子目錄操作。 顯示當(dāng)前目錄下信息 能夠?qū)崿F(xiàn)顯示當(dāng)前目錄下子目錄及文件信息的操作。 更改當(dāng)前目錄 通過操作可以改變當(dāng)前目錄,返回上級(jí)目錄或進(jìn)入下級(jí)子目錄。 在目錄下創(chuàng)建文件 能夠在目錄下實(shí)現(xiàn)創(chuàng)建文件的操作。2.3 提交課程設(shè)計(jì)報(bào)告在規(guī)定的時(shí)間完成課程設(shè)計(jì)各階段的任務(wù),最后提交詳細(xì)的課程設(shè)計(jì)報(bào)告。第二章 課程設(shè)計(jì)內(nèi)容1文件管理系統(tǒng)結(jié)構(gòu)文件的邏輯結(jié)構(gòu)文件的物理結(jié)構(gòu)目錄結(jié)構(gòu)磁盤分配回收文件的保護(hù)用戶接口2文件系統(tǒng)采用索引文件結(jié)構(gòu)2。1 磁盤模擬 磁盤是斷電后內(nèi)容不丟失的,因此用文件模擬磁盤。要求模擬系統(tǒng)存在兩塊硬盤:用一個(gè)文件FAT1模擬磁盤c磁盤的每個(gè)盤塊512字節(jié),模擬磁盤共有128塊

6、。磁盤中第0塊存放專用塊內(nèi)容,第1、2塊存放根目錄,其余存放子目錄和文件. 2。2文件的邏輯結(jié)構(gòu)文件的邏輯結(jié)構(gòu)采用流式結(jié)構(gòu);文件的內(nèi)容均采用文本文件,系統(tǒng)中有兩種文件:一種是存放任意字符的文件一種是可執(zhí)行文件:可執(zhí)行文件的內(nèi)容就是系統(tǒng)內(nèi)進(jìn)程的程序體.2。3目錄結(jié)構(gòu)目錄結(jié)構(gòu)采用樹型目錄結(jié)構(gòu)。2.3.1目錄項(xiàng)內(nèi)容(16個(gè)字節(jié)):目錄名、文件名:6個(gè)字節(jié);擴(kuò)展名:3個(gè)字節(jié)(可執(zhí)行文件擴(kuò)展名為exe,目錄沒有擴(kuò)展名);目錄、文件屬性:1字節(jié);文件長(zhǎng)度:2字節(jié)(目錄沒有長(zhǎng)度,字節(jié)數(shù))。地址:直接地址項(xiàng)1個(gè),一級(jí)索引項(xiàng)1個(gè);預(yù)留1字節(jié)2。3.2根目錄根目錄位置固定,占用磁盤2塊,大小固定,共16項(xiàng),占用模

7、擬磁盤第1、2塊;2。3.3子目錄位置不固定,大小不固定(至少建立一級(jí)子目錄,最好支持多級(jí)子目錄)。2.3。4磁盤分配磁盤的分配采用混合索引結(jié)構(gòu)的分配方式.系統(tǒng)采用成組鏈接法記錄磁盤空間的使用情況。空閑塊每組登記10個(gè)空閑塊,專用塊占用第0塊。索引塊中每個(gè)盤塊號(hào)占用4字節(jié),登記32塊圖2-1 文件系統(tǒng)目錄映射方式圖22 文件塊的分配2.4用戶接口用戶接口提供用戶接口操作命令,要求實(shí)現(xiàn)以下命令:(1) 創(chuàng)建目錄:mkdir dirname 在當(dāng)前目錄下建立子目錄,若有同名文件夾存在或目錄已滿,則程序進(jìn)行提示,并拒絕創(chuàng)建。(2) 刪除目錄:rmdir dirname 在刪除目錄前,系統(tǒng)要求用戶進(jìn)行

8、確認(rèn)刪除(3) 顯示當(dāng)前目錄下信息:ls 輸入ls命令后,系統(tǒng)會(huì)顯示當(dāng)前目錄下所有子目錄和文件的信息,包括文件名,文件類型等信息(4) 改變當(dāng)前目錄:cd dirname 通過該命令可改變當(dāng)前目錄,進(jìn)入上級(jí)目錄或下級(jí)子目錄(5) 創(chuàng)建文件:create filename在目錄下創(chuàng)建一個(gè)文本文件文件2。5 屏幕顯示屏幕顯示要求包括:(1)用戶命令接口,用于系統(tǒng)運(yùn)行時(shí)用戶輸入命令;(2)磁盤目錄顯示,要求顯示磁盤的樹型目錄結(jié)構(gòu);(3)磁盤使用情況,顯示磁盤每一個(gè)磁盤塊的空間是否空閑。第三章 詳細(xì)設(shè)計(jì)1 程序功能模塊圖文件系統(tǒng)提供的目錄操作有建立目錄(mkdir)、刪除目錄(rmdir)、顯示目錄下

9、內(nèi)容(ls)、改變當(dāng)前目錄(cd)、創(chuàng)建文件(create)??梢酝ㄟ^鍵盤輸入命令來模擬文件的操作。通過exit命令退出程序.圖3-1 模擬文件系統(tǒng)模塊圖2 實(shí)體關(guān)系圖 命令服務(wù)使得用戶能夠輸入命令,在需要時(shí)提供命令的幫助。同時(shí)能夠分析命令,調(diào)用相應(yīng)的命令模塊對(duì)模擬磁盤、磁盤空間分配表、文件表、打開文件表進(jìn)行操作。磁盤空間分配表記錄模擬磁盤的使用情況。文件表記錄文件的信息和在磁盤里的位置等信息。打開文件表記錄已打開的文件,對(duì)應(yīng)文件表中的文件信息,和文件表里的文件節(jié)點(diǎn)類似,記錄了文件在模擬磁盤中的信息。3 數(shù)據(jù)流圖4 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)通過分析課程設(shè)計(jì)要求,具體設(shè)計(jì)出如下數(shù)據(jù)結(jié)構(gòu):(1) 定義常量co

10、nst char* FilePath = "C:myfiles”; const int BlockSize = 512; /盤塊大小 const int BlockCount = 128; /盤塊數(shù) const int DiskSize = BlockSizeBlockCount; /磁盤大小 const int BlockFcbCount= BlockSize/sizeof(FCB);/目錄文件的最多FCB數(shù) 通過定義常量確定模擬文件系統(tǒng)磁盤的路徑,以及文件塊的大小,盤塊數(shù),以及分配的磁盤大小和目錄文件的最多文件控制塊(FCB)數(shù)目。(2) 文件控制塊結(jié)構(gòu)體定義struct FCB

11、 /文件控制塊 char fname16; /文件名 char type; /文件類型 int size; /文件大小 int fatherBlockNum; /父目錄塊號(hào) int currentBlockNum; /當(dāng)前的盤塊 void chushihua() strcpy(fname,”0"); type = NULL; size =0; fatherBlockNum = currentBlockNum = 0; ; 通過結(jié)構(gòu)體類型定義了文件控制塊 ,文件控制塊包括文件名,文件類型,文件大小,父目錄塊號(hào),以及當(dāng)前盤塊,并且對(duì)文件控制塊進(jìn)行了初始化操作.文件控制塊用來對(duì)文件進(jìn)行管理

12、。(3) 目錄文件結(jié)構(gòu) struct dirFile struct FCB fcbBlockFcbCount; void init(int _FatherBlockNum,int _CurrentBlockNum,char name)/父塊號(hào),當(dāng)前塊號(hào),目錄名 strcpy(fcb0。fname,name); /本身的FCB fcb0.fatherBlockNum=_FatherBlockNum; fcb0.currentBlockNum=_CurrentBlockNum; fcb0.type=DIRECTORY; /標(biāo)記目錄文件 for(int i=1;iBlockFcbCount;i+)

13、fcbi.fatherBlockNum=_CurrentBlockNum; /標(biāo)記為子項(xiàng) fcbi.type=NULL; / 標(biāo)記為空白項(xiàng) ; 該結(jié)構(gòu)體定義了目錄文件結(jié)構(gòu),目錄文件采用FCB結(jié)構(gòu)體數(shù)組方式進(jìn)行組織管理,用來存儲(chǔ)新創(chuàng)建的目錄,把目錄的相關(guān)信息保存在文件控制塊結(jié)構(gòu)體中。(4)磁盤結(jié)構(gòu)體定義 struct DISK int FAT1BlockCount; /FAT1 int FAT2BlockCount; /FAT2 struct dirFile root; /根目錄 char dataBlockCount3BlockSize; void format() memset(FAT1,0

14、,BlockCount); /FAT1 memset(FAT2,0,BlockCount); /FAT2 FAT10=FAT11=FAT12=2; /0,1,2盤塊號(hào)依次代表FAT1,FAT2,根目錄區(qū) FAT20=FAT21=FAT22=2; /FAT作備份 root。init(2,2,”C:”);/根目錄區(qū) memset(data,0,sizeof(data);/數(shù)據(jù)區(qū) ; 用文件模擬磁盤。要求模擬系統(tǒng)存在兩塊硬盤:用一個(gè)文件FAT1模擬磁盤c磁盤的每個(gè)盤塊512字節(jié),模擬磁盤共有128塊。磁盤中第0塊存放專用塊內(nèi)容,第1、2塊存放根目錄,其余存放子目錄和文件。 5 程序流程圖5.1 建立

15、文件目錄(mkdir)程序流程圖 圖34 mkdir程序流程圖5.2 刪除文件目錄(rmdir)程序流程圖開始查詢打開文件表在打開文件表里?不在查詢文件表     在文件表里?在刪除該文件節(jié)點(diǎn)定位該文件在磁盤分配表中的節(jié)點(diǎn),置標(biāo)志為空閑刪除打開文件表中該文件條目顯示刪除成功    返回顯示無此文件 返回顯示無法刪除 返回在圖35 rmdir程序流程圖 第四章 程序運(yùn)行與測(cè)試1 程序運(yùn)行主界面圖41 程序主界面2 用mkdir dirname 命令創(chuàng)建子目錄圖42 mkdir命令運(yùn)行結(jié)果

16、3用ls命令顯示當(dāng)前目錄下信息圖43 ls命令運(yùn)行結(jié)果4 用rmdir dirname 命令刪除子目錄 通過執(zhí)行該命令可以看到,若刪除的子目錄不存在,系統(tǒng)將給出提示.圖44 rmdir命令運(yùn)行結(jié)果5 用cd dirname 命令改名當(dāng)前目錄通過該圖可看到當(dāng)前目錄已從 C: 變?yōu)?C:project ,命令執(zhí)行成功圖45 cd命令運(yùn)行結(jié)果 圖46 在子目錄下創(chuàng)建文件第五章 課程設(shè)計(jì)總結(jié)通過本次的課程設(shè)計(jì),使我能夠正確運(yùn)用操作系統(tǒng)課程中所學(xué)的基本理論和知識(shí),加深了對(duì)文件系統(tǒng)基本概念的理解,以及磁盤文件系統(tǒng)的文件操作。還有讓我感受挺深的是對(duì)軟件工程方法的應(yīng)用.設(shè)計(jì)一個(gè)軟件,先要做好需求分析,這一點(diǎn)很

17、重要,如果沒有分析好需求,到軟件設(shè)計(jì)的最后,發(fā)現(xiàn)所做的功能不符合要求,那么一切都得重做,前面所有的努力都付諸東流。還有比較重要的是,寫好ER圖,至少畫出語境級(jí)的數(shù)據(jù)流圖,以及仔細(xì)畫好程流程圖.在程序設(shè)計(jì)的開始,由于分析工作做得不夠深入和細(xì)致,吃了點(diǎn)小苦頭。對(duì)于這樣一個(gè)小設(shè)計(jì)來說,都會(huì)吃苦頭,要是大工程更是無法想像,有可能會(huì)項(xiàng)目失敗。以后得加強(qiáng)對(duì)軟件工程的學(xué)習(xí)。另外在運(yùn)用C語言的時(shí)候,感覺有點(diǎn)生疏,在組織語言時(shí)時(shí)而出錯(cuò),在編程和調(diào)試的過程中,經(jīng)常會(huì)出現(xiàn)意想不到的問題,并非每個(gè)問題都可以從相關(guān)資料中找到解決方法,有些問題是無法預(yù)料到的,這就需要通過自己理性的分析得出問題的解決方案。在設(shè)計(jì)過程中,查

18、詢了不少相關(guān)資料,不斷的發(fā)現(xiàn)問題、提出問題、解決問題。在對(duì)自己所編寫的源程序段的糾錯(cuò)的過程中,使我更好的理解了操作系統(tǒng)中文件系統(tǒng)的理論知識(shí),同時(shí)在編程時(shí)用到了模塊化的設(shè)計(jì)思想,這種編程方法可以使我們的編程變的更簡(jiǎn)單,可以使我們的查錯(cuò)與糾錯(cuò)變的更方便.總的來說通過這次的設(shè)計(jì)的學(xué)習(xí)使我學(xué)到了很多在平時(shí)的學(xué)習(xí)中學(xué)不到的很多東西,通過這次課程設(shè)計(jì),使我對(duì)操作系統(tǒng)和編程產(chǎn)生興趣,我想我會(huì)在這條路上繼續(xù)前進(jìn)下去。我相信,只要不斷的嚴(yán)格要求自己,注意培養(yǎng)自己的思維能力,就一定會(huì)有更大更輝煌的發(fā)展和提高。附錄 參考文獻(xiàn)1 張堯?qū)W等編著。 計(jì)算機(jī)操作系統(tǒng)教程.北京:清華大學(xué)出版社,2006.022 湯子瀛等編著

19、.計(jì)算機(jī)操作系統(tǒng).西安:西安電子科技出版社,1996.123 陳向群 編著.操作系統(tǒng)教程.北京:北京大學(xué)出版社,2007.014 羅宇 等編著。操作系統(tǒng)課程設(shè)計(jì)。北京:機(jī)械工業(yè)出版社,2005.9附錄 程序清單include stdio。h> #include <memory。h #include <string #include <iostream> using namespace std; define GENERAL 1 /普通文件#define DIRECTORY 2 /目錄文件define NULL 0 /空文件 struct FCB /文件控制塊 ch

20、ar fname16; /文件名 char type; /文件類型 int size; /文件大小 int fatherBlockNum; /父目錄塊號(hào) int currentBlockNum; /當(dāng)前的盤塊 void chushihua() strcpy(fname,”0"); type = NULL; size =0; fatherBlockNum = currentBlockNum = 0; ; /定義常量const char FilePath = "C:myfiles"; const int BlockSize = 512; /盤塊大小 const int

21、 OPEN_MAX = 5; /能打開最多的文件數(shù) const int BlockCount = 128; /盤塊數(shù) const int DiskSize = BlockSizeBlockCount; /磁盤大小 const int BlockFcbCount = BlockSize/sizeof(FCB);/目錄文件的最多FCB數(shù) int OpenFileCount = 0; struct OPENLIST /用戶文件打開表 int files; /當(dāng)前打開文件數(shù) FCB fOPEN_MAX; /FCB復(fù)制 OPENLIST() files=0; for(int i=0;i<OPEN_

22、MAX;i+) fi。fatherBlockNum=1;/為分配打開 fi.type=GENERAL; ; /目錄文件結(jié)構(gòu) struct dirFile struct FCB fcbBlockFcbCount; void init(int _FatherBlockNum,int _CurrentBlockNum,char name)/父塊號(hào),當(dāng)前塊號(hào),目錄名 strcpy(fcb0.fname,name); /本身的FCB fcb0。fatherBlockNum=_FatherBlockNum; fcb0。currentBlockNum=_CurrentBlockNum; fcb0。type=

23、DIRECTORY; /標(biāo)記目錄文件 for(int i=1;i<BlockFcbCount;i+) fcbi.fatherBlockNum=_CurrentBlockNum; /標(biāo)記為子項(xiàng) fcbi.type=NULL; / 標(biāo)記為空白項(xiàng) ; struct DISK int FAT1BlockCount; /FAT1 int FAT2BlockCount; /FAT2 struct dirFile root; /根目錄 char dataBlockCount3BlockSize; void format() memset(FAT1,0,BlockCount); /FAT1 memset

24、(FAT2,0,BlockCount); /FAT2 FAT10=FAT11=FAT12=2; /0,1,2盤塊號(hào)依次代表FAT1,F(xiàn)AT2,根目錄區(qū) FAT20=FAT21=FAT22=2; /FAT作備份 root。init(2,2,”C:");/根目錄區(qū) memset(data,0,sizeof(data);/數(shù)據(jù)區(qū) ; /全局變量 FILE fp; /磁盤文件地址 char * BaseAddr; /虛擬磁盤空間基地址 string currentPath="C:”; /當(dāng)前路徑 int current=2; /當(dāng)前目錄的盤塊號(hào) string cmd; /輸入指令

25、struct DISK *osPoint; /磁盤操作系統(tǒng)指針 char command16; /文件名標(biāo)識(shí) struct OPENLIST* openlist; /用戶文件列表指針 /函數(shù)聲明 int format(); int mkdir(char *sonfname); int rmdir(char sonfname); int create(char name); int listshow(); int changePath(char *sonfname); int exit(); /系統(tǒng)初始化 int format() current = 2; currentPath="C

26、:”; /當(dāng)前路徑 osPoint->format();/打開文件列表初始化 delete openlist; openlist=new OPENLIST; /*-保存到磁盤上myfiles-*/ fp = fopen(FilePath,”w+"); fwrite(BaseAddr,sizeof(char),DiskSize,fp); fclose(fp); printf(”-nn"); return 1; /創(chuàng)建子目錄int mkdir(char *sonfname) /判斷是否有重名 /尋找空白子目錄項(xiàng) /尋找空白盤塊號(hào) /當(dāng)前目錄下增加該子目錄項(xiàng) /分配子目錄盤

27、塊,并且初始化 /修改fat表 int i,temp,iFAT; struct dirFile dir; /當(dāng)前目錄的指針 if(current=2) dir=(osPoint->root); else dir=(struct dirFile *)(osPoint>data current3); /為了避免該目錄下同名文件夾 for(i = 1;iBlockFcbCount;i+) if(dirfcbi.type=DIRECTORY && strcmp(dirfcbi.fname,sonfname)=0 ) printf("該文件夾下已經(jīng)有同名的文件夾存在

28、了!n"); return 0; /查找空白fcb序號(hào) for(i=1;iBlockFcbCount;i+) if(dir->fcbi。type=NULL) break; if(i=BlockFcbCount) printf(”該目錄已滿!請(qǐng)選擇新的目錄下創(chuàng)建!n"); return 0; temp=i; for(i = 3;i BlockCount;i+) if(osPointFAT1i = 0) break; if(i = BlockCount) printf(”磁盤已滿!n"); return 0; iFAT=i; /接下來進(jìn)行分配 osPoint&g

29、t;FAT1iFAT=osPointFAT2iFAT = 2; /2表示分配給下級(jí)目錄文件 /填寫該分派新的盤塊的參數(shù) strcpy(dir>fcbtemp。fname,sonfname); dirfcbtemp。type=DIRECTORY; dirfcbtemp.fatherBlockNum=current; dirfcbtemp。currentBlockNum=iFAT; /初始化子目錄文件盤塊 dir=(struct dirFile*)(osPoint->data iFAT-3); /定位到子目錄盤塊號(hào) dir-init (current,iFAT,sonfname);/i

30、FAT是要分配的塊號(hào),這里的current用來指要分配的塊的父塊號(hào) printf("-nn”); return 1; /刪除當(dāng)前目錄下的文件夾int rmdir(char *sonfname) int i,temp,j;/確保當(dāng)前目錄下有該文件,并記錄下該FCB下標(biāo) struct dirFile dir; /當(dāng)前目錄的指針 if(current=2) dir=(osPoint->root); else dir=(struct dirFile *)(osPoint->data current-3); for(i=1;iBlockFcbCount;i+) /查找該目錄文件 i

31、f(dir-fcbi。type=DIRECTORY strcmp(dir-fcbi。fname,sonfname)=0) break; temp=i; if(i=BlockFcbCount) printf("當(dāng)前目錄下不存在該子目錄!n”); return 0; j = dir-fcbtemp。currentBlockNum; struct dirFile *sonDir; /當(dāng)前子目錄的指針 sonDir=(struct dirFile )(osPoint>data j - 3); for(i=1;i<BlockFcbCount;i+) /查找子目錄是否為空目錄 if(

32、sonDir-fcbi.type!=NULL) printf(”該文件夾為非空文件夾,為確保安全,請(qǐng)清空后再刪除!n”); return 0; /刪除子目錄 osPoint-FAT1j = osPointFAT2j=0; /fat清空 char p=osPoint->dataj-3; /格式化子目錄 memset(p,0,BlockSize); dirfcbtemp.chushihua(); /回收子目錄占據(jù)目錄項(xiàng) printf("-nn"); return 1; /查詢子目錄 int listshow() int i,DirCount=0,F(xiàn)ileCount=0;

33、/搜索當(dāng)前目錄 struct dirFile dir; /當(dāng)前目錄的指針 if(current=2) dir=(osPoint>root); else dir=(struct dirFile *)(osPoint>data current3); for(i=1;i<BlockFcbCount;i+) if(dir>fcbi.type=GENERAL) /查找普通文件 FileCount+; printf("s 文本文件.n”,dirfcbi。fname); if(dir->fcbi.type=DIRECTORY) /查找目錄文件 DirCount+; p

34、rintf("%s 文件夾。n",dirfcbi.fname); printf("n該目錄下共有 %d 個(gè)文本文件, %d 個(gè)文件夾nn”,F(xiàn)ileCount,DirCount); printf(”-nn”); return 1; /進(jìn)入當(dāng)前目錄下的子目錄int changePath(char *sonfname) struct dirFile dir; /當(dāng)前目錄的指針 if(current=2) dir=(osPoint>root); else dir=(struct dirFile *)(osPoint-data current3); /*回到父目錄*

35、/ if(strcmp(sonfname,"。.")=0) if(current=2) printf("你現(xiàn)已經(jīng)在根目錄下!n”); return 0; current = dir>fcb0。fatherBlockNum ; currentPath = currentPath。substr(0,currentPath.size() strlen(dir>fcb0.fname )-1); return 1; /進(jìn)入子目錄*/ int i,temp; /確保當(dāng)前目錄下有該目錄,并且記錄下它的FCB下標(biāo) for(i = 1; i BlockFcbCount; i+) /查找該文件 if(dir>fcbi。type=DIRECTORY & strcmp(dir>fcbi。fname,sonfname)=0 ) temp=i; break; if(i=BlockFcbCount) printf("不存在該目錄!n”); return 0; /修改當(dāng)前文件信息 current=dirfcb temp.currentBlockNum ; currentPath = currentPat

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論