版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 操作系統(tǒng)課程設(shè)計</b></p><p><b> 模擬文件系統(tǒng)</b></p><p> 學(xué) 院: 計算機(jī)科學(xué)技術(shù) </p><p> 專 業(yè): 計算機(jī)科學(xué)與技術(shù)(工)</p><p> 班 級: 計10-
2、1班 </p><p> 姓 名: </p><p> 學(xué) 號: </p><p> 指導(dǎo)教師: </p><p> 2013年07月16日</p><p> 《操作系統(tǒng)原理》課程設(shè)計任務(wù)書<
3、/p><p> ?。ㄓ嬎銠C(jī)科學(xué)與技術(shù)專業(yè) 10-1)</p><p> 一、課程設(shè)計題目(任選一個題目)</p><p><b> 1.模擬進(jìn)程管理</b></p><p><b> 2.模擬處理機(jī)調(diào)度</b></p><p><b> 3.模擬存儲器管理<
4、;/b></p><p><b> 4.模擬文件系統(tǒng)</b></p><p><b> 5.模擬磁盤調(diào)度</b></p><p><b> 二、設(shè)計目的和要求</b></p><p><b> 1.設(shè)計目的</b></p>&l
5、t;p> 《操作系統(tǒng)原理》課程設(shè)計是網(wǎng)絡(luò)工程專業(yè)實踐性環(huán)節(jié)之一,是學(xué)習(xí)完《操作系統(tǒng)原理》課程后進(jìn)行的一次較全面的綜合練習(xí)。其目的在于加深對操作系統(tǒng)的理論、方法和基礎(chǔ)知識的理解,掌握操作系統(tǒng)結(jié)構(gòu)、實現(xiàn)機(jī)理和各種典型算法,系統(tǒng)地了解操作系統(tǒng)的設(shè)計和實現(xiàn)思路,培養(yǎng)學(xué)生的系統(tǒng)設(shè)計能力,并了解操作系統(tǒng)的發(fā)展動向和趨勢。</p><p><b> 2.基本要求:</b></p>
6、<p> (1)選擇課程設(shè)計題目中的一個課題,獨(dú)立完成。</p><p> (2)良好的溝通和合作能力</p><p> (3)充分運(yùn)用前序課所學(xué)的軟件工程、程序設(shè)計、數(shù)據(jù)結(jié)構(gòu)等相關(guān)知識</p><p> (4)充分運(yùn)用調(diào)試和排錯技術(shù)</p><p> (5)簡單測試驅(qū)動模塊和樁模塊的編寫 </p><
7、p> (6)查閱相關(guān)資料,自學(xué)具體課題中涉及到的新知識。</p><p> (7)課題完成后必須按要求提交課程設(shè)計報告,格式規(guī)范,內(nèi)容詳實。</p><p><b> 三、設(shè)計內(nèi)容及步驟</b></p><p> 1.根據(jù)設(shè)計題目的要求,充分地分析和理解問題,明確問題要求做什么。</p><p> 2.根
8、據(jù)實現(xiàn)的功能,劃分出合理的模塊,明確模塊間的關(guān)系。</p><p> 3.編程實現(xiàn)所設(shè)計的模塊。</p><p> 4.程序調(diào)試與測試。采用自底向上,分模塊進(jìn)行,即先調(diào)試低層函數(shù)。能夠熟練掌握調(diào)試工具的各種功能,設(shè)計測試數(shù)據(jù)確定疑點(diǎn),通過修改程序來證實它或繞過它。調(diào)試正確后,認(rèn)真整理源程序及其注釋,形成格式和風(fēng)格良好的源程序清單和結(jié)果;</p><p> 5.
9、結(jié)果分析。程序運(yùn)行結(jié)果包括正確的輸入及其輸出結(jié)果和含有錯誤的輸入及其輸出結(jié)果。</p><p><b> 目錄</b></p><p> 1.課程設(shè)計的目的 1</p><p> 2.課程設(shè)計的要求 1</p><p><b> 3.需求分析1</b></p><p
10、> 3.1問題描述 1</p><p> 3.2數(shù)據(jù)結(jié)構(gòu) 1</p><p> 3.2.1 類 1</p><p> 3.2.2 結(jié)構(gòu) 2</p><p> 3.2.3 函數(shù) 2</p><p> 3.3系統(tǒng)運(yùn)行環(huán)境 2</p><p><b> 4.概
11、要設(shè)計 3</b></p><p> 4.1創(chuàng)建文件操作3</p><p> 4.2刪除文件操作 4</p><p> 4.3查看文件塊號 4</p><p><b> 5 詳細(xì)設(shè)計4</b></p><p> 5.1創(chuàng)建文件 4</p><p
12、> 5.2刪除文件 7</p><p> 5.3查看文件塊號10</p><p><b> 6.總結(jié) 12</b></p><p><b> 參考文獻(xiàn) 14</b></p><p><b> 附錄 15</b></p><p>
13、<b> 1.課程設(shè)計的目的</b></p><p> 掌握模擬文件系統(tǒng)的設(shè)計方法,具備初步的獨(dú)立分析和設(shè)計能力。初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計、程序編碼、測試等基本方法和技能。</p><p> 提高綜合運(yùn)用所學(xué)的理論知識和方法以及獨(dú)立分析和解決問題的能力。</p><p> 訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開發(fā)的一般規(guī)范進(jìn)行軟件開發(fā)
14、,培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。理論聯(lián)系實踐提高計算機(jī)專業(yè)綜合水平。</p><p><b> 2.課程設(shè)計的要求</b></p><p> 將所要設(shè)計的文件系統(tǒng)確定化,并設(shè)計出該確定化的模擬文件系統(tǒng)程序,要求程序有效不出現(xiàn)死循環(huán),具有實際應(yīng)用意義。按操作由鍵盤輸入所要執(zhí)行的命令的代號,并輸入相應(yīng)要求的內(nèi)容。根據(jù)命令執(zhí)行,并輸出結(jié)果。</p&
15、gt;<p><b> 3.需求分析</b></p><p><b> 3.1問題描述</b></p><p><b> 模擬文件系統(tǒng)</b></p><p> 實驗內(nèi)容和步驟:建立一個用戶接口,其功能包括能根據(jù)用戶的選擇,運(yùn)行相應(yīng)的程序模塊,實現(xiàn)諸如改名文件、刪除文件、顯示文件
16、等功能。</p><p><b> 3.2數(shù)據(jù)結(jié)構(gòu)</b></p><p><b> 3.2.1 類</b></p><p> class Cuser</p><p><b> 3.2.2結(jié)構(gòu)</b></p><p> typedef stru
17、ct UFD//存儲文件信息</p><p><b> {</b></p><p> char name[10];</p><p> int attribute;//文件屬性</p><p> int length;</p><p> int a[10];</p><
18、p> int *p1;//一級索引</p><p> int (*p2)[100];//二級索引</p><p> struct UFD *next;// 指向文件鏈表中此文件結(jié)點(diǎn)的下一個結(jié)點(diǎn)</p><p><b> }UFD;</b></p><p><b> 3.2.3 函數(shù)</b&
19、gt;</p><p> UFD *Fhead;//文件鏈表的頭結(jié)點(diǎn)</p><p> int dis_file();//顯示文件所占外存塊號</p><p> int dele_file(UFD *f);//刪除文件的具體實現(xiàn)部分</p><p> int new_file();</p><p> int
20、open_file();</p><p> int first_dele_file();//實現(xiàn)刪除文件的前部分工作</p><p><b> 3.3系統(tǒng)運(yùn)行環(huán)境</b></p><p> 操作系統(tǒng):Windows XP </p><p> 運(yùn)行軟件:Microsoft Visual C++ 6.0</p&
21、gt;<p><b> 4.概要設(shè)計</b></p><p><b> 4.1創(chuàng)建文件操作</b></p><p> 由于創(chuàng)建文件必須要有文件名,所以空路徑和路徑“\”在此成為錯誤。而且正因為如此,在此模塊中需要分解出文件名,再把不含文件名的路徑傳遞給“查找模塊”,其次,其中涉及了創(chuàng)建文件的操作,它包括:在找到目錄中的next
22、f中添加一項并把文件的指針指向目錄,即給文件賦值等操作。具體流程如4-1-1所示:</p><p> 圖4-1-1 創(chuàng)建文件流程圖</p><p><b> 4.2刪除文件操作</b></p><p> 刪除文件必須有文件名,所以不允許空路徑或路徑文“/”在此模塊中分解出文件名,對不含文件名的路徑進(jìn)行處理。刪除操作在找到上一級目錄后,再找
23、出上一級目錄,將之后的指針向前移一位,文件被刪除。</p><p><b> 4.3查看文件塊號</b></p><p> 文件的內(nèi)存空間為1000塊,每當(dāng)創(chuàng)建一個文件分配連續(xù)的存儲塊號給此文件,查看的時候先輸入要查詢的文件名根據(jù)用戶輸入的文件名找到此文件和相應(yīng)的塊號。</p><p><b> 5 詳細(xì)設(shè)計</b>
24、</p><p><b> 5.1創(chuàng)建文件</b></p><p> 在創(chuàng)建文件文件時要考慮文件的大小是否滿足當(dāng)前磁盤的剩余空間,只有當(dāng)希望創(chuàng)建文件的大小小于磁盤剩余空間才可創(chuàng)建。具體實現(xiàn)程序:</p><p> int Cuse::new_file()</p><p><b> {</b>
25、</p><p> int i=0,j=0;</p><p><b> UFD *p=0;</b></p><p> p=new UFD;</p><p><b> if(p==0)</b></p><p><b> {</b></p&g
26、t;<p> cout<<"內(nèi)存空間已滿,創(chuàng)建文件失??!"<<endl;</p><p><b> return 1;</b></p><p><b> }</b></p><p> cout<<"請輸入建立的文件的名稱,長度,屬性(0
27、:只讀,1:讀寫)"<<endl;</p><p> cin>>p->name>>p->length>>p->attribute;</p><p> if(p->length>disk_empty)</p><p><b> {</b></p&g
28、t;<p> cout<<"作業(yè)太大,當(dāng)前硬盤可用空間為:"<<disk_empty<<endl;</p><p><b> delete p;</b></p><p><b> return 0;</b></p><p><b> }
29、</b></p><p> for(i=0;i<p->length&&i<10;i++)</p><p> for(j;j<10000;j++)</p><p> if(disk_block[j]==0)</p><p><b> {</b></p>
30、<p> p->a[i]=j;</p><p> disk_block[j]=1;</p><p><b> j++;</b></p><p><b> break;</b></p><p><b> }</b></p><p&
31、gt;<b> p->p1=0;</b></p><p><b> p->p2=0;</b></p><p> if(p->length>10)//一級索引的實現(xiàn)</p><p><b> {</b></p><p> p->p1=new
32、 int[100];</p><p> for(i=10;i<p->length&&i<110;i++)</p><p> for(j;j<10000;j++)</p><p> if(disk_block[j]==0)</p><p><b> {</b></p&g
33、t;<p> ( p->p1)[i-10]=j;</p><p> disk_block[j]=1;</p><p><b> j++;</b></p><p><b> break;</b></p><p><b> }</b></p>
34、;<p> if(p->length>110)//二級索引的實現(xiàn)</p><p><b> {</b></p><p> p->p2=new int[100][100];</p><p> for(i=110;i<p->length;i++)</p><p> for
35、(j;j<10000;j++)</p><p> if(disk_block[j]==0)</p><p><b> {</b></p><p> int m=(i-110)/100;</p><p> int k=(i-110)%100;</p><p> p->p2[m]
36、[k]=j;</p><p> disk_block[j]=1;</p><p><b> j++;</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</
37、b></p><p><b> }</b></p><p> if(now==0)</p><p><b> {</b></p><p> p->next=Fhead;</p><p><b> Fhead=p;</b></p
38、><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> p->next=now->File_head;</p><p> now->File_head=p
39、;</p><p> DIR *h=now;</p><p> while(h!=0)</p><p><b> {</b></p><p> h->length+=p->length;</p><p> h=h->above;</p><p>
40、<b> }</b></p><p><b> }</b></p><p> cout<<"文件創(chuàng)建成功!"<<endl;</p><p> disk_empty=disk_empty-p->length;</p><p> length+
41、=p->length;</p><p><b> return 1;</b></p><p><b> }</b></p><p> 具體調(diào)試界面如下圖所示:</p><p><b> 圖5-1-1</b></p><p><b>
42、; 圖5-1-2</b></p><p><b> 5.2刪除文件</b></p><p><b> 具體實現(xiàn)程序:</b></p><p> int Cuse::first_dele_file()</p><p><b> {</b></p>
43、<p> char temp[10];</p><p> cout<<"請輸入你要刪除的文件名:"<<endl;</p><p> cin>>temp;</p><p> UFD *f=Fhead;</p><p> UFD *above=0;</p>
44、<p> if(now!=0)</p><p> f=now->File_head;</p><p> while(f!=0)</p><p><b> { </b></p><p> if(!strcmp(f->name,temp))</p><p>&
45、lt;b> break;</b></p><p><b> above=f;</b></p><p> f=f->next;</p><p><b> }</b></p><p><b> if(f==0)</b></p><
46、;p><b> {</b></p><p> cout<<"此文件不存在!"<<endl;</p><p><b> return 0;</b></p><p><b> }</b></p><p> disk_emp
47、ty+=f->length;</p><p> if(now==0)</p><p><b> {</b></p><p> if(f==Fhead)</p><p> Fhead=Fhead->next;</p><p><b> else</b>&l
48、t;/p><p> above->next=f->next;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> DIR *d=now;</p&
49、gt;<p> while(d!=0)//修改刪除文件后各級目錄的大小</p><p><b> {</b></p><p> d->length-=f->length;</p><p> d=d->above;</p><p><b> }</b><
50、/p><p> if(f==now->File_head)//刪除文件結(jié)點(diǎn)</p><p> now->File_head=now->File_head->next;</p><p><b> else</b></p><p> above->next=f->next;</p
51、><p><b> }</b></p><p> length-=f->length;</p><p> this->dele_file(f);</p><p> cout<<"刪除成功"<<endl;</p><p><b>
52、 return 1;</b></p><p><b> }</b></p><p> int Cuse::dele_file(UFD *f)</p><p><b> {</b></p><p> int i=0,m;</p><p> for(i=0
53、;i<10&&i<f->length;i++)</p><p><b> { </b></p><p> m=f->a[i];</p><p> disk_block[m]=0;</p><p><b> }</b></p><
54、p> if(f->p1!=0)</p><p><b> {</b></p><p> for(i=10;i<110&&i<f->length;i++)</p><p><b> {</b></p><p> m=f->p1[i-10];
55、</p><p> disk_block[m]=0;</p><p><b> }</b></p><p> delete [](f->p1);</p><p><b> }</b></p><p> if(f->p2!=0)</p>&l
56、t;p><b> {</b></p><p> for(i=110;i<f->length;i++)</p><p><b> {</b></p><p> m=(f->p2)[(i-110)/100][(i-110)%100];</p><p> disk_blo
57、ck[m]=0;</p><p><b> }</b></p><p> delete [](f->p2);</p><p><b> delete f;</b></p><p><b> }</b></p><p><b>
58、f=0;</b></p><p><b> return 1;</b></p><p><b> }</b></p><p> 具體調(diào)試如圖5-2-1所示:</p><p><b> 圖5-2-1</b></p><p><b&
59、gt; 5.3查看文件塊號</b></p><p><b> 具體實現(xiàn)程序:</b></p><p> int Cuse::dis_file()</p><p><b> {</b></p><p><b> int i;</b></p>&
60、lt;p> char n[10];</p><p> UFD *f=Fhead;</p><p> if(now!=0)</p><p> f=now->File_head;</p><p> cout<<"請輸入你要查看的文件的名稱:"<<endl;</p>&
61、lt;p><b> cin>>n;</b></p><p> while(f!=0)</p><p><b> {</b></p><p> if(!strcmp(n,f->name))</p><p><b> break;</b></
62、p><p> f=f->next;</p><p><b> }</b></p><p><b> if(f==0)</b></p><p><b> {</b></p><p> cout<<"當(dāng)前目錄下沒有這個文件:
63、"<<endl;</p><p><b> return 0;</b></p><p><b> }</b></p><p> cout<<" 此文件占用硬盤塊號如下:"<<endl;</p><p> for(i=0;i&l
64、t;f->length&&i<10;i++)</p><p><b> {</b></p><p> cout<<setw(6)<<f->a[i];</p><p> if((i+1)%10==0)</p><p> cout<<endl;&l
65、t;/p><p><b> }</b></p><p> for(i=10;i<f->length&&i<110;i++)//顯示一級索引塊號</p><p><b> {</b></p><p> cout<<setw(6)<<f-&g
66、t;p1[i-10];</p><p> if((i+1)%10==0)</p><p> cout<<endl;</p><p><b> }</b></p><p> for(i=110;i<f->length;i++)//顯示二級索引塊號</p><p>&l
67、t;b> {</b></p><p> cout<<setw(6)<<f->p2[(i-110)/100][(i-110)%100];</p><p> if((i+1)%10==0)</p><p> cout<<endl;</p><p><b> }<
68、/b></p><p> cout<<endl;</p><p><b> return 1;</b></p><p><b> }</b></p><p> 具體調(diào)試如圖5-3-1所示:</p><p><b> 圖5-3-1</
69、b></p><p><b> 6.總結(jié)</b></p><p> 本次課程設(shè)計使知道了如何定義類來實現(xiàn)相應(yīng)的功能,運(yùn)用鏈表、指針等設(shè)計出了一個簡單實用的文件管理系統(tǒng)同時也使以前所學(xué)知識得到鞏固。操作系統(tǒng)是一門將硬件功能、程序設(shè)計語言、數(shù)據(jù)結(jié)構(gòu)、算法、計算機(jī)體系結(jié)構(gòu)、軟件工程等計算機(jī)知識緊密結(jié)合在一起的學(xué)科,它將對我今后的學(xué)習(xí)和工作產(chǎn)生巨大的幫助。</
70、p><p><b> 參考文獻(xiàn)</b></p><p> [1] 湯小丹. 計算機(jī)操作系統(tǒng)(第三版).西安:西安電子科技大學(xué)出版社,2007.5</p><p> [2] 譚浩強(qiáng). C++程序設(shè)計. 北京:清華大學(xué)出版社,2004</p><p><b> 附錄</b></p>&
71、lt;p><b> 課設(shè)全部程序:</b></p><p> #include "disk.h"</p><p> #include<string.h></p><p> #include<iostream.h></p><p> #include<iom
72、anip.h>//</p><p> int disk_block[10000];//</p><p> int disk_empty;</p><p> Cdisk::Cdisk()</p><p><b> {</b></p><p><b> int i=0;<
73、;/b></p><p> char code[10]="123456";</p><p> for(i=0;i<10000;i++)</p><p> disk_block[i]=0;</p><p> this->user[0].set_user("jun","1
74、23");</p><p> disk_empty=10000;</p><p> cout.setf(ios::left);</p><p><b> }</b></p><p> Cdisk::~Cdisk()</p><p><b> {</b>&l
75、t;/p><p><b> }</b></p><p> int Cdisk::dele_user(int i)</p><p><b> {</b></p><p><b> Cuse C;</b></p><p> C=user[i];<
76、/p><p> user[i].dele_user();</p><p><b> return 1;</b></p><p><b> }</b></p><p> int Cdisk::dis_disk()</p><p><b> {</b>
77、</p><p><b> int i=0;</b></p><p> cout<<setw(14)<<"用戶名"<<setw(14)<<"占用空間大小"<<endl;</p><p> for(i=0;i<5;i++)</p&
78、gt;<p> if(user[i].get_status()==1)</p><p> cout<<setw(14)<<user[i].get_name()<<setw(14)<<user[i].get_length()<<endl;</p><p> cout<<"已用空間:"
79、;<<10000-disk_empty<<endl<<"剩余空間 :"<<disk_empty<<endl;</p><p><b> return 1;</b></p><p><b> }</b></p><p> int Cdisk
80、::login()</p><p><b> {</b></p><p> char n[10],c[10];</p><p><b> int i;</b></p><p> cout<<"請輸入用戶名與密碼,中間用空格隔開"<<endl;<
81、;/p><p> cin>>n>>c;</p><p> for(i=0;i<5;i++)</p><p><b> {</b></p><p> if(user[i].get_status())</p><p> if(!strcmp(n,user[i].ge
82、t_name()))</p><p> if(!strcmp(c,user[i].get_code()))</p><p><b> {</b></p><p> cout<<"登陸成功!"<<endl;</p><p> cout<<"歡迎&qu
83、ot;<<user[i].get_name()<<"登陸"<<endl;</p><p><b> return i;</b></p><p><b> }</b></p><p><b> else</b></p><
84、p><b> {</b></p><p> cout<<"密碼錯誤:"<<endl;</p><p> return -1;</p><p><b> }</b></p><p><b> }</b></p>
85、;<p> cout<<"不存在用戶"<<endl;</p><p> return -1;</p><p><b> }</b></p><p> int Cdisk::set_code()</p><p><b> {</b>&
86、lt;/p><p> char temp1[10],temp2[10];</p><p> cout<<"請輸入密碼:"<<endl;</p><p> cin>>temp1;</p><p> if(strcmp(temp1,code))</p><p>&
87、lt;b> {</b></p><p> cout<<"密碼錯誤!"<<endl;</p><p><b> return 0;</b></p><p><b> }</b></p><p><b> while(1)
88、</b></p><p><b> {</b></p><p> cout<<"請輸入新密碼:"<<endl;</p><p> cin>>temp1;</p><p> cout<<"請再次輸入新密碼:"<
89、<endl;</p><p> cin>>temp2;</p><p> if(strcmp(temp1,temp2))</p><p><b> {</b></p><p> cout<<"密碼設(shè)置出錯!"<<endl;</p><
90、;p><b> break;</b></p><p><b> }</b></p><p> cout<<"密碼設(shè)置成功!"<<endl;</p><p> strcpy(code,temp1);</p><p><b> }&l
91、t;/b></p><p><b> return 1;</b></p><p><b> }</b></p><p> int Cdisk::new_user()</p><p><b> {</b></p><p> char n[1
92、0],c[10];</p><p><b> int i=0;</b></p><p> for(i=0;i<5;i++)</p><p> if(user[i].get_status()==0)</p><p><b> break;</b></p><p>
93、<b> if(i==5)</b></p><p><b> {</b></p><p> cout<<"用戶名額已滿,創(chuàng)建不成功!"<<endl;</p><p><b> return 0;</b></p><p><
94、;b> }</b></p><p> user[i].set_status(1);</p><p> cout<<"請輸入用戶名稱:"<<endl;</p><p><b> cin>>n;</b></p><p> cout<&l
95、t;"請輸入密碼:"<<endl;</p><p><b> cin>>c;</b></p><p> user[i].set_user(n,c);</p><p> cout<<"用戶創(chuàng)建成功!"<<endl;</p><p>
96、;<b> return 1;</b></p><p><b> }</b></p><p> int Cdisk::first_dele_user()</p><p><b> {</b></p><p> char n[10],c;</p><
97、p><b> int i;</b></p><p> cout<<"請輸入你要刪除的用戶的名稱:"<<endl;</p><p><b> cin>>n;</b></p><p> for(i=0;i<5;i++)</p><p
98、> if(!strcmp(user[i].get_name(),n)&&user[i].get_status())</p><p><b> break;</b></p><p><b> if(i==5)</b></p><p><b> {</b></p>
99、<p> cout<<"此用戶不存在!"<<endl;</p><p><b> return 0;</b></p><p><b> }</b></p><p> cout<<"確認(rèn)刪除此用戶?確認(rèn)請按Y,取消請按其它鍵"&
100、lt;<endl;</p><p><b> cin>>c;</b></p><p> if(c!='Y')</p><p><b> {</b></p><p> cout<<"已經(jīng)取消刪除!"<<endl;&l
101、t;/p><p><b> return 0;</b></p><p><b> }</b></p><p> this->dele_user(i);</p><p> cout<<"用戶刪除成功!"<<endl;</p><
102、p><b> return 1;</b></p><p><b> }</b></p><p> Cuse::Cuse()</p><p><b> {</b></p><p><b> status=0;</b></p>&
103、lt;p><b> length=0;</b></p><p><b> now=0;</b></p><p><b> Fhead=0;</b></p><p><b> Dhead=0;</b></p><p><b> }&
104、lt;/b></p><p> Cuse::~Cuse()</p><p><b> {</b></p><p> disk_empty+=length;</p><p><b> length=0;</b></p><p> UFD *f=Fhead;<
105、;/p><p> DIR *d=Dhead;</p><p> while(f!=0)</p><p><b> {</b></p><p> if(f->next==0)</p><p><b> {</b></p><p> this
106、->dele_file(f);</p><p><b> f=0;</b></p><p><b> break;</b></p><p><b> }</b></p><p> while(f->next->next!=0)</p>&
107、lt;p> f=f->next;</p><p> this->dele_file(f->next);</p><p> f->next=0;</p><p><b> f=Fhead;</b></p><p><b> }</b></p>&l
108、t;p> while(d!=0)</p><p><b> {</b></p><p> if(d->next==0)</p><p><b> {</b></p><p> this->dele_dir(d);</p><p><b>
109、 d=0;</b></p><p><b> break;</b></p><p><b> }</b></p><p> while(d->next->next!=0)</p><p> d=d->next;</p><p> th
110、is->dele_dir(d->next);</p><p> d->next=0;</p><p><b> d=Dhead;</b></p><p><b> }</b></p><p><b> }</b></p><p>
111、; int Cuse::new_file()</p><p><b> {</b></p><p> int i=0,j=0;</p><p><b> UFD *p=0;</b></p><p> p=new UFD;</p><p><b> if(
112、p==0)</b></p><p><b> {</b></p><p> cout<<"內(nèi)存空間已滿,創(chuàng)建文件失??!"<<endl;</p><p><b> return 1;</b></p><p><b> }<
113、/b></p><p> cout<<"請輸入建立的文件的名稱,長度,屬性(0:只讀,1:讀寫)"<<endl;</p><p> cin>>p->name>>p->length>>p->attribute;</p><p> if(p->length
114、>disk_empty)</p><p><b> {</b></p><p> cout<<"作業(yè)太大,當(dāng)前硬盤可用空間為:"<<disk_empty<<endl;</p><p><b> delete p;</b></p><p&
115、gt;<b> return 0;</b></p><p><b> }</b></p><p> for(i=0;i<p->length&&i<10;i++)</p><p> for(j;j<10000;j++)</p><p> if(disk
116、_block[j]==0)</p><p><b> {</b></p><p> p->a[i]=j;</p><p> disk_block[j]=1;</p><p><b> j++;</b></p><p><b> break;</
117、b></p><p><b> }</b></p><p><b> p->p1=0;</b></p><p><b> p->p2=0;</b></p><p> if(p->length>10)//一級索引的實現(xiàn)</p>
118、<p><b> {</b></p><p> p->p1=new int[100];</p><p> for(i=10;i<p->length&&i<110;i++)</p><p> for(j;j<10000;j++)</p><p> if(di
119、sk_block[j]==0)</p><p><b> {</b></p><p> ( p->p1)[i-10]=j;</p><p> disk_block[j]=1;</p><p><b> j++;</b></p><p><b> br
120、eak;</b></p><p><b> }</b></p><p> if(p->length>110)//二級索引的實現(xiàn)</p><p><b> {</b></p><p> p->p2=new int[100][100];</p><
121、;p> for(i=110;i<p->length;i++)</p><p> for(j;j<10000;j++)</p><p> if(disk_block[j]==0)</p><p><b> {</b></p><p> int m=(i-110)/100;</p>
122、;<p> int k=(i-110)%100;</p><p> p->p2[m][k]=j;</p><p> disk_block[j]=1;</p><p><b> j++;</b></p><p><b> break;</b></p><
123、;p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if(now==0)</p><p><b> {</b></p><p> p->n
124、ext=Fhead;</p><p><b> Fhead=p;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> p->
125、;next=now->File_head;</p><p> now->File_head=p;</p><p> DIR *h=now;</p><p> while(h!=0)</p><p><b> {</b></p><p> h->length+=p->
126、;length;</p><p> h=h->above;</p><p><b> }</b></p><p><b> }</b></p><p> cout<<"文件創(chuàng)建成功!"<<endl;</p><p>
127、 disk_empty=disk_empty-p->length;</p><p> length+=p->length;</p><p><b> return 1;</b></p><p><b> }</b></p><p> int Cuse::new_dir()<
128、/p><p><b> {</b></p><p> DIR *p,*h;</p><p> cout<<"請輸入新目錄的名稱:"<<endl;</p><p> p=new DIR; </p><p> cin>>p->name
129、;</p><p> p->Dir_head=0;</p><p> p->length=0;</p><p> p->File_head=0;</p><p> if(now==0)</p><p><b> h=Dhead;</b></p><p
130、><b> else</b></p><p> h=now->Dir_head;</p><p> while(h!=0)</p><p><b> {</b></p><p> if(!strcmp(h->name,p->name))</p><
131、;p><b> {</b></p><p> cout<<"此目錄已經(jīng)存在"<<endl;</p><p><b> return 0;</b></p><p><b> }</b></p><p> h=h->
132、next;</p><p><b> }</b></p><p> if(now==0)</p><p><b> {</b></p><p> p->above=0;</p><p> p->next=Dhead;</p><p&g
133、t;<b> Dhead=p;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> p->above=now;</p><p&
134、gt; p->next=now->Dir_head;</p><p> now->Dir_head=p;</p><p><b> }</b></p><p> cout<<"目錄創(chuàng)建成功!"<<endl;</p><p><b> ret
135、urn 1;</b></p><p><b> }</b></p><p> int Cuse::goback()</p><p><b> {</b></p><p> if(now==0)</p><p><b> {</b>&
136、lt;/p><p> cout<<"主目錄,不能再次向上"<<endl;</p><p><b> return 0;</b></p><p><b> }</b></p><p> now=now->above;</p><
137、p><b> return 1;</b></p><p><b> }</b></p><p> int Cuse::open_dir()</p><p><b> {</b></p><p> char name[10];</p><p&g
138、t;<b> DIR *p;</b></p><p> if(now==0)</p><p><b> p=Dhead;</b></p><p><b> else</b></p><p> p=now->Dir_head;</p><p&g
139、t; cout<<"請輸入你要打開的目錄名稱:"<<endl;</p><p> cin>>name;</p><p> int flag=0;</p><p> while(p!=0)</p><p><b> {</b></p><
140、p> if(strcmp(p->name,name)==0)</p><p><b> {</b></p><p><b> now=p;</b></p><p><b> return 1;</b></p><p><b> }</b&g
141、t;</p><p> p=p->next;</p><p><b> }</b></p><p> cout<<"當(dāng)前目錄中不存在該目錄"<<endl;</p><p><b> return 0;</b></p><p
142、><b> }</b></p><p> int Cuse::first_dele_file()</p><p><b> {</b></p><p> char temp[10];</p><p> cout<<"請輸入你要刪除的文件名:"<&
143、lt;endl;</p><p> cin>>temp;</p><p> UFD *f=Fhead;</p><p> UFD *above=0;</p><p> if(now!=0)</p><p> f=now->File_head;</p><p> wh
144、ile(f!=0)</p><p><b> { </b></p><p> if(!strcmp(f->name,temp))</p><p><b> break;</b></p><p><b> above=f;</b></p><
145、;p> f=f->next;</p><p><b> }</b></p><p><b> if(f==0)</b></p><p><b> {</b></p><p> cout<<"此文件不存在!"<<e
146、ndl;</p><p><b> return 0;</b></p><p><b> }</b></p><p> disk_empty+=f->length;</p><p> if(now==0)</p><p><b> {</b&g
147、t;</p><p> if(f==Fhead)</p><p> Fhead=Fhead->next;</p><p><b> else</b></p><p> above->next=f->next;</p><p><b> }</b>&
148、lt;/p><p><b> else</b></p><p><b> {</b></p><p> DIR *d=now;</p><p> while(d!=0)//修改刪除文件后各級目錄的大小</p><p><b> {</b></
149、p><p> d->length-=f->length;</p><p> d=d->above;</p><p><b> }</b></p><p> if(f==now->File_head)//刪除文件結(jié)點(diǎn)</p><p> now->File_head
150、=now->File_head->next;</p><p><b> else</b></p><p> above->next=f->next;</p><p><b> }</b></p><p> length-=f->length;</p>
151、<p> this->dele_file(f);</p><p> cout<<"刪除成功"<<endl;</p><p><b> return 1;</b></p><p><b> }</b></p><p> int
152、Cuse::dele_file(UFD *f)</p><p><b> {</b></p><p> int i=0,m;</p><p> for(i=0;i<10&&i<f->length;i++)</p><p><b> { </b></
153、p><p> m=f->a[i];</p><p> disk_block[m]=0;</p><p><b> }</b></p><p> if(f->p1!=0)</p><p><b> {</b></p><p> for
154、(i=10;i<110&&i<f->length;i++)</p><p><b> {</b></p><p> m=f->p1[i-10];</p><p> disk_block[m]=0;</p><p><b> }</b></p>
155、;<p> delete [](f->p1);</p><p><b> }</b></p><p> if(f->p2!=0)</p><p><b> {</b></p><p> for(i=110;i<f->length;i++)</p&
156、gt;<p><b> {</b></p><p> m=(f->p2)[(i-110)/100][(i-110)%100];</p><p> disk_block[m]=0;</p><p><b> }</b></p><p> delete [](f->p
157、2);</p><p><b> delete f;</b></p><p><b> }</b></p><p><b> f=0;</b></p><p><b> return 1;</b></p><p><b
158、> }</b></p><p> int Cuse::first_dele_dir()</p><p><b> {</b></p><p> char n[10];</p><p><b> char c;</b></p><p> DIR *
159、p,*above=0;</p><p><b> p=Dhead;</b></p><p> if(now!=0)</p><p> p=now->Dir_head;</p><p> cout<<"請輸入你要刪除的目錄的名稱:"<<endl;
160、 </p><p><b> cin>>n;</b></p><p> while(p!=0)</p><p><b> {</b></p><p> if(!strcmp(p->name,n))</p><p><b> break;&
161、lt;/b></p><p><b> above=p;</b></p><p> p=p->next;</p><p><b> }</b></p><p><b> if(p==0)</b></p><p><b>
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計---模擬文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計-模擬文件系統(tǒng)
- 《操作系統(tǒng)》課程設(shè)計-- 模擬文件管理系統(tǒng)
- 《操作系統(tǒng)》課程設(shè)計--模擬文件管理系統(tǒng)
- 操作系統(tǒng)課程設(shè)計報告--虛擬文件系統(tǒng)的實現(xiàn)
- 操作系統(tǒng)課程設(shè)計---文件系統(tǒng)的模擬
- 操作系統(tǒng)課程設(shè)計--基于linux的模擬文件系統(tǒng)的設(shè)計與實現(xiàn)
- 操作系統(tǒng)課程設(shè)計--樹形目錄文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計報告--多級文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計報告--多級文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計報告--多級文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計報告--多級文件系統(tǒng).doc
- 操作系統(tǒng)課程設(shè)計二級文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計簡單文件系統(tǒng)的實現(xiàn)
- 操作系統(tǒng)課程設(shè)計二級文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(文件系統(tǒng)管理)
- 操作系統(tǒng)課程設(shè)計--簡單文件系統(tǒng)的實現(xiàn)
- 操作系統(tǒng)課程設(shè)計----二級文件系統(tǒng)
- 操作系統(tǒng)文件系統(tǒng)的設(shè)計與實現(xiàn)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計--二級文件系統(tǒng)設(shè)計
評論
0/150
提交評論