版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、操作系統(tǒng)課程設(shè)計實驗報告全套設(shè)計加扣 3012250582任務(wù):虛擬磁盤,文件系統(tǒng)的初始化,文件目錄樹的建立,求助和顯示目錄內(nèi)容的函數(shù),子目錄的創(chuàng)建,刪除,更改函數(shù)組員: 學(xué)號:專業(yè):計科121 任務(wù):用戶的注冊和登錄,文件的創(chuàng)建,打開,關(guān)閉讀取,寫入,刪除和退出函數(shù)是否申請優(yōu)秀: 否 Linux文件系統(tǒng)的仿真實現(xiàn)課程設(shè)計摘要:實驗?zāi)康模豪斫獠崿F(xiàn)文件的物理結(jié)構(gòu),理解具體的文件存儲空間的管理,理解并構(gòu)建文件目錄樹結(jié)構(gòu)實現(xiàn)文件操作的實現(xiàn),加深對文件系統(tǒng)內(nèi)部數(shù)據(jù)結(jié)構(gòu)、功能以及實現(xiàn)過程的理解。實驗方法:模擬物理結(jié)構(gòu)磁盤和建立目錄結(jié)構(gòu)樹實現(xiàn)對文件和目錄的具體操作。實驗結(jié)果:實現(xiàn)了物理磁盤的模擬,用戶登
2、錄系統(tǒng)的建立,文件目錄樹的建立及對文件和目錄的基本操作。結(jié)論:對Linux文件系統(tǒng)的結(jié)構(gòu)有了更深的了解,對一些結(jié)構(gòu)體的建立與運用變得更加嫻熟。關(guān)鍵字: 磁盤 用戶文件打開表 目錄樹 FAT文件系統(tǒng)1. 理論基礎(chǔ) 操作系統(tǒng)教程(第五版)的第六章文件管理,Linux文件系統(tǒng)中的文件是數(shù)據(jù)的集合,文件系統(tǒng)不僅包含著文件中的數(shù)據(jù)而且還有文件系統(tǒng)的結(jié)構(gòu),所有Linux用戶和程序看到的文件、目錄、軟連接及文件保護信息等都存儲在其中。Linux文件系統(tǒng)結(jié)構(gòu),在軟件上分為三層應(yīng)用層、虛擬層和實現(xiàn)層。應(yīng)用層提供用戶接口,可以使用標準文件類系統(tǒng)調(diào)用來使用文件;虛擬層屏蔽具體文件系統(tǒng)差異和細節(jié),為上層應(yīng)用程序和下層
3、內(nèi)核管理模塊提供統(tǒng)一接口;實現(xiàn)層通過切換技術(shù)接到具體文件系統(tǒng),實現(xiàn)各種具體的文件系統(tǒng)的具體操作。2. 目的及意義2.1目的(1)理解并實現(xiàn)文件的物理結(jié)構(gòu),(2)理解具體的文件存儲空間的管理,(3)理解并構(gòu)建文件目錄樹結(jié)構(gòu)實現(xiàn)文件操作的實現(xiàn),(4)加深對文件系統(tǒng)內(nèi)部數(shù)據(jù)結(jié)構(gòu)、功能以及實現(xiàn)過程的理解。2.2意義通過對Linux文件系統(tǒng)的模擬實現(xiàn),我們加深對操作系統(tǒng)的認知,使我們從表面更加深入到操作系統(tǒng)內(nèi)在的知識,同時對我們以后的工作和求學(xué)道路上打下了一個堅實的基礎(chǔ)。也增漲了動手實踐和撰寫報告的能力。3. 設(shè)計思想及設(shè)計功能說明3.1設(shè)計思想 首先建立一個整體的文件系統(tǒng)架構(gòu),文件系統(tǒng)架構(gòu)是將之后自己
4、所要完成的文件的具體內(nèi)容列的一個清單,這樣可以讓自己在做課程設(shè)計時能有章法可依,不至于太亂,沒有條理。通過對文件系統(tǒng)的了解,對實現(xiàn)的虛擬Linux文件系統(tǒng)分成兩部分實現(xiàn)。 其次物理結(jié)構(gòu)磁盤的虛擬,以一個真實的文件來模擬一塊磁盤。因為要在內(nèi)存中開辟一個虛擬磁盤空間作為文件存儲分區(qū),在其上實現(xiàn)一個簡單的基于多級目錄的單用戶單任務(wù)系統(tǒng)中的文件系統(tǒng)。在退出該文件系統(tǒng)的使用時,應(yīng)將該虛擬文件系統(tǒng)以一個Windows 文件的方式保存到磁盤上,以便下次可以再將它恢復(fù)到內(nèi)存的虛擬磁盤空間中。 最后對目錄樹的構(gòu)建,建立與磁盤的聯(lián)系,完成對文件的基本操作。3.2設(shè)計功能說明 (1)在內(nèi)存中開辟一個虛擬磁盤空間作為
5、文件存儲分區(qū),在其上實現(xiàn)一個簡單的基于多級目錄的單用戶單任務(wù)系統(tǒng)中的文件系統(tǒng)。在退出該文件系統(tǒng)的使用時,應(yīng)將該虛擬文件系統(tǒng)以一個Windows 文件的方式保存到磁盤上,以便下次可以再將它恢復(fù)到內(nèi)存的虛擬磁盤空間中。 (2)文件存儲空間的分配可采用顯式鏈接分配或其他的辦法。 (3)空閑磁盤空間的管理可選擇位示圖或其他的辦法。如果采用位示圖來管理文件存儲空間,并采用顯式鏈接分配方式,那么可以將位示圖合并到FAT中。 (4)文件目錄結(jié)構(gòu)采用多級目錄結(jié)構(gòu)。為了簡單起見,可以不使用索引結(jié)點,其中的每個目錄項應(yīng)包含文件名、物理地址、長度等信息,還可以通過目錄項實現(xiàn)對文件的讀和寫的保護。要求提供以下有關(guān)的操
6、作命令:format:對文件存儲器進行格式化,即按照文件系統(tǒng)的結(jié)構(gòu)對虛擬磁盤空間進行布局,并在其上創(chuàng)建根目錄以及用于管理文件存儲空間等的數(shù)據(jù)結(jié)構(gòu)。help:用于查找操作密碼。Login:用于用戶登錄。 mkdir:用于創(chuàng)建子目錄。 rmdir:用于刪除子目錄。 ls:用于顯示目錄中的內(nèi)容。 cd:用于更改當前目錄。 create:用于創(chuàng)建文件。 open:用于打開文件。 close:用于關(guān)閉文件。 write:用于寫文件。 read:用于讀文件。 rm:用于刪除文件。 exit:用于退出文件系統(tǒng)。 (5)實現(xiàn)打開文件函數(shù)fopen() 。因為文件在使用之前必須打開,已建立進程與文件之間的聯(lián)系,
7、而文件描述符唯一的表示這種鏈接,其任務(wù)是把文件的磁盤inode復(fù)制到內(nèi)存活動的inode表中,同時建立一個獨立的讀寫文件數(shù)據(jù)結(jié)構(gòu),即系統(tǒng)打開文件表的一個表項。具體實現(xiàn)如下: 1)格式:FILE *fopen(const char *filename,const char *mode) 2)功能:按照指定打開方式打開指定文件。 3)輸入?yún)?shù)說明: filename:待打開的文件名,如果不存在就創(chuàng)建該文件。 mode: 文件打開方式,常用的有: r:為讀而打開文本文件(不存在則出錯)。 w:為寫而打開文本文件(若不存在則創(chuàng)建該文件;反之,則從文件起始位置寫,原內(nèi)容將被覆蓋)。 a:為在文件末尾添加
8、數(shù)據(jù)而打開文本文件。(若不存在則創(chuàng)建該文件;反之,在原文件末尾追加)。 r+:為讀和寫而打開文本文件。(讀時,從頭開始;在寫數(shù)據(jù)時,新數(shù)據(jù)只覆蓋所占的空間,其后不變) 。 w+:首先建立一個新文件,進行寫操作,隨后可以從頭開始讀。(若文件存在,原內(nèi)容將全部消失) 。 a+:功能與a相同;只是在文件末尾添加新的數(shù)據(jù)后,可以從頭開始讀。 另外,上述模式字符串中都可以加一個“b”字符,如rb、wb、ab、rb+、wb+、ab+等組合,字符“b”表示fopen() 函數(shù)打開的文件為二進制文件,而非純文字文件。4)輸出:一個指向FILE類型的指針。 (6)實現(xiàn)關(guān)閉文件函數(shù)fclose()。因為文件使用完
9、畢,執(zhí)行關(guān)閉系統(tǒng)調(diào)用切斷應(yīng)用進程與文件之間的聯(lián)系。其調(diào)用形式為close(fd)。顯然,要關(guān)閉的文件先前已打開,故文件一定存在描述符fd。實現(xiàn)具體如下: 1)格式:int fclose(FILE * stream); 2)功能:用來關(guān)閉先前fopen()打開的一個文件。此動作會讓緩沖區(qū)內(nèi)的數(shù)據(jù)寫入文件中,并釋放系統(tǒng)所提供的文件資源。 3)輸入?yún)?shù)說明: stream:指向要關(guān)閉文件的指針,它是先前執(zhí)行fopen()函數(shù)的返回值。 4)輸出:若關(guān)閉文件成功則返回0;有錯誤發(fā)生時則返回EOF并把錯誤代碼存到errno。 (7)實現(xiàn)讀文件函數(shù)fread()。因為文件的讀是文件最基本的操作,”讀”指文
10、件的內(nèi)容讀入用戶數(shù)據(jù)區(qū)中。從文件的那個位置讀入數(shù)據(jù),由系統(tǒng)文件表中的f_offset決定。具體實現(xiàn)如下: 1)格式:size_t fread( void *buffer, size_t size, size_t count, FILE *stream ); 2)功能:讀二進制文件到內(nèi)存。 3)輸入?yún)?shù)說明: buffer:用于存放輸入數(shù)據(jù)的緩沖區(qū)的首地址; stream:使用fopen()打開的文件的指針,用于指示要讀取的文件; size: 每個數(shù)據(jù)塊的字節(jié)數(shù); count: 要讀入的數(shù)據(jù)塊的個數(shù); size*count:表示要求讀取的字節(jié)數(shù)。 4)輸出:實際讀取的數(shù)據(jù)塊的個數(shù)。 (8)實現(xiàn)寫
11、文件fwrite()。因為文件的寫是文件最基本的操作,“寫”指把用戶數(shù)據(jù)區(qū)中信息寫入文件中。從文件的那個位置寫入數(shù)據(jù),由系統(tǒng)文件表中的f_offset決定。具體實現(xiàn)如下: 1)格式:size_t fwite(const void *buffer,size_t size,size_t count,FILE *stream); 2)功能:將數(shù)據(jù)寫到二進制文件中。 3)輸入?yún)?shù)說明: buffer:用于存放輸出數(shù)據(jù)的緩沖區(qū)的首地址; stream:使用fopen()打開的文件的指針,用于指示要寫出的文件; size: 每個數(shù)據(jù)塊的字節(jié)數(shù); count: 要寫出的數(shù)據(jù)塊的個數(shù); size*count:
12、表示要求寫出的字符數(shù)。4)輸出:實際寫出的數(shù)據(jù)塊的個數(shù)。 (9)判斷文件結(jié)束函數(shù)feof()。 1)格式:int feof(FILE * stream) 2)功能:用來判斷是否已讀取到文件末尾。 3)輸入?yún)?shù)說明:stream:使用fopen()打開的文件的指針,用于指示要判斷的文件。 4)輸出:如果已讀到文件尾則返回非零值,其他情況返回0。4. 核心數(shù)據(jù)結(jié)構(gòu)說明 (1)文件控制塊,包含文件的名字,種類,大小以及和物理結(jié)構(gòu)磁盤的關(guān)聯(lián)(當前盤塊和當前父目錄盤塊號)。其中initialize是對文件進行初始化。struct FCB char fname16; /文件名char type; / 0空
13、文件 1目錄文件 2空文件 int size; /文件大小int fatherBlockNum; /當前的父目錄盤塊號int currentBlockNum; /當前的盤塊void initialize()strcpy(fname,0);type = Zero;size =0;fatherBlockNum = currentBlockNum = 0; (2)用戶文件打開表,包含當前打開文件數(shù),對文件賦予普通文件類型。struct OPENLISTint files; /當前打開文件數(shù)FCB fOPEN_MAX; /FCB拷貝OPENLIST()files=0;for(int i=0;iOPEN
14、_MAX;i+)fi.fatherBlockNum = -1;/為分配打開fi.type=GENERAL; (3)磁盤結(jié)構(gòu),包含保留扇區(qū),F(xiàn)AT1,F(xiàn)AT2,根目錄區(qū)和數(shù)據(jù)區(qū),將磁盤按照FAT文件系統(tǒng)的磁盤區(qū)分配,并建立磁盤操作系統(tǒng)指針OSpoint。其中保留扇區(qū)包括一個稱為基本輸入輸出參數(shù)塊的區(qū)域(包括一些基本的文件系統(tǒng)信息尤其是它的類型和其它指向其它扇區(qū)的指針),通常包括操作系統(tǒng)的啟動調(diào)用代碼。struct DISKint FAT1BlockCount; /FAT1int FAT2BlockCount; /FAT2struct dirFile root; /根目錄char dataBloc
15、kCount-3BlockSize;void format()memset(FAT1,0,BlockCount); /FAT1memset(FAT2,0,BlockCount); /FAT2FAT10=FAT11=FAT12=-2; /0,1,2盤塊號依次代表FAT1,FAT2,根目錄區(qū)FAT20=FAT21=FAT22=-2; /FAT作備份root.init(2,2,C:);/根目錄區(qū)memset(data,0,sizeof(data);/數(shù)據(jù)區(qū); (4)目錄文件結(jié)構(gòu),是對目錄文件的初始化,包括對目錄的屬性設(shè)定,還有對目錄項的屬性(屬于子項,空白項)等等。struct dirFilestr
16、uct FCB fcbBlockFcbCount;void init(int _FatherBlockNum,int _CurrentBlockNum,char *name)/父塊號,當前塊號,目錄名strcpy(fcb0.fname,name); /本身的FCBfcb0.fatherBlockNum=_FatherBlockNum;fcb0.currentBlockNum=_CurrentBlockNum;fcb0.type=DIRECTORY; /標括記目錄文件for(int i=1;iBlockFcbCount;i+)fcbi.fatherBlockNum=_CurrentBlockNu
17、m; /標括記為子項fcbi.type=Zero; / 標記為空白項;(5) 用戶登陸結(jié)構(gòu),包括用戶名,密碼,結(jié)構(gòu)體指針。typedef struct student char UsernameN; /用戶名 char PasswordN; /密碼 struct student *next; list;list *head=NULL,*user=NULL;(6)磁盤i節(jié)點結(jié)構(gòu),包括關(guān)聯(lián)文件數(shù),文件屬性和存取權(quán)限,文件主標識,文件大小,物理塊號。struct DISKinode/* 磁盤i節(jié)點的所有變量在內(nèi)存i節(jié)點中都有相應(yīng)的變量與之相適應(yīng) */unsigned short DISK_RELAT
18、IONNUMBER ;/* 關(guān)聯(lián)文件數(shù)*/unsigned short DISK_ATTRIBUTE;/* 文件屬性與存取權(quán)限*/unsigned short DISK_MAINFLAG;/* 文件主標括識*/unsigned short DISK_GROUPUSERFLAG;/* 同組用戶標識*/unsigned short DISK_SIZE;/* 文件大小*/unsigned int DISK_PHYSICSNUMBERPHYSICSDISKSN;/* 物理塊號*/;5. 核心算法流程5.1文件系統(tǒng)更改當前目錄 目錄基本操作 子目錄刪除 子目錄創(chuàng)建 顯示目錄 文件基本操作 文件關(guān)閉 文件
19、寫入 文件讀取 文件刪除 文件創(chuàng)建 文件打開開始 登陸注冊 磁盤初始化 系統(tǒng)初始化 加載磁盤文件 目錄樹創(chuàng)建5.2登錄系統(tǒng) 登錄 改密 注冊 進入 登錄是否改密第一次 登錄 開始 NN Y Y 指針 文件 FAT2 數(shù)據(jù)區(qū) 根目錄區(qū) 保留扇區(qū) FAT15.3磁盤的結(jié)構(gòu)6.開發(fā)調(diào)試及運行環(huán)境開發(fā)環(huán)境是Microsoft Visual Studio 2010,運用其內(nèi)在的VC+進行開發(fā)調(diào)試。運行環(huán)境XP以上均可。7. 功能說明及測試數(shù)據(jù)分析(1)用戶登錄與注冊(2)文件系統(tǒng)的的格式化 (3)多級目錄的創(chuàng)建和進入,形成一級級目錄(4)顯示多級目錄下的文件種類和個數(shù) (5)創(chuàng)建文件,并對文件進行打開,
20、讀取,寫入。 (6)文件的關(guān)閉和在當前目錄下的刪除,并沒有級聯(lián)刪除(7)文件子目錄下的文件類型種類的顯示8.存在問題(改進及其他思想)8.1問題(1) 在開始處,對用戶的注冊和登錄體現(xiàn)不夠。(2) 文件的讀寫,在寫入時發(fā)現(xiàn)用txt格式下打開并不能顯示正確內(nèi)容而是亂碼。(3) 在指針調(diào)用時,有時會出錯,導(dǎo)致調(diào)用函數(shù)出現(xiàn)了問題。(4)密碼格式不能立即查看。8.2改進及其他思想 (1)增加help函數(shù),可以任意調(diào)查操作密碼,增加了靈活性。 (2)增加了login函數(shù)對用戶的注冊和登錄進行了完善,并增加了刪除用戶操作。 (3)對指針的調(diào)用進行了完善,解決了調(diào)用時出現(xiàn)的問題。 (4)創(chuàng)建了多級目錄結(jié)構(gòu)可
21、以建立多個子系統(tǒng)下的子系統(tǒng)。 (5)還可以增加文件的權(quán)限,對讀寫進行限制。9.實踐體會及心得 整體:在此次操作系統(tǒng)課程設(shè)計中,我和組員收獲很大,對文件系統(tǒng)的了解也加深了。對物理結(jié)構(gòu)的虛擬和文件系統(tǒng)的建立有了更深刻的認識。在一些復(fù)雜問題上也從中摸到些許門路,以后會繼續(xù)加深,直到真的領(lǐng)悟。 組長:在對物理結(jié)構(gòu)磁盤的虛擬中,加深了對磁盤的了解,對磁盤有了更加的深刻認識。對文件目錄樹的創(chuàng)建,使得對結(jié)構(gòu)體的運用更加熟悉。同時也增加了代碼的書寫和優(yōu)化能力。 組員:小組分工實驗的團隊合作、相互溝通是非常重要的,小組成員之間要相互學(xué)習(xí)彼此的優(yōu)點與技術(shù),使得小組能力不斷提高。這樣,在實踐過程中,才不會被難題困住
22、不動,而導(dǎo)致實踐停滯不前,毫無進展。而實驗分析的好壞將決定著系統(tǒng)開發(fā)成功與否,一份好的分析設(shè)計僵尸成功開發(fā)的主要因素。我們在著手實踐之前先不要急于寫代碼,應(yīng)先由較長的實踐把分析做好,寫出相關(guān)的分析文檔,然后再開始寫代碼,這樣做到每寫一步代碼心里有底,有條不紊。10. 參考文獻(1) 基于VRMap的農(nóng)區(qū)可視化仿真系統(tǒng)設(shè)計與實現(xiàn)作者:劉小軍,張宇鷗,陸震洲,楊雪等。(2) 基于模型和WebGIS的數(shù)字油作系統(tǒng)設(shè)計與實現(xiàn)作者:于少雄,劉小軍,孫傳范。(3) 操作系統(tǒng)教程(第五版)作者:費祥林,駱斌。(4) 操作系統(tǒng)設(shè)計與實現(xiàn) 作者:Tanebaum。(5) KHB:A Filesystems re
23、ading list 作者:lwn。11. 帶注釋的核心部分源碼#define GENERAL 1 /1代表普通文件#define DIRECTORY 2 /2 代表目錄文件#define Zero 0 /0表示空文件#define N 20#define PHYSICSDISKSN13/* 物理塊號數(shù) */*-文件控制塊-*/struct FCB char fname16; /文件名char type; / 0空文件 1目錄文件 2空文件 int size; /文件大小int fatherBlockNum; /當前的父目錄盤塊號int currentBlockNum; /當前的盤塊void
24、initialize()strcpy(fname,0);type = Zero;size =0;fatherBlockNum = currentBlockNum = 0; /*-用戶登錄結(jié)構(gòu)-*/typedef struct student char UsernameN; /用戶名 char PasswordN; /密碼 struct student *next; list;list *head=NULL,*user=NULL;const char* FilePath = C:myfiles;/*常量設(shè)置*/const int BlockSize = 512; /盤塊大小const int O
25、PEN_MAX = 5; /能打開最多的文件數(shù)const int BlockCount = 128; /盤塊數(shù)const int DiskSize = BlockSize * BlockCount; /磁盤大小const int BlockFcbCount = BlockSize/sizeof(FCB);/目錄文件的最多FCB數(shù)int OpenFileCount = 0; / 統(tǒng)計當前打開文件數(shù)目 /*用戶文件打開表*/struct OPENLIST int files; /當前打開文件數(shù)FCB fOPEN_MAX; /FCB拷貝OPENLIST()files=0;for(int i=0;iO
26、PEN_MAX;i+)fi.fatherBlockNum = -1;/為分配打開fi.type=GENERAL;/* 磁盤i節(jié)點數(shù)據(jù)結(jié)構(gòu) */struct DISKinode/* 磁盤i節(jié)點的所有變量在內(nèi)存i節(jié)點中都有相應(yīng)的變量與之相適應(yīng) */unsigned short DISK_RELATIONNUMBER ;/* 關(guān)聯(lián)文件數(shù) */unsigned short DISK_ATTRIBUTE;/* 文件屬性與存取權(quán)限 */unsigned short DISK_MAINFLAG;/* 文件主標識 */unsigned short DISK_GROUPUSERFLAG;/* 同組用戶標識 */
27、unsigned short DISK_SIZE;/* 文件大小 */unsigned int DISK_PHYSICSNUMBERPHYSICSDISKSN;/* 物理塊號 */;/*-目錄文件結(jié)構(gòu)-*/struct dirFilestruct FCB fcbBlockFcbCount;void init(int _FatherBlockNum,int _CurrentBlockNum,char *name)/父塊號,當前塊號,目錄名strcpy(fcb0.fname,name); /本身的FCBfcb0.fatherBlockNum=_FatherBlockNum;fcb0.current
28、BlockNum=_CurrentBlockNum;fcb0.type=DIRECTORY; /標記目錄文件for(int i=1;iformat();/打開文件列表初始化delete openlist;openlist=new OPENLIST;/*-保存到磁盤上myfiles-*/fp = fopen(FilePath,w+);fwrite(BaseAddr,sizeof(char),DiskSize,fp);fclose(fp);printf(格式化成功!n);return 1;/*-用戶注冊函數(shù)-*/int Register() char usernameN,passwordN; li
29、st *pNewStudent,*h=head; int regOK; while(1) regOK=1; printf(登錄 用戶:); scanf(%s,username);printf(登錄 密碼:); scanf(%s,password); h=head; while(h!=NULL) if(strcmp(h-Username,username)=0) regOK=0; break; h=h-next; if(regOK=1) pNewStudent=(list *)malloc(sizeof(list); strcpy(pNewStudent-Username,username);
30、strcpy(pNewStudent-Password,password); pNewStudent-next=head; head=pNewStudent; break; else printf(已經(jīng)有相同用戶名!請重新); return 0;/*-用戶登錄函數(shù)-*/list* Login() list *h; char usernameN; char passwordN; int findOK; while(1) h=head; findOK=0; printf(登錄 用戶:); scanf(%s,username);printf(登錄 密碼:); scanf(%s,password);
31、while(h!=NULL) if(strcmp(h-Username,username)=0 & strcmp(h-Password,password)=0) findOK=1; break; h=h-next; if(findOK=1) printf(歡迎用戶 %sn,username); return h; /break; else printf(用戶名或密碼有錯!請重新); /*-創(chuàng)建子目錄-*/int mkdir(char *sonfname)/判斷是否有重名尋找空白子目錄項尋找空白盤塊號當前目錄下增加該子目錄項分配子目錄盤塊,并且初始化修改fat表int i,temp,iFAT;s
32、truct dirFile *dir; /當前目錄的指針if(current = 2) / 根目錄 dir=&(osPoint-root);elsedir=(struct dirFile *)(osPoint-data current-3);/*-為了避免該目錄下同名文件夾-*/for(i = 1;ifcbi.type=DIRECTORY & strcmp(dir-fcbi.fname,sonfname)=0 )printf(該文件夾下已經(jīng)有同名的文件夾存在了!n);return 0;for(i = 1;i fcbi.type=Zero)break;if(i = BlockFcbCount)p
33、rintf(該目錄已滿!請選擇新的目錄下創(chuàng)建!n);return 0;temp = i;for(i = 3;i FAT1i = 0)break;if(i = BlockCount)printf(磁盤已滿!n);return 0;iFAT=i;/*-接下來進行分配-*/osPoint-FAT1iFAT=osPoint-FAT2iFAT = 2; /2表示分配給下級目錄文件/填寫該分派新的盤塊的參數(shù)strcpy(dir-fcbtemp.fname,sonfname);dir-fcbtemp.type=DIRECTORY;dir-fcbtemp.fatherBlockNum=current;dir-
34、fcbtemp.currentBlockNum=iFAT;/初始化子目錄文件盤塊dir=(struct dirFile*)(osPoint-data iFAT-3); /定位到子目錄盤塊號dir-init (current,iFAT,sonfname);/iFAT是要分配的塊號,這里的current用來指要分配的塊的父塊號printf(創(chuàng)建子目錄成功!n);return 1;/*-刪除當前目錄下的文件夾-*/int rmdir(char *sonfname)int i,temp,j;/確保當前目錄下有該文件,并記錄下該FCB下標struct dirFile *dir; /當前目錄的指針if(c
35、urrent=2)dir=&(osPoint-root);elsedir=(struct dirFile *)(osPoint-data current-3);for(i=1;ifcbi.type=DIRECTORY & strcmp(dir-fcbi.fname,sonfname)=0)break;temp=i;if(i=BlockFcbCount)printf(當前目錄下不存在該子目錄!n);return 0;j = dir-fcbtemp.currentBlockNum;struct dirFile *sonDir; /當前子目錄的指針sonDir=(struct dirFile *)(
36、osPoint-data j - 3);for(i=1;ifcbi.type!=Zero)printf(該文件夾為非空文件夾,為確保安全,請清空后再刪除!n);return 0;/*開始刪除子目錄操作*/osPoint-FAT1j = osPoint-FAT2j=0; /fat清空char *p=osPoint-dataj-3; /格式化子目錄memset(p,0,BlockSize);dir-fcbtemp.initialize(); /回收子目錄占據(jù)目錄項 printf(刪除當前目錄下的文件夾成功n);return 1;/*-在當前目錄下創(chuàng)建文本文件-*/int create(char *
37、name)int i,iFAT;/temp,int emptyNum = 0,isFound = 0; /空閑目錄項個數(shù)struct dirFile *dir; /當前目錄的指針if(current=2)dir=&(osPoint-root);elsedir=(struct dirFile *)(osPoint-data current-3);for(i=1;ifcbi.type = Zero & isFound = 0)emptyNum = i;isFound = 1;else if(dir-fcbi.type=GENERAL & strcmp(dir-fcbi.fname,name)=0
38、)printf(無法在同一目錄下創(chuàng)建同名文件!n);return 0;if(emptyNum = 0)printf(已經(jīng)達到目錄項容納上限,無法創(chuàng)建新目錄!n);return 0;for(i = 3;iFAT1i=0)break;if(i=BlockCount)printf(磁盤已滿!n);return 0;iFAT=i;/*-進入分配階段-*/分配磁盤塊osPoint-FAT1iFAT = osPoint-FAT2iFAT = 1;/*-接下來進行分配-*/填寫該分派新的盤塊的參數(shù)strcpy(dir-fcbemptyNum.fname,name);dir-fcbemptyNum.type=
39、GENERAL;dir-fcbemptyNum.fatherBlockNum=current;dir-fcbemptyNum.currentBlockNum=iFAT;dir-fcbemptyNum.size =0;char* p = osPoint-dataiFAT -3;memset(p,4,BlockSize);printf(在當前目錄下創(chuàng)建文本文件成功!n);return 1;/*-查詢子目錄-*/int listshow()int i,DirCount=0,FileCount=0;/搜索當前目錄struct dirFile *dir; /當前目錄的指針if(current=2)dir
40、=&(osPoint-root);elsedir=(struct dirFile *)(osPoint-data current-3);for(i=1;ifcbi.type=GENERAL) /查找普通文件FileCount+;printf(%s 文本文件.n,dir-fcbi.fname);if(dir-fcbi.type=DIRECTORY) /查找目錄文件DirCount+;printf(%s 文件夾.n,dir-fcbi.fname);printf(n該目錄下共有 %d 個文本文件, %d 個文件夾nn,FileCount,DirCount);return 1;/*-在當前目錄下刪除文
41、件-*/int delfile(char *name)int i,temp,j;/確保當前目錄下有該文件,并且記錄下它的FCB下標struct dirFile *dir; /當前目錄的指針if(current = 2)dir=&(osPoint-root);elsedir=(struct dirFile *)(osPoint-data current-3);for(i=1;i fcbi.type=GENERAL & strcmp(dir-fcbi.fname,name)=0)break;if(i = BlockFcbCount)printf(當前目錄下不存在該文件!n);return 0;in
42、t k;for(k=0;kf k.type = GENERAL)&(strcmp(openlist-f k.fname,name)=0)if(openlist-fk.fatherBlockNum = current)break;elseprintf(該文件未在當前目錄下!n);return 0;if(k!=OPEN_MAX)close(name);/從打開列表中刪除/*開始刪除文件操作*/temp=i;j = dir-fcb temp.currentBlockNum ; /查找盤塊號josPoint-FAT1j=osPoint-FAT2j=0; /fat1,fat2表標記為空白char *p=osPoint-dataj - 3;memset(p,0,BlockSize); /清除原文本文件的內(nèi)容dir-fcbtemp.initialize(); /type=0; /標記該目錄項為空文件printf(在當前目錄下刪除文件成功!n);retur
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026福建熹晟船務(wù)有限公司業(yè)務(wù)拓展主管社會招聘1人備考題庫含答案詳解
- 蘭州信息科技學(xué)院《鮮切花栽培學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 淄博師范高等專科學(xué)?!锻恋卣螌W(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 江門職業(yè)技術(shù)學(xué)院《機械基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 張家口學(xué)院《神經(jīng)系統(tǒng)與精神》2023-2024學(xué)年第二學(xué)期期末試卷
- 蘇州工業(yè)園區(qū)服務(wù)外包職業(yè)學(xué)院《電商創(chuàng)業(yè)》2023-2024學(xué)年第二學(xué)期期末試卷
- 武漢船舶職業(yè)技術(shù)學(xué)院《中學(xué)古典詩詞研讀》2023-2024學(xué)年第二學(xué)期期末試卷
- 北京青年政治學(xué)院《公共部門人力資源管理實驗》2023-2024學(xué)年第二學(xué)期期末試卷
- 2026黑龍江黑河市直招聘公益性崗位89人備考題庫完整答案詳解
- 2026遼寧沈陽中鐵建發(fā)展有限公司校園招聘備考題庫及參考答案詳解1套
- 人教版小學(xué)數(shù)學(xué)五年級下冊《因數(shù)與倍數(shù)》單元測試卷3套含答案
- 單位升旗活動方案
- 2025年中國蘿卜干市場調(diào)查研究報告
- 國家中醫(yī)藥管理局《中醫(yī)藥事業(yè)發(fā)展“十五五”規(guī)劃》全文
- 師德師風(fēng)個人總結(jié)課件
- 化學(xué)-江蘇省蘇州市2024-2025學(xué)年第一學(xué)期學(xué)業(yè)質(zhì)量陽光指標調(diào)研卷暨高二上學(xué)期期末考試試題和答案
- 精神科疑難病例討論
- 騰訊00后研究報告
- 固體廢物 鉛和鎘的測定 石墨爐原子吸收分光光度法(HJ 787-2016)
- DB45-T 2675-2023 木薯米粉加工技術(shù)規(guī)程
- 板材眼鏡生產(chǎn)工藝
評論
0/150
提交評論