版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 操作系統(tǒng)原理</b></p><p><b> 課程設(shè)計報告</b></p><p> 題目: 采用二級目錄實現(xiàn)文件管理 </p><p> 所在學(xué)院: </p><p> 班 級: </p>&
2、lt;p> 學(xué) 號: </p><p> 姓 名: </p><p> 指導(dǎo)教師: </p><p> 2013年1月15日 </p><p><b> 目 錄</b></p><
3、p> 課程設(shè)計目的………………………………………………1</p><p> 二、課題內(nèi)容 ………………………………………………1</p><p> 三、總體路線 ………………………………………………1</p><p> 四、概要設(shè)計 ………………………………………………2</p><p> 1.數(shù)據(jù)結(jié)構(gòu)
4、 ………………………………………………2</p><p> 2.所使用函數(shù)及其功能 ……………………………………3</p><p> 五、詳細設(shè)計 ………………………………………………4</p><p> 1.主函數(shù)流程圖 …………………………………………4</p><p> 2.創(chuàng)建文件函數(shù)流程圖 …
5、…………………………………5</p><p> 3.刪除文件函數(shù)流程圖 ……………………………………7</p><p> 4.分解命令函數(shù)流程圖 ……………………………………10</p><p> 六、測試、修改及運行結(jié)果 ………………………………10</p><p> 七、結(jié)束語 ………………………………………
6、………13</p><p> 八、參考文獻 ………………………………………………14</p><p><b> 課程設(shè)計目的</b></p><p> 文件系統(tǒng)是現(xiàn)代OS用來存儲和管理信息機構(gòu),具有按名存取的功能,不僅能方便用戶對信息的使用,也有效提高了信息的安全性。本課題模擬文件系統(tǒng)的目錄結(jié)構(gòu),并在此基礎(chǔ)上實現(xiàn)文件的各種操作方法。
7、</p><p> 通過本課題,深入理解文件文件目錄的作用和功能,掌握文件打開結(jié)構(gòu),熟悉與文件有關(guān)的系統(tǒng)調(diào)用,從而更好地掌握文件系統(tǒng)概念。</p><p><b> 課題內(nèi)容</b></p><p> 1.文件目錄采用二級目錄結(jié)構(gòu),第一級為主文件目錄master_file_directory;第二級為用戶文件目錄user_file_dir
8、ectory。</p><p> 圖1 master_file_directory 結(jié)構(gòu)</p><p> 圖2 user_file_directory 結(jié)構(gòu)</p><p> 2.為加速文件存取,為每個用戶建立一張用戶打開表fileTable,用以記錄該用戶當(dāng)前正在使用的文件。</p><p> 圖3 fileTable 結(jié)構(gòu)
9、</p><p> 3.為該系統(tǒng)提供6條操作命令:創(chuàng)建、打開、讀、寫、關(guān)閉、刪除等。</p><p> 4.在該模擬系統(tǒng)中,應(yīng)先建立主文件目錄、用戶目錄和用戶打開文件表,然后接受合法用戶,給出一個菜單,按用戶選擇執(zhí)行相關(guān)操作。</p><p><b> 總體路線</b></p><p> 1.在內(nèi)存中開辟一個虛擬
10、磁盤空間作為文件存儲器,在其上實現(xiàn)一個簡單的單用戶文件系統(tǒng)。在退出這個簡單的文件系統(tǒng)時,應(yīng)將該虛擬文件系統(tǒng)保存到磁盤上,以便下次可以再將它恢復(fù)到內(nèi)存的虛擬磁盤空間中。 </p><p> 2.文件存儲空間的分配采用顯式鏈接分配。為了實現(xiàn)創(chuàng)建和刪除文件必須要有一棵初始的文件樹存在,以便在文件樹的根節(jié)點下實現(xiàn)創(chuàng)建和刪除文件。</p><p> 3.文件目錄結(jié)構(gòu)采用二級目錄結(jié)構(gòu)。為了簡單起見
11、,可以使用文件結(jié)構(gòu)體,結(jié)構(gòu)體內(nèi)容包括:文件名,文件目錄識別標示,文件鏈接數(shù),以及他的左孩子右孩子左兄弟右兄弟指</p><p> 4.要有分解函數(shù)對輸入的命令進行分解。以識別那部分是哪部分是命令,哪部分是路徑和文件名。</p><p> 5.最后要有執(zhí)行函數(shù)。來執(zhí)行輸入的創(chuàng)建文件命令。</p><p><b> 四、概要設(shè)計</b><
12、;/p><p><b> 數(shù)據(jù)結(jié)構(gòu)</b></p><p> (1)函數(shù)中的主要結(jié)構(gòu)體</p><p><b> //兩級目錄結(jié)構(gòu)體</b></p><p> typedef struct master_file_directory //主文件目錄MFD</p>
13、<p><b> {</b></p><p> char userName[10];</p><p> char password[10];</p><p> UFD *user;</p><p><b> }MFD;</b></p><p> MFD
14、 userTable[MaxUser];</p><p> int used=0; //定義MFD目錄中用已有的用戶數(shù)</p><p> typedef struct user_file_directory //用戶文件目錄文件UFD</p><p><b> {</b
15、></p><p> //char fileName[10];</p><p> fileTable *file;</p><p> user_file_directory *next;</p><p><b> }UFD;</b></p><p> //UFD *headFile
16、;</p><p> typedef struct fileTable //文件塊結(jié)構(gòu)體</p><p><b> {</b></p><p> char fileName[10];</p><p> int strat; /
17、/文件在磁盤存儲空間的起始地址</p><p> int length; //文件內(nèi)容長度</p><p> int maxlength; //文件的最大長度</p><p> char fileKind[3]; //文件的屬性——讀寫方
18、式</p><p> struct tm *timeinfo;</p><p> bool openFlag; //判斷是否有進程打開了該文件</p><p> //fileTable *next;</p><p><b> };</b></p><p>
19、; ?。?)結(jié)構(gòu)體相互之間的調(diào)用關(guān)系圖:</p><p><b> 圖4 結(jié)構(gòu)體關(guān)系圖</b></p><p><b> 模塊結(jié)構(gòu)</b></p><p> ?。?)所用函數(shù)及其功能: </p><p> void Init()
20、;//初始化文件樹</p><p> int ParseCommand();//接受輸入的命令并把其分解成操作名和路徑文件名</p><p> void ExecuteCommand();//執(zhí)行命令,分別執(zhí)行edit,del,dir,exit命令</p><p> int editComd();//處理edit命令,即創(chuàng)建文件,只要創(chuàng)建表示文件的節(jié)點即可,內(nèi)
21、容及大小不考慮</p><p> int delComd();//處理del命令,即刪除指定文件,不存在是給出錯誤信息</p><p> int dirComd();//處理dir命令。問了能顯示的看出創(chuàng)建文件和刪除文件是否成功,把根目錄的文件都顯示出來</p><p> int FindFilename(char Para2[]);//查找文件名</p
22、><p> struct FileNode* CreateFileNode(char filename[],int isdir,int i_nlink);//創(chuàng)建結(jié)點</p><p> int GetInput(char* buffer,unsigned int buffer_len);//獲取輸入 </p><p><b> ?。?)所使用變量<
23、/b></p><p> struct FileNode *cp, *tp, *root;// *cp, *tp, *root是根目錄節(jié)點</p><p> char path[INPUT_LEN-COMMAND_LEN];//記錄當(dāng)前走過的路徑</p><p> char Para1[COMMAND_LEN],Para2[INPUT_LEN-COMMA
24、ND_LEN];//para1數(shù)組存儲輸入的命令,para2數(shù)組存儲輸入的文件名</p><p> char filename[FILENAME_LEN],tmp;</p><p> unsigned int i,j; </p><p><b> 五、詳細設(shè)計</b></p><p><b> 主函數(shù)流
25、程圖</b></p><p> 圖5 主函數(shù)流程圖</p><p><b> 創(chuàng)建文件函數(shù)流程圖</b></p><p> 圖6 創(chuàng)建文件函數(shù)流程圖</p><p> 具體函數(shù)實現(xiàn)過程如下:</p><p> int editComd()</p><p
26、><b> { </b></p><p> //char tmp;</p><p> struct FileNode * temp=CreateFileNode("",0,0);</p><p><b> int sign;</b></p><p> struct
27、 FileNode *tp;</p><p><b> //路徑不能為空</b></p><p> if(strlen(Para2)==0)</p><p><b> {</b></p><p> printf("\n命令格式有錯誤.\n");</p>&l
28、t;p><b> return 0;</b></p><p><b> }</b></p><p><b> //長度檢查</b></p><p> if(strlen(Para2)>50)</p><p><b> {</b><
29、;/p><p> printf("\n文件名過長\n");</p><p><b> return 0;</b></p><p><b> }</b></p><p><b> //格式檢查</b></p><p> if (!
30、(isalpha(Para2[0])||Para2[0]=='_'||Para2[0]=='\0'||Para2[0]=='/'))</p><p><b> {</b></p><p> printf("文件名格式有錯!\n");/* 文件首字母可以為'字母'或'數(shù)字
31、39;或'_'或'/'或'回車'*/</p><p><b> return 0;</b></p><p><b> }</b></p><p><b> //獲取文件名</b></p><p> sign=FindFil
32、ename(Para2);</p><p> if(sign==0)</p><p><b> return 0;</b></p><p> if(cp->isdir!=1)//如當(dāng)前指針指向的是文件,則報錯</p><p><b> {</b></p><p>
33、; printf("you cannot edit a file in under a file!\n");</p><p><b> return 0;</b></p><p><b> }</b></p><p> //創(chuàng)建文件結(jié)點,并插入到指定目錄下</p><p>
34、; tp=CreateFileNode("",1,0);</p><p> strcpy(tp->filename,filename);</p><p> tp->isdir=0;</p><p> tp->i_nlink=0;</p><p> if(cp->child==NULL)&l
35、t;/p><p> {tp->parent=cp;</p><p> tp->child=NULL;</p><p> cp->child=tp;</p><p> tp->sibling_prev=NULL;</p><p> tp->sibling_next=NULL;<
36、/p><p><b> }</b></p><p><b> else</b></p><p> {temp=cp;</p><p> //用temp找到新結(jié)點插入處</p><p> temp=temp->child;</p><p>
37、 while(temp->sibling_next )//find the last sibing node</p><p><b> {</b></p><p> temp=temp->sibling_next;</p><p> if(strcmp(temp->filename,filename)==0&&
38、amp;temp->isdir==0)</p><p><b> {</b></p><p> printf("此文件名已存在\n");//重名報錯</p><p><b> return 0;</b></p><p><b> }</b>&l
39、t;/p><p> }//找到了最后一個結(jié)點</p><p> temp->sibling_next=tp;</p><p> tp->parent=NULL;</p><p> tp->child=NULL;</p><p> tp->sibling_prev=temp;</p&g
40、t;<p> tp->sibling_next=NULL;</p><p><b> }</b></p><p><b> return 1;</b></p><p><b> }</b></p><p><b> 刪除文件函數(shù)流程圖&l
41、t;/b></p><p> 圖7 刪除函數(shù)流程圖</p><p> 具體函數(shù)實現(xiàn)過程如下:</p><p> int delComd()</p><p><b> { </b></p><p> //char tmp;</p><p><b>
42、; int sign;</b></p><p> struct FileNode *temp;</p><p><b> //參數(shù)不能為空</b></p><p> if(strlen(Para2)==0)</p><p><b> {</b></p><p
43、> printf("\n命令格式有錯誤.\n");</p><p><b> return 0;</b></p><p><b> }</b></p><p><b> //獲取文件名</b></p><p> sign=FindFilena
44、me(Para2);</p><p> if(sign==0) return 0;</p><p> //用temp指向要刪除的結(jié)點</p><p> if(cp->child) </p><p><b> {</b></p><p> temp=cp->child;<
45、/p><p> while(temp->sibling_next && (strcmp(temp->filename,filename)!=0 || temp->isdir!=0))</p><p> temp=temp->sibling_next;</p><p> if(strcmp(temp->filename,
46、filename)!=0)</p><p><b> {</b></p><p> printf("不存在該文件!\n");</p><p><b> return 0;</b></p><p><b> }</b></p><p
47、><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> printf("不存在該文件!\n");</p><p><b> return 0;</b>&
48、lt;/p><p><b> }</b></p><p> //要刪除的不能是目錄</p><p> if(temp->isdir!=0)</p><p><b> {</b></p><p> printf("ERROR!該命令只能刪除文件,不可刪除目
49、錄!\n");</p><p><b> return 0;</b></p><p><b> }</b></p><p> //如仍有用戶使用該文件,則不能刪除</p><p> if(temp->i_nlink!=0)</p><p><b&
50、gt; {</b></p><p> printf("還有用戶共享了該文件,不能刪除!\n");</p><p><b> return 0;</b></p><p><b> }</b></p><p><b> //刪除工作</b>
51、</p><p> if(temp->parent==NULL)//不是第一個孩子</p><p><b> {</b></p><p> temp->sibling_prev->sibling_next=temp->sibling_next;</p><p> if(temp->s
52、ibling_next)//處理是最后一個兄弟的情況</p><p> temp->sibling_next->sibling_prev=temp->sibling_prev;</p><p> temp->sibling_prev=temp->sibling_next=NULL;</p><p><b> }//if&
53、lt;/b></p><p> else//第一個孩子</p><p><b> { </b></p><p> if(temp->sibling_next)//處理是最后一個兄弟的情況</p><p> temp->sibling_next->parent=temp->parent
54、;</p><p> temp->parent->child=temp->sibling_next;</p><p><b> }//else</b></p><p> free(temp);</p><p><b> return 1;</b></p>&
55、lt;p><b> }</b></p><p><b> 分解命令函數(shù)流程圖</b></p><p> 圖8 分解命令函數(shù)流程圖</p><p> 六、測試修改及運行結(jié)果</p><p> 1.實際運行結(jié)果:初始界面</p><p> 2.鍵入用戶名和密碼創(chuàng)
56、建賬號</p><p><b> 登陸</b></p><p><b> 文件操作</b></p><p><b> ?。?)創(chuàng)建文件</b></p><p><b> (2)寫文件</b></p><p><b>
57、 ?。?)讀文件</b></p><p><b> ?。?)顯示文件</b></p><p><b> (5)關(guān)閉文件</b></p><p><b> ?。?)刪除文件</b></p><p><b> 七、結(jié)束語</b></p&g
58、t;<p> 雖然我們做過很多次課程設(shè)計了,但是感覺自己還有好多需要學(xué)習(xí)的地方,接到題目要求時,設(shè)計大體的框架,考慮好所使用的數(shù)據(jù)結(jié)構(gòu),然后用高級編程語言分模塊的把架子的思路編寫出來,調(diào)試,運行,再看看是不是符合題目的要求,上網(wǎng)找些資料,看看想想是不是要提高要求,才可以滿足實際的需要,最后把收集的勞動成果組合起來,一個小程序終于成型了,雖然每次的過程差不多都一樣,但是每次都會有不同的體會。 在這中間,敲代碼,調(diào)試程序的過
59、程比較枯燥,每次思考一個問題很久不能解決的時候,真的很想放棄它,試著找客觀的原因,幸好,我的周圍有學(xué)習(xí)好的同學(xué),他們不僅幫我解答了我遇到的一些當(dāng)時困擾著我的問題,還給了我很多鼓勵,交流了一下做程序的思想,方法,跟我談毅力,決心,還有什么是進步,這些是平時聽老師講課所學(xué)不到的,我收獲不少。 通過本次的課程設(shè)計,使我能夠正確運用操作系統(tǒng)課程中所學(xué)的基本理論和知識,加深了對文件系統(tǒng)基本概念的理解,以及磁盤文件系統(tǒng)的文件操作。還有讓我感受挺深的
60、是對軟件工程方法的應(yīng)用。設(shè)計一個軟件,先要做好需求分析,這一點很重要,如果沒有分析好需求,到軟件設(shè)計的最后,發(fā)現(xiàn)所做的功能不符合要求,那么一切都得重做</p><p> 另外在運用C語言的時候,感覺有點生疏,在組織語言時時而出錯,在編程和調(diào)試的過程中,經(jīng)常會出現(xiàn)意想不到的問題,并非每個問題都可以從相關(guān)資料中找到解決方法,有些問題是無法預(yù)料到的,這就需要通過自己理性的分析得出問題的解決方案。 </p>
61、;<p> 通過一周的努力,這次課程設(shè)計又要接近尾聲了。雖然課設(shè)當(dāng)中遇到很多問題,但是最終問題基本都一一解決了。通過這次課程設(shè)計的制作,加深了自己對</p><p> 文件管理系統(tǒng)的了解與認識。我相信,只要不斷的嚴格要求自己,注意培養(yǎng)自己的思維能力,就一定會有更大更輝煌的發(fā)展和提高。</p><p><b> 八、參考文獻</b></p>
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計二級文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計----二級文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計二級文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計--二級文件系統(tǒng)設(shè)計
- 操作系統(tǒng)課程設(shè)計--簡單二級文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計--二級文件系統(tǒng)(java)
- 操作系統(tǒng)課程設(shè)計linux二級文件系統(tǒng)設(shè)計
- 操作系統(tǒng)課程設(shè)計報告--linux二級文件系統(tǒng)設(shè)計
- 《操作系統(tǒng)課程設(shè)計-模擬一個簡單二級文件管理系統(tǒng)》
- 操作系統(tǒng)課程設(shè)計--文件管理系統(tǒng)
- 操作系統(tǒng)課程設(shè)計---操作系統(tǒng)之文件管理部分的設(shè)計與實現(xiàn)
- 操作系統(tǒng)課程設(shè)計--樹形目錄文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計---文件管理系統(tǒng)設(shè)計
- 操作系統(tǒng)課程設(shè)計報告----文件管理系統(tǒng)
- 操作系統(tǒng)課程設(shè)計--多用戶多級目錄文件系統(tǒng)實現(xiàn)
- 操作系統(tǒng)課程設(shè)計---磁盤文件操作
- 《操作系統(tǒng)》課程設(shè)計-- 模擬文件管理系統(tǒng)
- 《操作系統(tǒng)》課程設(shè)計--模擬文件管理系統(tǒng)
- 操作系統(tǒng)課程設(shè)計---多用戶多級目錄文件系統(tǒng)的實現(xiàn)
- 操作系統(tǒng)課程設(shè)計---多用戶多級目錄文件系統(tǒng)的實現(xiàn)
評論
0/150
提交評論