實(shí)驗(yàn)八實(shí)驗(yàn)報(bào)告模擬_第1頁(yè)
實(shí)驗(yàn)八實(shí)驗(yàn)報(bào)告模擬_第2頁(yè)
實(shí)驗(yàn)八實(shí)驗(yàn)報(bào)告模擬_第3頁(yè)
實(shí)驗(yàn)八實(shí)驗(yàn)報(bào)告模擬_第4頁(yè)
實(shí)驗(yàn)八實(shí)驗(yàn)報(bào)告模擬_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí)驗(yàn)八模擬DOS文件的建立一、上機(jī)目的:磁盤(pán)文件是磁盤(pán)上存儲(chǔ)的重要信息,通過(guò)本實(shí)驗(yàn)?zāi)MDOS文件的建立和使用情況,理解磁盤(pán)文件的物理結(jié)構(gòu)。文件管理是操作系統(tǒng)中重要的內(nèi)容之一,不同的文件系統(tǒng)提供了不同的物理結(jié)構(gòu),通過(guò)實(shí)驗(yàn),深入理解文件的物理結(jié)構(gòu)與存取方法之間的關(guān)系,以便更好的掌握文件系統(tǒng)的概念。二、上機(jī)內(nèi)容:(1)模擬設(shè)計(jì)DOS操作系統(tǒng)中磁盤(pán)文件的存儲(chǔ)結(jié)構(gòu)(2)模擬設(shè)計(jì)便于直接存取的索引文件結(jié)構(gòu)三、開(kāi)發(fā)環(huán)境Microsoft Visual C+環(huán)境,采用 C語(yǔ)言編程四、分析設(shè)計(jì)(一)實(shí)驗(yàn)原理(1)模擬設(shè)計(jì)DOS操作系統(tǒng)中磁盤(pán)文件的存儲(chǔ)結(jié)構(gòu)DOS操作系統(tǒng)對(duì)磁盤(pán)文件的管理采用鏈接結(jié)構(gòu),將所有的鏈接指

2、針集中在一起,存放在文件分配表(FAT)中。連接文件的第一個(gè)物理塊號(hào)登記在文件目錄中。其設(shè)計(jì)思想是:假定磁盤(pán)上共有N個(gè)物理塊可供使用,當(dāng)要存放文件時(shí),從FAT表中尋找其值為0的項(xiàng),用其對(duì)應(yīng)的物理塊存放文件信息,并把文件占有的各物理塊用鏈接指針登記在FAT表中,再把文件的第一個(gè)物理塊號(hào)登記在文件目錄中。在DOS中FAT表的前兩項(xiàng)用來(lái)記錄磁盤(pán)的類型。而從第2項(xiàng)開(kāi)始記錄磁盤(pán)的分配情況和文件各物理塊的鏈接情況。在FAT表中第三項(xiàng)的值如果為 0,表示對(duì)應(yīng)的第三塊空閑。假設(shè)磁盤(pán)空間共有 100個(gè)物理塊,設(shè)計(jì)一個(gè)文件分配表 FAT100,其中每一個(gè)元素與一個(gè)物理塊對(duì)應(yīng)。開(kāi)始時(shí),先把FAT100初始化為0,前

3、兩項(xiàng)是用來(lái)記錄磁盤(pán)的類型,所以賦常值分別為-2,-1 。然后再寫(xiě)入文件,假設(shè)寫(xiě)入的文件為A文件長(zhǎng)度為6,要把這個(gè)文件寫(xiě)入磁盤(pán),就要為這個(gè)文件分配六個(gè)物理塊,所以在FAT100表中,找到六個(gè)空閑的物理塊分配給文件A系統(tǒng)就能夠在磁盤(pán)上正確的保存文件Ao當(dāng)你要給文件 A在指定的位置添加記錄時(shí),系統(tǒng)就要先找到一個(gè)空閑的物理塊,然后把指定位置的物理塊的值賦值給找到的空閑塊,然后再把插入的記錄插在原先指定的物理塊上。這樣做是為了不把在指定位置的值給覆蓋掉,又能正確的插入。(2)模擬設(shè)計(jì)便于直接存取的索引文件結(jié)構(gòu)在MS-DOS中通過(guò)文件目錄,再沿著鏈查找FAT表,便可直接找到指定邏輯記錄對(duì)應(yīng)的物理塊。在小型

4、機(jī)或更高級(jí)的文件系統(tǒng)中,直接存取文件的方法是為每個(gè)文件建立一個(gè)索引表,指出各邏輯記錄與物理塊的對(duì)應(yīng)關(guān)系。在你要索引文件時(shí),search()函數(shù)就能夠通過(guò)比較你輸入的文件名是否和你之前建立 的文件名相同,如果相同,就會(huì)索引出該文件,并且顯示該文件的文件名、起始?jí)K號(hào)、文件 長(zhǎng)度的詳細(xì)信息;如果不相同,就會(huì)輸出“找不到該文件”,在索引索引點(diǎn)時(shí),就要用 search2()函數(shù)就通過(guò)輸入的索引點(diǎn)是否為文件存儲(chǔ)的最后 一個(gè)塊而且輸入的索引點(diǎn)的下一個(gè)物理塊為0,就可以把文件索引出來(lái)。五、參考代碼:#include /使用字符串函數(shù)時(shí)需要的頭文件#include#includeconst int FDF=-2

5、;const int FFF=-1;const int N=100;int filenumber;struct FILEINFO/聲明一個(gè)結(jié)構(gòu)體類型(char name10;/文件名為字符串int start;/起始?jí)K號(hào)為整形int length;/文件長(zhǎng)度為整形);FILEINFO file10;/定義結(jié)構(gòu)體數(shù)組,file是結(jié)構(gòu)體數(shù)組名,10為數(shù)組長(zhǎng)度int FATN,freespace; /FAT 表和剩余空間/顯示文件目錄void printfmenu()/定義無(wú)參數(shù)返回值的printfmenu函數(shù)(int i;/定義變量i為整形printf(t 文件個(gè)數(shù):%d n,filenumber

6、);/ 輸出文件個(gè)數(shù)printf(t文件名起始?jí)K號(hào)文件長(zhǎng)度n);/輸出文件名,起始?jí)K號(hào)和文件長(zhǎng)度f(wàn)or(i=0;ifilenumber;i+)(printf( %s %d %dn,,filei.start,filei.length);)/顯示FAT表void printFAT()/定義無(wú)參數(shù)返回值的printFAT函數(shù)(int i;printf(t 空閑塊數(shù):%dn,freespace);printf(t-2 代表 FDF,-1 代表 FFFn);for(i=0;iN;i+)printf( No.%d %dn,i,FATi);) /搜索文件void search(char

7、*tmpname)int i;for(i=0;ifilenumber;i+)if(strcmp(,tmpname)=0)/比較插入文件名與已存在文件名是否相同printf(t 找到了 !n);printf(-t文件名起始?jí)K號(hào)文件長(zhǎng)度n);printf( %s %d %dn,,filei.start,filei.length);)elseprintf(t不存在該文件!);)/搜索索引點(diǎn)void search2(int searchpoint)int i=0;int m;if(FATsearchpoint=0)printf(-t該點(diǎn)空缺,沒(méi)有文件!);els

8、e if(FATsearchpoint=-1&FATsearchpoint-1=-2|FATsearchpoint=-2&FATsearchpoint+ 1=-1)(printf(t此處為系統(tǒng)空間!);)else if(FATsearchpoint=-1&FATsearchpoint+1=0)(printf(t 找到了 !此處的文件名為:%s,);)else if(FATsearchpoint!=0&FATsearchpoint+1!=-1)(for(m=searchpoint;m+)(if(FATm=-1)printf(t 找到了 !此處的文件名為:%s,filei.na

9、me);else(printf(找不到該文件!);)break;)else if(FATsearchpoint!=0&FATsearchpoint+1=-1)(printf(找到了 !此處的文件名為:%s,);)/寫(xiě)入文件void write(char *tmpname,int tmplength)(int last,i,j;strcpy(,tmpname);/ 復(fù)制文件名和文件塊個(gè)數(shù)filefilenumber.length=tmplength;for(i=2;iN;i+)(if(FATi=0)(filefilenumber.star

10、t=i;/首個(gè)空閑塊為文件開(kāi)始?jí)Klast=i;FATlast=FFF;break;for(i=1;itmplength;i+)(for(j=2;jN;j+)if(FATj=0)(FATlast=j;last=j;FATlast=FFF;break;)FATlast=FFF;/文件末存結(jié)束標(biāo)記freespace-=tmplength;/ 改變空閑塊個(gè)數(shù) filenumber+;printf(文件名和長(zhǎng)度:s %dn,tmpname,tmplength);)/插入記錄void insert(char *tmpname,int insertpoint)(int i;int last,brpoint;

11、for(i=0;i=filelast.length)(printf(插入點(diǎn)溢出!);return;)brpoint=filelast.start; /brpoint記錄當(dāng)前文件掃描到的位置for(i=0;iinsertpoint;i+)(brpoint=FATbrpoint;)for(i=0;iN;i+)(if(FATi=0)(FATi=FATbrpoint;FATbrpoint=i; break;)filelast.length+;/改變空閑塊個(gè)數(shù)與文件長(zhǎng)度f(wàn)reespace-;printf(t 文件名和長(zhǎng)度:%s %dn,tmpname,filelast.length); ) void m

12、ain()(int i;char tmpname10;/要寫(xiě)入文件名的字符長(zhǎng)度 int tmplength;/要寫(xiě)入文件長(zhǎng)度int m;/ 命令filenumber=0;/初始文件個(gè)數(shù)為 0 for(i=0;iN;i+)/ 初始化 FAT 表 (FATi=0;)FAT0=FDF;FAT1=FFF;freespace=98;while(true)(printf(n);printf(* 歡迎進(jìn) 入 *n);printf(n);printf(n”);printf(0.退出n);printf(1.寫(xiě)入文件2.插入文件3.顯示文件目錄n);printf(4.顯示FAT表5.搜索文件6.搜索索引點(diǎn)n)pr

13、intf(*printf(n);printf(t選擇服務(wù)菜單:);scanf(%d”,&m);switch(m)(case 0: exit(0);case 1: printf(t輸入要寫(xiě)入的文件名:);scanf(%s”,&tmpname);printf(t輸入要寫(xiě)入的文件長(zhǎng)度:);scanf(%d,&tmplength);write(tmpname,tmplength);/ 調(diào)用 write 函數(shù) break;case 2: printf(t輸入要插入的文件名:);scanf(%s,&tmpname);int insertpoint;printf(t輸入要插入的點(diǎn):);scanf(%d,&insertpoint);insert(tmpname,insertpoint);/ 調(diào)用插入函數(shù) break;case 3: printfmenu();/ 調(diào)用 printfmenu 函數(shù)顯示文件目錄 break;case 4: printFAT();/ 調(diào)用 printFAT 函數(shù)顯示 FAT 表 break;case 5: pr

溫馨提示

  • 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. 人人文庫(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)論