版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、實驗八模擬DOS文件的建立一、上機目的:磁盤文件是磁盤上存儲的重要信息,通過本實驗?zāi)MDOS文件的建立和使用情況,理解磁盤文件的物理結(jié)構(gòu)。文件管理是操作系統(tǒng)中重要的內(nèi)容之一,不同的文件系統(tǒng)提供了不同的物理結(jié)構(gòu),通過實驗,深入理解文件的物理結(jié)構(gòu)與存取方法之間的關(guān)系,以便更好的掌握文件系統(tǒng)的概念。二、上機內(nèi)容:(1)模擬設(shè)計DOS操作系統(tǒng)中磁盤文件的存儲結(jié)構(gòu)(2)模擬設(shè)計便于直接存取的索引文件結(jié)構(gòu)三、開發(fā)環(huán)境Microsoft Visual C+環(huán)境,采用 C語言編程四、分析設(shè)計(一)實驗原理(1)模擬設(shè)計DOS操作系統(tǒng)中磁盤文件的存儲結(jié)構(gòu)DOS操作系統(tǒng)對磁盤文件的管理采用鏈接結(jié)構(gòu),將所有的鏈接指
2、針集中在一起,存放在文件分配表(FAT)中。連接文件的第一個物理塊號登記在文件目錄中。其設(shè)計思想是:假定磁盤上共有N個物理塊可供使用,當要存放文件時,從FAT表中尋找其值為0的項,用其對應(yīng)的物理塊存放文件信息,并把文件占有的各物理塊用鏈接指針登記在FAT表中,再把文件的第一個物理塊號登記在文件目錄中。在DOS中FAT表的前兩項用來記錄磁盤的類型。而從第2項開始記錄磁盤的分配情況和文件各物理塊的鏈接情況。在FAT表中第三項的值如果為 0,表示對應(yīng)的第三塊空閑。假設(shè)磁盤空間共有 100個物理塊,設(shè)計一個文件分配表 FAT100,其中每一個元素與一個物理塊對應(yīng)。開始時,先把FAT100初始化為0,前
3、兩項是用來記錄磁盤的類型,所以賦常值分別為-2,-1 。然后再寫入文件,假設(shè)寫入的文件為A文件長度為6,要把這個文件寫入磁盤,就要為這個文件分配六個物理塊,所以在FAT100表中,找到六個空閑的物理塊分配給文件A系統(tǒng)就能夠在磁盤上正確的保存文件Ao當你要給文件 A在指定的位置添加記錄時,系統(tǒng)就要先找到一個空閑的物理塊,然后把指定位置的物理塊的值賦值給找到的空閑塊,然后再把插入的記錄插在原先指定的物理塊上。這樣做是為了不把在指定位置的值給覆蓋掉,又能正確的插入。(2)模擬設(shè)計便于直接存取的索引文件結(jié)構(gòu)在MS-DOS中通過文件目錄,再沿著鏈查找FAT表,便可直接找到指定邏輯記錄對應(yīng)的物理塊。在小型
4、機或更高級的文件系統(tǒng)中,直接存取文件的方法是為每個文件建立一個索引表,指出各邏輯記錄與物理塊的對應(yīng)關(guān)系。在你要索引文件時,search()函數(shù)就能夠通過比較你輸入的文件名是否和你之前建立 的文件名相同,如果相同,就會索引出該文件,并且顯示該文件的文件名、起始塊號、文件 長度的詳細信息;如果不相同,就會輸出“找不到該文件”,在索引索引點時,就要用 search2()函數(shù)就通過輸入的索引點是否為文件存儲的最后 一個塊而且輸入的索引點的下一個物理塊為0,就可以把文件索引出來。五、參考代碼:#include /使用字符串函數(shù)時需要的頭文件#include#includeconst int FDF=-2
5、;const int FFF=-1;const int N=100;int filenumber;struct FILEINFO/聲明一個結(jié)構(gòu)體類型(char name10;/文件名為字符串int start;/起始塊號為整形int length;/文件長度為整形);FILEINFO file10;/定義結(jié)構(gòu)體數(shù)組,file是結(jié)構(gòu)體數(shù)組名,10為數(shù)組長度int FATN,freespace; /FAT 表和剩余空間/顯示文件目錄void printfmenu()/定義無參數(shù)返回值的printfmenu函數(shù)(int i;/定義變量i為整形printf(t 文件個數(shù):%d n,filenumber
6、);/ 輸出文件個數(shù)printf(t文件名起始塊號文件長度n);/輸出文件名,起始塊號和文件長度for(i=0;ifilenumber;i+)(printf( %s %d %dn,,filei.start,filei.length);)/顯示FAT表void printFAT()/定義無參數(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文件名起始塊號文件長度n);printf( %s %d %dn,,filei.start,filei.length);)elseprintf(t不存在該文件!);)/搜索索引點void search2(int searchpoint)int i=0;int m;if(FATsearchpoint=0)printf(-t該點空缺,沒有文件!);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,);)/寫入文件void write(char *tmpname,int tmplength)(int last,i,j;strcpy(,tmpname);/ 復(fù)制文件名和文件塊個數(shù)filefilenumber.length=tmplength;for(i=2;iN;i+)(if(FATi=0)(filefilenumber.star
10、t=i;/首個空閑塊為文件開始塊last=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é)束標記freespace-=tmplength;/ 改變空閑塊個數(shù) filenumber+;printf(文件名和長度:s %dn,tmpname,tmplength);)/插入記錄void insert(char *tmpname,int insertpoint)(int i;int last,brpoint;
11、for(i=0;i=filelast.length)(printf(插入點溢出!);return;)brpoint=filelast.start; /brpoint記錄當前文件掃描到的位置for(i=0;iinsertpoint;i+)(brpoint=FATbrpoint;)for(i=0;iN;i+)(if(FATi=0)(FATi=FATbrpoint;FATbrpoint=i; break;)filelast.length+;/改變空閑塊個數(shù)與文件長度freespace-;printf(t 文件名和長度:%s %dn,tmpname,filelast.length); ) void m
12、ain()(int i;char tmpname10;/要寫入文件名的字符長度 int tmplength;/要寫入文件長度int m;/ 命令filenumber=0;/初始文件個數(shù)為 0 for(i=0;iN;i+)/ 初始化 FAT 表 (FATi=0;)FAT0=FDF;FAT1=FFF;freespace=98;while(true)(printf(n);printf(* 歡迎進 入 *n);printf(n);printf(n”);printf(0.退出n);printf(1.寫入文件2.插入文件3.顯示文件目錄n);printf(4.顯示FAT表5.搜索文件6.搜索索引點n)pr
13、intf(*printf(n);printf(t選擇服務(wù)菜單:);scanf(%d”,&m);switch(m)(case 0: exit(0);case 1: printf(t輸入要寫入的文件名:);scanf(%s”,&tmpname);printf(t輸入要寫入的文件長度:);scanf(%d,&tmplength);write(tmpname,tmplength);/ 調(diào)用 write 函數(shù) break;case 2: printf(t輸入要插入的文件名:);scanf(%s,&tmpname);int insertpoint;printf(t輸入要插入的點:);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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 綜合素養(yǎng)提升的跨領(lǐng)域?qū)W習(xí)策略研究
- 科技驅(qū)動的校園環(huán)境改善策略
- IT行業(yè)保密協(xié)議(2024版)
- 2025年度智能廚電一體化購銷合同二零二五3篇
- 二零二五年度自助餐廳經(jīng)營承包合同3篇
- 漯河2024年河南漯河市沙澧河建設(shè)運行保障中心人才引進5人筆試歷年參考題庫附帶答案詳解
- 滁州安徽滁州明光市司法局招聘司法協(xié)理員7人筆試歷年參考題庫附帶答案詳解
- 高效能實驗的關(guān)鍵儀器的科學(xué)使用方法
- 淮安2025年江蘇淮安漣水縣公安局警務(wù)輔助人員招聘87人(一)筆試歷年參考題庫附帶答案詳解
- 二零二五年度蟲草產(chǎn)品研發(fā)與創(chuàng)新合同3篇
- 2024年小升初語文入學(xué)分班測試卷四(統(tǒng)編版)
- 流行文化對青少年價值觀的影響研究
- 2024年代理記賬工作總結(jié)6篇
- 電氣工程預(yù)算實例:清單與計價樣本
- VOC廢氣治理工程中電化學(xué)氧化技術(shù)的研究與應(yīng)用
- 煤礦機電設(shè)備培訓(xùn)課件
- 科技論文圖表等規(guī)范表達
- 高考寫作指導(dǎo)議論文標準語段寫作課件32張
- 2021年普通高等學(xué)校招生全國英語統(tǒng)一考試模擬演練八省聯(lián)考解析
- 紅色研學(xué)旅行課程的設(shè)計與實踐
- 幼兒園保育教育質(zhì)量指南評估指標考核試題及答案
評論
0/150
提交評論