版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
武漢工程大學(xué)
計(jì)算機(jī)科學(xué)與工程學(xué)院綜合設(shè)計(jì)報(bào)告操作系統(tǒng)綜合設(shè)計(jì):擬文件系統(tǒng)的實(shí)現(xiàn)設(shè)計(jì)名稱:操作系統(tǒng)綜合設(shè)計(jì):擬文件系統(tǒng)的實(shí)現(xiàn)設(shè)計(jì)題目:學(xué)生學(xué)號:專業(yè)班級:計(jì)工02學(xué)生姓名:學(xué)生成績:指導(dǎo)教師(職稱):蔡瓊(副教授)課題工作時(shí)間:12年2月13日至12年2月24日說明:1、報(bào)告中的第一、二、三項(xiàng)由指導(dǎo)教師在綜合設(shè)計(jì)開始前填寫并發(fā)給每個(gè)學(xué)生;四、五兩項(xiàng)(中英文摘要)由學(xué)生在完成綜合設(shè)計(jì)后填寫。2、學(xué)生成績由指導(dǎo)教師根據(jù)學(xué)生的設(shè)計(jì)情況給出各項(xiàng)分值及總評成績。3、指導(dǎo)教師評語一欄由指導(dǎo)教師就學(xué)生在整個(gè)設(shè)計(jì)期間的平時(shí)表現(xiàn)、設(shè)計(jì)完成情況、報(bào)告的質(zhì)量及答辯情況,給出客觀、全面的評價(jià)。4、所有學(xué)生必須參加綜合設(shè)計(jì)的答辯環(huán)節(jié),凡不參加答辯者,其成績一律按不及格處理。答辯小組成員應(yīng)由2人及以上教師組成。5、報(bào)告正文字?jǐn)?shù)一般應(yīng)不少于5000字,也可由指導(dǎo)教師根據(jù)本門綜合設(shè)計(jì)的情況另行規(guī)定。6、平時(shí)表現(xiàn)成績低于6分的學(xué)生,其綜合設(shè)計(jì)成績按不及格處理。7、此表格式為武漢工程大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院提供的基本格式(適用于學(xué)院各類綜合設(shè)計(jì)),各教研室可根據(jù)本門綜合設(shè)計(jì)的特點(diǎn)及內(nèi)容做適當(dāng)?shù)恼{(diào)整,并上報(bào)學(xué)院批準(zhǔn)。
成績評定表學(xué)生姓名:學(xué)號:班級:09計(jì)算機(jī)2班類別合計(jì)分值各項(xiàng)分值評分標(biāo)準(zhǔn)實(shí)際得分合計(jì)得分備注平時(shí)表現(xiàn)1010按時(shí)參加綜合設(shè)計(jì),無曠課、遲到、早退、違反實(shí)驗(yàn)室紀(jì)律等情況。完成情況3020按設(shè)計(jì)任務(wù)書的要求完成了全部任務(wù),能完整演示其設(shè)計(jì)內(nèi)容,符合要求。10能對其設(shè)計(jì)內(nèi)容進(jìn)行詳細(xì)、完整的介紹,并能就指導(dǎo)教師提出的問題進(jìn)行正確的回答。報(bào)告質(zhì)量3510報(bào)告文字通順,內(nèi)容翔實(shí),論述充分、完整,立論正確,結(jié)構(gòu)嚴(yán)謹(jǐn)合理;報(bào)告字?jǐn)?shù)符合相關(guān)要求,工整規(guī)范,整齊劃一。5課題背景介紹清楚,綜述分析充分。5設(shè)計(jì)方案合理、可行,論證嚴(yán)謹(jǐn),邏輯性強(qiáng),具有說服力。5符號統(tǒng)一;圖表完備、符合規(guī)范要求。5能對整個(gè)設(shè)計(jì)過程進(jìn)行全面的總結(jié),得出有價(jià)值的結(jié)論或結(jié)果。5參考文獻(xiàn)數(shù)量在3篇以上,格式符合要求,在正文中正確引用。答辯情況2510在規(guī)定時(shí)間內(nèi)能就所設(shè)計(jì)的內(nèi)容進(jìn)行闡述,言簡意明,重點(diǎn)突出,論點(diǎn)正確,條理清晰。15在規(guī)定時(shí)間內(nèi)能準(zhǔn)確、完整、流利地回答教師所提出的問題。總評成績:分補(bǔ)充說明:指導(dǎo)教師:蔡瓊(簽字)日期:2012年2月24日
答辯記錄表學(xué)生姓名:學(xué)號:—班級:09計(jì)算機(jī)2班答辯地點(diǎn):L403號機(jī)房答辯內(nèi)容記錄:答辯成績合計(jì)分值各項(xiàng)分值評分標(biāo)準(zhǔn)實(shí)際得分合計(jì)得分備注2510在規(guī)定時(shí)間內(nèi)能就所設(shè)計(jì)的內(nèi)容進(jìn)行闡述,言簡意明,重點(diǎn)突出,論點(diǎn)正確,條理清晰。15在規(guī)定時(shí)間內(nèi)能準(zhǔn)確、完整、流利地回答教師所提出的問題。答辯小組成員(簽字):2012年2月24日
指導(dǎo)教師評語一、綜合設(shè)計(jì)目的、條件、任務(wù)和內(nèi)容要求:《操作系統(tǒng)》在計(jì)算機(jī)科學(xué)中是一門核心專業(yè)基礎(chǔ)課,涉及較多硬件和軟件知識。在計(jì)算機(jī)軟、硬件課程的設(shè)置上,它起著承上啟下的作用。其特點(diǎn)是概念多、較抽象、涉及的知識面廣?!恫僮飨到y(tǒng)綜合設(shè)計(jì)》是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)學(xué)生的一門實(shí)踐課程,是學(xué)習(xí)完操作系統(tǒng)課程后的課程設(shè)計(jì),本課程的教學(xué)目的是,通過學(xué)習(xí),使學(xué)生了解計(jì)算機(jī)操作系統(tǒng)的發(fā)展特點(diǎn);理解操作系統(tǒng)的基本概念、組成和各部分的功能;掌握計(jì)算機(jī)操作系統(tǒng)設(shè)計(jì)的基本原理和方法;理解常見操作系統(tǒng)的結(jié)構(gòu)原理并能熟練使用?!短摂M文件系統(tǒng)的實(shí)現(xiàn)》課題,要求學(xué)生了解文件類型及文件系統(tǒng)模型,理解文件的邏輯結(jié)構(gòu)類型及特點(diǎn),理解文件外存的分配方式,掌握文件的目錄管理及存儲空間管理,理解文件的安全性和數(shù)據(jù)一致性。培養(yǎng)學(xué)生的抽象思維能力、邏輯推理能力和形式化思維方法,增強(qiáng)分析問題和解決問題的能力。設(shè)計(jì)任務(wù)和內(nèi)容要求:在Windows或者Linux下設(shè)計(jì)一個(gè)二級(或者樹型)結(jié)構(gòu)文件系統(tǒng),要求至少實(shí)現(xiàn)以下功能:login用戶登錄、dir列出文件目錄、create創(chuàng)建文件、del刪除文件、open打開文件、close關(guān)閉文件、read讀文件、write寫文件、cd進(jìn)入子目錄、rd刪除子目錄、md創(chuàng)建子目錄等。設(shè)計(jì)提示:實(shí)現(xiàn)虛擬文件系統(tǒng)的一般思路是調(diào)用系統(tǒng)的文件創(chuàng)建(如c中的fopen函數(shù)的w方式即可)一個(gè)新文件,將此文件作為虛擬磁盤,在完成本設(shè)計(jì)要求的內(nèi)容時(shí),要求所生成的文件目錄以及文件等內(nèi)容都是存儲在此磁盤中。指導(dǎo)教師簽字:蔡瓊2012年1月8日二、進(jìn)度安排:第1周(2.13-2.14):學(xué)生熟悉課題的任務(wù)和要求,查閱相關(guān)文獻(xiàn)和資料,并做好編碼準(zhǔn)備第1周(2.15-2.17):程序編碼、調(diào)試第2周(2.20-2.22):程序編碼、調(diào)試和測試,書寫報(bào)告第2周(2.23-2.24):答辯、檢查、驗(yàn)收、遞交設(shè)計(jì)報(bào)告三、應(yīng)收集資料及主要參考文獻(xiàn):應(yīng)收集的資料:面向?qū)ο蟪绦蛟O(shè)計(jì)思想和方法高級程序設(shè)計(jì)語言參考手冊操作系統(tǒng)、軟件工程方面參考書籍主要參考文獻(xiàn):李小林,張俊.程序設(shè)計(jì)基礎(chǔ)[Z].北京:中國鐵道出版社,2008.湯小丹等.計(jì)算機(jī)操作系統(tǒng)[Z].西安:西安電子科技大學(xué)出版社,2007.嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)[Z].北京:清華大學(xué)出版社,2007.四、綜合設(shè)計(jì)摘要:操作系統(tǒng)在計(jì)算機(jī)科學(xué)中是一門核心專業(yè)基礎(chǔ)課,涉及較多硬件和軟件知識。在計(jì)算機(jī)軟、硬件課程的設(shè)置上,它起著承上啟下的作用。其特點(diǎn)是概念多、較抽象、涉及的知識面廣。操作系統(tǒng)綜合設(shè)計(jì)是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)學(xué)生的一門實(shí)踐課程,是學(xué)習(xí)完操作系統(tǒng)課程后的課程設(shè)計(jì),本課程的教學(xué)目的是,通過學(xué)習(xí),使學(xué)生了解計(jì)算機(jī)操作系統(tǒng)的發(fā)展特點(diǎn);理解操作系統(tǒng)的基本概念、組成和各部分的功能;掌握計(jì)算機(jī)操作系統(tǒng)設(shè)計(jì)的基本原理和方法;理解常見操作系統(tǒng)的結(jié)構(gòu)原理并能熟練使用。本此課程設(shè)計(jì)的課題是設(shè)計(jì)一二級結(jié)構(gòu)文件系統(tǒng),要求學(xué)生了解文件類型及文件系統(tǒng)模型,理解文件的邏輯結(jié)構(gòu)類型及特點(diǎn),理解文件外存的分配方式,掌握文件的目錄管理及存儲空間管理,理解文件的安全性和數(shù)據(jù)一致性。培養(yǎng)學(xué)生的抽象思維能力、邏輯推理能力和形式化思維方法,增強(qiáng)分析問題和解決問題的能力。關(guān)鍵詞:操作系統(tǒng);虛擬文件;二級結(jié)構(gòu)五、綜合設(shè)計(jì)Abstract:Theoperatingsystemincomputerscienceisacorefundamentalcourse,involvesmorehardwareandsoftwareknowledge.Incomputersoftwareandhardwareofthecoursesetting,itplaystheroleofthelink.Itscharacteristicismore,moreabstractconcept,involvingawiderrangeofknowledge.Theoperatingsystemisintegrateddesignofcomputerscienceandtechnologymajorstudentsapracticalcourses,isafterstudyingtheoperatingsystemofthecoursedesigncurriculum,theteachingpurposeofthiscourseis,throughthestudy,makestudentsunderstandthedevelopmentofthecomputeroperatingsystemcharacteristics;Understandingthebasicconceptoftheoperatingsystem,compositionandthefunctionsofthepartsofthe;Goodcomputeroperatingsystemthebasicprincipleofdesignandthemethod;Understandcommonoperatingsystemstructuretheoryandbefamiliarwith.Thecoursedesignofthesubjectistodesignthestructureof12filesystem,studentsarerequiredtounderstandfiletypeandfilesystemmodel,understandthelogicstructuretypeandfilecharacteristics,understanddocumentsallocationofCRT,masterfiledirectorymanagementandstoragespacemanagement,understandthesecurityofdocumentsanddataconsistency.Thecultivationofthestudents'abilitytothinkabstractly,logicalreasoningabilityandformalthinkingmethod,strengthentheabilitytoanalyzeandsolveproblems.Keywords:operatingsystem;Virtualfile;Thesecondarystructure目錄TOC\o"1-5"\h\z\o"CurrentDocument"摘要2\o"CurrentDocument"Abstract2\o"CurrentDocument"第一章課題背景3\o"CurrentDocument"1.1課題簡介31.1.1課題背景31.1.2課題目的31.1.3要求及內(nèi)容3\o"CurrentDocument"1.2原理與內(nèi)容31.2.1理論依據(jù)31.2.2課題內(nèi)容3\o"CurrentDocument"第二章設(shè)計(jì)簡介及設(shè)計(jì)方案論述4\o"CurrentDocument"設(shè)計(jì)簡介4\o"CurrentDocument"設(shè)計(jì)方案論述4\o"CurrentDocument"2.3概要設(shè)計(jì)42.3.1數(shù)據(jù)結(jié)構(gòu)42.3.2主要操作函數(shù)5\o"CurrentDocument"第三章詳細(xì)設(shè)計(jì)6\o"CurrentDocument"3.1系統(tǒng)分析6\o"CurrentDocument"3.2文件基本操作6\o"CurrentDocument"3.3算法流程圖7\o"CurrentDocument"第四章設(shè)計(jì)結(jié)果及分析8\o"CurrentDocument"4.1文件系統(tǒng)功能8\o"CurrentDocument"4.2系統(tǒng)測試8\o"CurrentDocument"4.3運(yùn)行結(jié)果分析10總結(jié)11\o"CurrentDocument"致謝12\o"CurrentDocument"參考文獻(xiàn)13附錄主要程序代碼14摘要操作系統(tǒng)在計(jì)算機(jī)科學(xué)中是一門核心專業(yè)基礎(chǔ)課,涉及較多硬件和軟件知識。在計(jì)算機(jī)軟、硬件課程的設(shè)置上,它起著承上啟下的作用。其特點(diǎn)是概念多、較抽象、涉及的知識面廣。操作系統(tǒng)綜合設(shè)計(jì)是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)學(xué)生的一門實(shí)踐課程,是學(xué)習(xí)完操作系統(tǒng)課程后的課程設(shè)計(jì),本課程的教學(xué)目的是,通過學(xué)習(xí),使學(xué)生了解計(jì)算機(jī)操作系統(tǒng)的發(fā)展特點(diǎn);理解操作系統(tǒng)的基本概念、組成和各部分的功能;掌握計(jì)算機(jī)操作系統(tǒng)設(shè)計(jì)的基本原理和方法;理解常見操作系統(tǒng)的結(jié)構(gòu)原理并能熟練使用。本此課程設(shè)計(jì)的課題是設(shè)計(jì)一二級結(jié)構(gòu)文件系統(tǒng),要求學(xué)生了解文件類型及文件系統(tǒng)模型,理解文件的邏輯結(jié)構(gòu)類型及特點(diǎn),理解文件外存的分配方式,掌握文件的目錄管理及存儲空間管理,理解文件的安全性和數(shù)據(jù)一致性。培養(yǎng)學(xué)生的抽象思維能力、邏輯推理能力和形式化思維方法,增強(qiáng)分析問題和解決問題的能力。關(guān)鍵詞:操作系統(tǒng);虛擬文件;二級結(jié)構(gòu)AbstractTheoperatingsystemincomputerscienceisacorefundamentalcourse,involvesmorehardwareandsoftwareknowledge.Incomputersoftwareandhardwareofthecoursesetting,itplaystheroleofthelink.Itscharacteristicismore,moreabstractconcept,involvingawiderrangeofknowledge.Theoperatingsystemisintegrateddesignofcomputerscienceandtechnologymajorstudentsapracticalcourses,isafterstudyingtheoperatingsystemofthecoursedesigncurriculum,theteachingpurposeofthiscourseis,throughthestudy,makestudentsunderstandthedevelopmentofthecomputeroperatingsystemcharacteristics;Understandingthebasicconceptoftheoperatingsystem,compositionandthefunctionsofthepartsofthe;Goodcomputeroperatingsystemthebasicprincipleofdesignandthemethod;Understandcommonoperatingsystemstructuretheoryandbefamiliarwith.Thecoursedesignofthesubjectistodesignthestructureof12filesystem,studentsarerequiredtounderstandfiletypeandfilesystemmodel,understandthelogicstructuretypeandfilecharacteristics,understanddocumentsallocationofCRT,masterfiledirectorymanagementandstoragespacemanagement,understandthesecurityofdocumentsanddataconsistency.Thecultivationofthestudents'abilitytothinkabstractly,logicalreasoningabilityandformalthinkingmethod,strengthentheabilitytoanalyzeandsolveproblems.Keywords:operatingsystem;Virtualfile;Thesecondarystructure第一章課題背景1.1課題簡介1.1.1課題背景操作系統(tǒng)在計(jì)算機(jī)科學(xué)中是一門核心專業(yè)基礎(chǔ)課,涉及較多硬件和軟件知識。在計(jì)算機(jī)軟、硬件課程的設(shè)置上,它起著承上啟下的作用。其特點(diǎn)是概念多、較抽象、涉及的知識面廣。1.1.2課題目的通過學(xué)習(xí),使學(xué)生了解計(jì)算機(jī)操作系統(tǒng)的發(fā)展特點(diǎn);理解操作系統(tǒng)的基本概念、組成和各部分的功能;掌握計(jì)算機(jī)操作系統(tǒng)設(shè)計(jì)的基本原理和方法;理解常見操作系統(tǒng)的結(jié)構(gòu)原理并能熟練使用。1.1.3要求及意義了解文件類型及文件系統(tǒng)模型,理解文件的邏輯結(jié)構(gòu)類型及特點(diǎn),理解文件外存的分配方式,掌握文件的目錄管理及存儲空間管理,理解文件的安全性和數(shù)據(jù)一致性。培養(yǎng)學(xué)生的抽象思維能力、邏輯推理能力和形式化思維方法,增強(qiáng)分析問題和解決問題的能力。1.2原理與內(nèi)容1.2.1理論依據(jù)文件系統(tǒng)是Linux操作系統(tǒng)的重要組成部分,Linux文件具有強(qiáng)大的功能。文件系統(tǒng)中的文件是數(shù)據(jù)的集合,文件系統(tǒng)不僅包含著文件中的數(shù)據(jù)而且還有文件系統(tǒng)的結(jié)構(gòu),所有Linux用戶和程序看到的文件、目錄、軟連接及文件保護(hù)信息等都存儲在其中。1.2.2課題內(nèi)容在Windows或者Linux下設(shè)計(jì)一個(gè)二級(或者樹型)結(jié)構(gòu)文件系統(tǒng),要求至少實(shí)現(xiàn)以下功能:login用戶登錄、dir列出文件目錄、create創(chuàng)建文件、del刪除文件、open打開文件、close關(guān)閉文件、read讀文件、write寫文件、cd進(jìn)入子目錄、rd刪除子目錄、md創(chuàng)建子目錄等。第二章設(shè)計(jì)簡介及設(shè)計(jì)方案論述2.1設(shè)計(jì)簡介本系統(tǒng)是模擬實(shí)現(xiàn)多用戶多目錄的文件系統(tǒng),在系統(tǒng)出現(xiàn)登錄后,輸入用戶與口令,在用戶登錄系統(tǒng)后,可建立文件卷,將用戶輸入的文件保存在指定的文件中。系統(tǒng)的命令與其命令的具體實(shí)現(xiàn),此模擬系統(tǒng)共提供了上述命令,并根據(jù)命令的含義與要求,用C++編程來完成所有具體操作。該系統(tǒng)可以模擬完成用戶的登陸和驗(yàn)證,列出文件和目錄,新建目錄,改變目錄,創(chuàng)立和編寫文件,刪除文件和退出系統(tǒng)等功能2.2設(shè)計(jì)方案論述本文件系統(tǒng)采用兩級目錄,其中第一級對應(yīng)于用戶賬號,第二級對應(yīng)于用戶帳號下的文件。另外,為了簡便文件系統(tǒng)未考慮文件共享,文件系統(tǒng)安全以及管道文件與設(shè)備文件等特殊內(nèi)容。首先應(yīng)確定文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu):主目錄、子目錄及活動(dòng)文件等。主目錄和子目錄都以文件的形式存放于磁盤,這樣便于查找和修改。用戶創(chuàng)建的文件,可以編號存儲于磁盤上。如:file0,file1,file2…并以編號作為物理地址,在目錄中進(jìn)行登記。2.3概要設(shè)計(jì)2.3.1數(shù)據(jù)結(jié)構(gòu)structfatitem/*size8*/{intitem;/*存放文件下一個(gè)磁盤的指針*/charem_disk;/*磁盤塊是否空閑標(biāo)志位0空閑*/};structdirect{/*-----文件控制快信息-----*/structFCB{charname[9];/*文件/目錄名8位*/charproperty;/*屬性1位目錄0位普通文件*/intsize;/*文件/目錄字節(jié)數(shù)、盤塊數(shù))*/intfirstdisk;/*文件/目錄起始盤塊號*/intnext;/*子目錄起始盤塊號*/intsign;/*1是根目錄0不是根目錄*/}directitem[MSD+2];};structopentable{structopenttableitem{charname[9];/*文件名*/intfirstdisk;/*起始盤塊號*/intsize;/*文件的大小*/}openitem[MOFN];intcur_size;/*當(dāng)前打文件的數(shù)目*/};2.3.2主要操作函數(shù)intcreate(char*name);intopen(char*name);intclose(char*name);intwrite(intfd,char*buf,intlen);intread(intfd,char*buf);intdel(char*name);intmkdir(char*name);intrmdir(char*name);voiddir();intcd(char*name);voidprint();voidshow();第三章詳細(xì)設(shè)計(jì)3.1系統(tǒng)分析本次設(shè)計(jì)的“模擬二級文件管理系統(tǒng)”利用的是二級目錄管理方式,分別由用戶文件目錄FAT、主文件目錄Root構(gòu)成。其中FAT由用戶的所有文件塊組成,在FAT中每個(gè)用戶目錄文件占用一個(gè)目錄項(xiàng),其中目錄項(xiàng)中包含用戶名、用戶密碼以及指向用戶文件目錄文件鏈表的指針。3.2文件基本操作創(chuàng)建文件:創(chuàng)建一個(gè)新文件時(shí),系統(tǒng)首先要為新文件申請必要的外存空間,并在FAT中為文件分配一個(gè)目錄項(xiàng)。目錄項(xiàng)中應(yīng)記錄新建文件的文件名、文件總?cè)萘俊?dāng)前已經(jīng)使用的容量、文件屬性、文件在磁盤中的起始位置。刪除文件:當(dāng)已不在需要某文件時(shí),可將它從文件系統(tǒng)中刪除。在刪除時(shí),首先在FAT的文件鏈表中找到與該文件對應(yīng)的文件結(jié)點(diǎn),然后確認(rèn)文件是否處于關(guān)閉狀態(tài),若以上條件都滿足,則系統(tǒng)就可以把結(jié)點(diǎn)從文件鏈表中刪除,然后回收改結(jié)點(diǎn)對應(yīng)的磁盤空間。打開文件:只有處于打開狀態(tài)的文件才能被讀取、寫入、重復(fù)關(guān)閉且不能被刪除。關(guān)閉文件:只有處于關(guān)閉狀態(tài)的文件才能被刪除,且不能被重復(fù)關(guān)閉。列文件目錄:用戶只能獲取自己建立的文件或其他用戶共享的文件的列表,并可以查看所用戶建立的文件列表。寫文件:用戶可以把相關(guān)數(shù)據(jù)寫入到用戶自定義的文件中(磁盤上);待寫文件必須處于打開狀態(tài),且不能是其他用戶共享的文件。讀文件:用戶可以把文件中存儲的數(shù)據(jù)讀取出來;待讀文件必須處于打開狀態(tài);用戶既可以讀取自己建立的文件,也可以讀取其他用戶共享的文件。建子目錄:輸入目錄名,若存在于該文件名相同的目錄,這創(chuàng)建失??;若無,則查找空閑的磁盤,將該磁盤置為分配狀態(tài),填寫目錄項(xiàng),分配地址后,子目錄創(chuàng)建成功。刪除目錄:輸入名字,查找是否存在該文件或目錄,若為文件,則不能刪除;若存在,找到起始盤塊號,并將其釋放,修改目錄項(xiàng),刪除成功。3.3算法流程圖框圖1:程序整體框架第四章設(shè)計(jì)結(jié)果及分析4.1文件系統(tǒng)功能系統(tǒng)具有如下基本功能:login用戶登錄dir列目錄create創(chuàng)建文件delete刪除文件open打開文件close關(guān)閉文件read讀文件write寫文件cd進(jìn)出目錄mkdir創(chuàng)建子目錄rmdir刪除子目錄4.2系統(tǒng)測試(1)login用戶登錄Youhauenotformat,Doyouwantformat?<y/n>i/Successfullyformat?**************命令格孤cd目錄名nltdir目錄名rndir目錄名dircreate文件名del文件名open玄件名close文件名readwriteexit顯票*前首錄的子目錄H豆出豪統(tǒng)Root=>(2)mkdir創(chuàng)建子目錄Root:>mkd.ipmGuccessfU.II5Fmakedirect!Root:>_(3)cd進(jìn)出目錄Root:>cdnRoot:\ji>⑷create創(chuàng)建文件(Root:Mn>create1KuccessfLillycreateafile*Root:5>_⑸close關(guān)閉文件ftoot:\m>close1successfullyclosed!Root:Xm>open打開文件Root:Sn>open1Successfullyopened?Root:Sji>_write寫文件Root=Sji>wt'itePleaseinputtliefilecontect=Hello?Successfullywrite*mot=5》read讀文件Root:\m>readHello?mot:\m>dir列目錄Vtoot:>dirdld2d3d4<&f:>板Root:>_delete刪除文件Root:>cdmRoot:1Error:Thefileisopenedj-pleasefirstcloseit?Root:^>010561Successfullyclosed?Root:5>如].1SuccessfLillydelete*Root:5>_(11)rmdir刪除子目錄Root:Sn>cd-.Root:>pmdii'mSuccessfullyrenouedirect?Root:>4.3運(yùn)行結(jié)果分析從上述運(yùn)行過程可以看出,用戶登錄系統(tǒng)后,界面將顯示文件或目錄的基本操作,然后根據(jù)相應(yīng)操作,完成系統(tǒng)的基本要求。本次程序的運(yùn)行結(jié)果與預(yù)期結(jié)果最終達(dá)到了一致。自運(yùn)行階段,雖然每次都能得到運(yùn)行結(jié)果,但是操作界面有時(shí)不是很完美,于是通過修改程序代碼,不斷執(zhí)行程序,進(jìn)行完善,直到得出滿意的操作界面為止。在該過程中,驗(yàn)證了本次課程設(shè)計(jì)所要求的基本功能,雖然有些操作不是很完善,但大體上都能實(shí)現(xiàn)。其中最令我不滿意的是dir功能。該功能只是列出目錄名,不能顯示目錄其他信息,是本次課程設(shè)計(jì)最大敗筆。課程設(shè)計(jì)是對我們平時(shí)學(xué)習(xí)的一種考察,我們要正確地對待。不斷地鍛煉自己動(dòng)手動(dòng)腦的能力、把知識賦予實(shí)踐就是我們學(xué)習(xí)的目標(biāo)!既然學(xué)校給我們這么好的機(jī)會,讓我們自己在實(shí)驗(yàn)室作操作,我們應(yīng)該好好抓住機(jī)會,把我們平時(shí)學(xué)習(xí)的東西用自己的作品展現(xiàn)出來。這次,我做的是《模擬linux=^文件系統(tǒng)設(shè)計(jì)》的課程主題,這給了我充分鍛煉的機(jī)會。我會用自己學(xué)到的東西的設(shè)計(jì)出一副好的作品。Linux系統(tǒng)中的文件系統(tǒng)是人們最感興趣的,也是最成功的一部分。它既有很強(qiáng)的功能,又非常靈活,而且在具體的實(shí)現(xiàn)技術(shù)上也有許多獨(dú)到之處,致使后來有不少操作系統(tǒng)的設(shè)計(jì)者都仿效了Liux操作系統(tǒng)中的文件系統(tǒng)去開發(fā)自己的文件系統(tǒng)。而對于我來說,這種最靈活的知識卻是最難掌握的。也因?yàn)閷ζ浠局R掌握的不好,在這一次的設(shè)計(jì)過程中遇到很多的困難,特別是物理盤塊和邏輯文件之間的對應(yīng)。在經(jīng)過與同學(xué)進(jìn)行溝通和交流并反復(fù)的測試之后,才明白了設(shè)計(jì)的函數(shù),而且完善了部分函數(shù)的主要功能。通過兩星期的操作系統(tǒng)課程設(shè)計(jì)實(shí)習(xí),讓我對Linux文件系統(tǒng)有了深層次的了解和掌握,也通過了自己的能力體會到了編程的樂趣。最重要的是學(xué)會了關(guān)于設(shè)計(jì)分析和以前C++語言學(xué)習(xí)過程中沒有及時(shí)鞏固的知識,對C++程序設(shè)計(jì)又有了更進(jìn)一步的認(rèn)識,對一些細(xì)節(jié)的結(jié)構(gòu)體語句有了更深刻的理解。所以這是一次很難得的實(shí)踐機(jī)會,讓我真正用心編程,學(xué)到了課本以外更深刻更重要的實(shí)踐經(jīng)驗(yàn)。非常感謝老師提供這次機(jī)會,在這個(gè)課程設(shè)計(jì)過程中我受益匪淺,希望以后在這樣的鍛煉中不斷成長,提高自己各方面的能力我相信通過我以后很加刻苦的學(xué)習(xí),我會更加熱愛我的專業(yè)課程。致謝在本次課程設(shè)計(jì)的整個(gè)過程中,要特別感謝自始至終給我提供幫助和指導(dǎo)的劉黎志老師,是他耐心的指導(dǎo)才使得本次設(shè)計(jì)得以順得完成,同時(shí),也要感謝其他同學(xué)的無私幫助,在此還要特別感謝為我們提供良好上機(jī)環(huán)境的學(xué)校。如果沒有以上老師,同學(xué)和學(xué)校的幫助和支持,本次設(shè)計(jì)實(shí)難完成。再次感謝老師的精心輔導(dǎo)和同學(xué)的相互幫助,使我們順利完成此次設(shè)計(jì)以及為學(xué)習(xí)以后的科目打下良好的基礎(chǔ)。參考文獻(xiàn)李小林,張俊.程序設(shè)計(jì)基礎(chǔ)[Z].北京:中國鐵道出版社,2008.湯小丹等.計(jì)算機(jī)操作系統(tǒng)[Z].西安:西安電子科技大學(xué)出版社,2007.嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)[Z].北京:清華大學(xué)出版社,2007.附錄主要代碼源程序:#include<stdio.h>#include<string.h>#include<stdlib.h>#defineMEM_D_SIZE1024*1024〃總磁盤空間為M#defineDISKSIZE1024//磁盤塊的大小K//FAT表大小〃根目錄起始盤塊號〃根目錄大小〃路徑最大長度為KB#defineDISK_NUM1024〃磁盤塊數(shù)目K〃最大子目錄數(shù)〃最大文件深度為〃最大寫入文字長度KB#defineFATSIZEDISK_NUM*sizeof(structfatitem)#defineROOT_DISK_NOFATSIZE/DISKSIZE+1#defineROOT_DISK_SIZEsizeof(structdirect)#defineDIR_MAXSIZE1024#defineMSD5#defineMOFN5#defineMAX//FAT表大小〃根目錄起始盤塊號〃根目錄大小〃路徑最大長度為KB〃最大子目錄數(shù)〃最大文件深度為〃最大寫入文字長度KBintitem;/*存放文件下一個(gè)磁盤的指針*/charem_disk;/*磁盤塊是否空閑標(biāo)志位0空閑*/};structdirect{/*-----文件控制快信息-----*/structFCB{charname[9];/*文件/目錄名8位*/charproperty;/*屬性1位目錄0位普通文件*/intsize;/*文件/目錄字節(jié)數(shù)、盤塊數(shù))*/intfirstdisk;/*文件/目錄起始盤塊號*/intnext;/*子目錄起始盤塊號*/intsign;/*1是根目錄0不是根目錄*/}directitem[MSD+2];};structopentable{structopenttableitem{charname[9];/*文件名*/intfirstdisk;/*起始盤塊號*/intsize;/*文件的大小*/}openitem[MOFN];intcur_size;/*當(dāng)前打文件的數(shù)目*/};structfatitem*fat;/*FAT表*/structdirect*root;/*根目錄*/structdirect*cur_dir;/*當(dāng)前目錄*/structopentableu_opentable;/*文件打開表*/intfd=-1;/*文件打開表的序號*/char*bufferdir;/*記錄當(dāng)前路徑的名稱*/char*fdisk;/*虛擬磁盤起始地址*/voidinitfile();voidformat();voidenter();voidhalt();intcreate(char*name);intopen(char*name);intclose(char*name);intwrite(intfd,char*buf,intlen);intread(intfd,char*buf);intdel(char*name);intmkdir(char*name);intrmdir(char*name);voiddir();intcd(char*name);voidprint();voidshow();voidinitfile(){fdisk=(char*)malloc(MEM_D_SIZE*sizeof(char));/*申請1M空間*/format();}voidformat(){inti;FILE*fp;fat=(structfatitem*)(fdisk+DISKSIZE);/*計(jì)算FAT表地址,引導(dǎo)區(qū)向后偏移1k)*//*-----初始化FAT表*/fat[0].item=-1;/*引導(dǎo)塊*/fat[0].em_disk='1';for(i=1;i<ROOT_DISK_NO-1;i++)/*存放FAT表的磁盤塊號*/{fat[i].item=i+1;fat[i].em_disk='1';}fat[ROOT_DISK_NO].item=-1;/*存放根目錄的磁盤塊號*/fat[ROOT_DISK_NO].em_disk='1';for(i=ROOT_DISK_NO+1;i<DISK_NUM;i++){fat[i].item=-1;fat[i].em_disk='0';}/**/root=(structdirect*)(fdisk+DISKSIZE+FATSIZE);/*根目錄的地址*//*初始化目錄*//*指向當(dāng)前目錄的目錄項(xiàng)*/root->directitem[0].sign=1;root->directitem[0].firstdisk=ROOT_DISK_NO;strcpy(root->directitem[0].name,".");root->directitem[0].next=root->directitem[0].firstdisk;root->directitem[0].property='1';root->directitem[0].size=ROOT_DISK_SIZE;/*指向上一級目錄的目錄項(xiàng)*/root->directitem[1].sign=1;root->directitem[1].firstdisk=ROOT_DISK_NO;strcpy(root->directitem[1].name,"..");root->directitem[1].next=root->directitem[0].firstdisk;root->directitem[1].property='1';root->directitem[1].size=ROOT_DISK_SIZE;if((fp=fopen("disk.dat","wb"))==NULL){printf("Error:\nCannotopenfile\n");return;}for(i=2;i<MSD+2;i++)/*-子目錄初始化為空-*/{root->directitem[i].sign=0;root->directitem[i].firstdisk=-1;strcpy(root->directitem[i].name,"");root->directitem[i].next=-1;root->directitem[i].property='0';root->directitem[i].size=0;}if((fp=fopen("disk.dat","wb"))==NULL){printf("Error:\nCannotopenfile\n");return;}if(fwrite(fdisk,MEM_D_SIZE,1,fp)!=1)/*把虛擬磁盤空間保存到磁盤文件中*/{printf("Error:\nFilewriteerror!\n");}fclose(fp);}voidenter(){FILE*fp;inti;fdisk=(char*)malloc(MEM_D_SIZE*sizeof(char));/*申請1M空間*/if((fp=fopen("disk.dat","rb"))==NULL){printf("Error:\nCannotopenfile\n");return;}if(!fread(fdisk,MEM_D_SIZE,1,fp))/*把磁盤文件disk.dat讀入虛擬磁盤空間(內(nèi)存)*/{printf("Error:\nCannotreadfile\n");exit(0);}fat=(structfatitem*)(fdisk+DISKSIZE);/*找到FAT表地址*/root=(structdirect*)(fdisk+DISKSIZE+FATSIZE)/*找到根目錄地址*/fclose(fp);/*初始化用戶打開表*/for(i=0;i<MOFN;i++){strcpy(u_opentable.openitem[i].name,"");u_opentable.openitem[i].firstdisk=-1;u_opentable.openitem[i].size=0;}u_opentable.cur_size=0;cur_dir=root;/*當(dāng)前目錄為根目錄*/bufferdir=(char*)malloc(DIR_MAXSIZE*sizeof(char));strcpy(bufferdir,"Root:");}voidhalt(){FILE*fp;inti;if((fp=fopen("disk.dat","wb"))==NULL){printf("Error:\nCannotopenfile\n");return;}if(!fwrite(fdisk,MEM_D_SIZE,1,fp))/*把虛擬磁盤空間(內(nèi)存)內(nèi)容讀入磁盤文件disk.dat*/{printf("Error:\nFilewriteerror!\n");}fclose(fp);free(fdisk);free(bufferdir);return;}intcreate(char*name){inti,j;if(strlen(name)>8)/*文件名大于8位*/return(-l);for(j=2;j<MSD+2;j++)/*檢查創(chuàng)建文件是否與已存在的文件重名*/{if(!strcmp(cur_dir->directitem[j].name,name))break;}if(j<MSD+2)/*文件已經(jīng)存在*/return(-4);for(i=2;i<MSD+2;i++)/*找到第一個(gè)空閑子目錄*/{if(cur_dir->directitem[i].firstdisk==-1)break;}if(i>=MSD+2)/*無空目錄項(xiàng)*/return(-2);if(u_opentable.cur_size>=MOFN)/*打開文件太多*/return(-3);for(j=ROOT_DISK_NO+1;j<DISK_NUM;j++)/*找到空閑盤塊j后退出*/{if(fat[j].em_disk=='0')break;}if(j>=DISK_NUM)return(-5);fat[j].em_disk='1';/*將空閑塊置為已經(jīng)分配*//*填寫目錄項(xiàng)*/strcpy(cur_dir->directitem[i].name,name);cur_dir->directitem[i].firstdisk=j;cur_dir->directitem[i].size=0;cur_dir->directitem[i].next=j;cur_dir->directitem[i].property='0';/**/fd=open(name);return0;}intopen(char*name){inti,j;for(i=2;i<MSD+2;i++)/*文件是否存在*/{if(!strcmp(cur_dir->directitem[i].name,name))break;}if(i>=MSD+2)return(-1);/*是文件還是目錄*/if(cur_dir->directitem[i].property=='1')return(-4);/*——文件是否打開*/for(j=0;j<MOFN;j++){if(!strcmp(u_opentable.openitem[j].name,name))break;}if(j<MOFN)/*文件已經(jīng)打開*/return(-2);if(u_opentable.cur_size>=MOFN)/*文件打開太多*/return(-3);/*查找一個(gè)空閑用戶打開表項(xiàng)*/for(j=0;j<MOFN;j++){if(u_opentable.openitem[j].firstdisk==-1)break;}/*填寫表項(xiàng)的相關(guān)信息*/u_opentable.openitem[j].firstdisk=cur_dir->directitem[i].firstdisk;strcpy(u_opentable.openitem[j].name,name);u_opentable.openitem[j].size=cur_dir->directitem[i].size;u_opentable.cur_size++;/*返回用戶打開表表項(xiàng)的序號*/return(j);}intclose(char*name){inti;for(i=0;i<MOFN;i++){if(!strcmp(u_opentable.openitem[i].name,name))break;}if(i>=MOFN)return(-1);/*清空該文件的用戶打開表項(xiàng)的內(nèi)容*/strcpy(u_opentable.openitem[i].name,"");u_opentable.openitem[i].firstdisk=-1;u_opentable.openitem[i].size=0;u_opentable.cur_size--;return0;}intwrite(intfd,char*buf,intlen){char*first;intitem,i,j,k;intilen1,ilen2,modlen,temp;/*用$字符作為空格#字符作為換行符*/charSpace=32;charEndter='\n';for(i=0;i<len;i++){if(buf[i]=='$')buf[i]=Space;elseif(buf[i]=='#')buf[i]=Endter;}/*讀取用戶打開表對應(yīng)表項(xiàng)第一個(gè)盤塊號*/item=u_opentable.openitem[fd].firstdisk;/*找到當(dāng)前目錄所對應(yīng)表項(xiàng)的序號*/for(i=2;i<MSD+2;i++){if(cur_dir->directitem[i].firstdisk==item)break;}temp=i;/*-存放當(dāng)前目錄項(xiàng)的下標(biāo)-*//*找到的item是該文件的最后一塊磁盤塊*/while(fat[item].item!=-1){item=fat[item].item;/*-查找該文件的下一盤塊--*/}/*-----計(jì)算出該文件的最末地址——*/first=fdisk+item*DISKSIZE+u_opentable.openitem[fd].size%DISKSIZE;/*-----如果最后磁盤塊剩余的大小大于要寫入的文件的大小——*/if(DISKSIZE-u_opentable.openitem[fd].size%DISKSIZE>len){strcpy(first,buf);u_opentable.openitem[fd].size=u_opentable.openitem[fd].size+len;cur_dir->directitem[temp].size=cur_dir->directitem[temp].size+len;}else{for(i=0;i<(DISKSIZE-u_opentable.openitem[fd].size%DISKSIZE);i++){/*寫一部分內(nèi)容到最后一塊磁盤塊的剩余空間(字節(jié))*/first[i]=buf[i];}/*——計(jì)算分配完最后一塊磁盤的剩余空間(字節(jié))還剩下多少字節(jié)未存儲*/ilen1=len-(DISKSIZE-u_opentable.openitem[fd].size%DISKSIZE);ilen2=ilen1/DISKSIZE;modlen=ilen1%DISKSIZE;if(modlen>0)ilen2=ilen2+1;/*--還需要多少塊磁盤塊-*/for(j=0;j<ilen2;j++){for(i=ROOT_DISK_NO+1;i<DISK_NUM;i++)/*尋找空閑磁盤塊*/{if(fat[i].em_disk=='0')break;}if(i>=DISK_NUM)/*--如果磁盤塊已經(jīng)分配完了-*/return(-1);first=fdisk+i*DISKSIZE;/*--找到的那塊空閑磁盤塊的起始地址-*/if(j==ilen2-1)/*--如果是最后要分配的一塊-*/{for(k=0;k<len-(DISKSIZE-u_opentable.openitem[fd].size%DISKSIZE)-j*DISKSIZE;k++)first[k]=buf[k];}else/*-如果不是要最后分配的一塊--*/{for(k=0;k<DISKSIZE;k++)first[k]=buf[k];}fat[item].item=i;/*--找到一塊后將它的序號存放在上一塊的指針中-*/fat[i].em_disk='1';/*--置找到的磁盤快的空閑標(biāo)志位為已分配-*/fat[i].item=-1;/*--它的指針為-1(即沒有下一塊)-*/}/*--修改長度-*/u_opentable.openitem[fd].size=u_opentable.openitem[fd].size+len;cur_dir->directitem[temp].size=cur_dir->directitem[temp].size+len;}return0;}intread(intfd,char*buf){intlen=u_opentable.openitem[fd].size;char*first;inti,j,item;intilen1,modlen;item=u_opentable.openitem[fd].firstdisk;ilen1=len/DISKSIZE;modlen=len%DISKSIZE;if(modlen!=0)ilen1=ilen1+1;/*--計(jì)算文件所占磁盤的塊數(shù)-*/first=fdisk+item*DISKSIZE;/*--計(jì)算文件的起始位置-*/for(i=0;i<ilen1;i++){if(i==ilen1-1)/*--如果在最后一個(gè)磁盤塊-*/{for(j=0;j<len-i*DISKSIZE;j++)buf[i*DISKSIZE+j]=first。];}else/*--不在最后一塊磁盤塊-*/{for(j=0;j<len-i*DISKSIZE;j++)buf[i*DISKSIZE+j]=first。];item=fat[item].item;/*-查找下一盤塊-*/first=fdisk+item*DISKSIZE;}}return0;}intdel(char*name){inti,cur_item,item,temp;for(i=2;i<MSD+2;i++)/*--查找要?jiǎng)h除文件是否在當(dāng)前目錄中-*/{if(!strcmp(cur_dir->directitem[i].name,name))break;}cur_item=i;/*--用來保存目錄項(xiàng)的序號,供釋放目錄中-*/if(i>=MSD+2)/*--如果不在當(dāng)前目錄中-*/return(-l);if(cur_dir->directitem[cur_item].property!='0')/*--如果刪除的(不)是目錄-*/return(-3);for(i=0;i<MOFN;i++)/*--如果文件打開,則不能刪除,退出-*/{if(!strcmp(u_opentable.openitem[i].name,name))return(-2);}item=cur_dir->directitem[cur_item].firstdisk;/*--該文件的起始盤塊號-*/while(item!=-1)/*--釋放空間,將FAT表對應(yīng)項(xiàng)進(jìn)行修改-*/{temp=fat[item].item;fat[item].item=-1;fat[item].em_disk='0';item=temp;/*釋放目錄項(xiàng)*/cur_dir->directitem[cur_item].sign=0;cur_dir->directitem[cur_item].firstdisk=-1;strcpy(u_opentable.openitem[cur_item].name,"");cur_dir->directitem[cur_item].next=-1;cur_dir->directitem[cur_item].property='0';cur_dir->directitem[cur_item].size=0;return0;}intmkdir(char*name){inti,j;structdirect*cur_mkdir;if(!strcmp(name,”.”))return(-4);if(!strcmp(name,”..”))return(-4);if(strlen(name)>8)/*-如果目錄名長度大于8位-*/return(-1);for(i=2;i<MSD+2;i++)/*-如果有空閑目錄項(xiàng)退出-*/{if(cur_dir->directitem[i].firstdisk==-1)break;}if(i>=MSD+2)/*-目錄/文件已滿-*/return(-2);for(j=2;j<MSD+2;j++)/*-判斷是否有重名-*/{if(!strcmp(cur_dir->directitem[j].name,name))break;}if(j<MSD+2)/*-如果有重名-*/return(-3);for(j=ROOT_DISK_NO+1;j<DISK_NUM;j++)/*-找到空閑磁盤塊j后退出-*/{if(fat[j].em_disk='0')break;}if(j>=DISK_NUM)return(-5);fat[j].em_disk=T;/*-將該空閑塊設(shè)置為已分配-*//*填寫目錄項(xiàng)*/strcpy(cur_dir->directitem[i].name,name);cur_dir->directitem[i].firstdisk=j;cur_dir->directitem[i].size=ROOT_DISK_SIZE;cur_dir->directitem[i].next=j;cur_dir->directitem[i].property='1';/*-所創(chuàng)目錄在虛擬磁盤上的地址(內(nèi)存物理地址)-*/cur_mkdir=(structdirect*)(fdisk+cur_dir->directitem[i].firstdisk*DISKSIZE);/*-初始化目錄-*//*-指向當(dāng)前目錄的目錄項(xiàng)-*/cur_mkdir->directitem[0].sign=0;cur_mkdir->directitem[0].firstdisk=cur_dir->directitem[i].firstdisk;strcpy(cur_mkdir->directitem[0].name,”.”);cur_mkdir->directitem[0].next=cur_mkdir->directitem[0].firstdisk;cur_mkdir->directitem[0].property='1';cur_mkdir->directitem[0].size=ROOT_DISK_SIZE;/*-指向上一級目錄的目錄項(xiàng)-*/cur_mkdir->directitem[1].sign=cur_dir->directitem[0].sign;cur_mkdir->directitem[1].firstdisk=cur_dir->directitem[0].firstdisk;strcpy(cur_mkdir->directitem[1].name,”..”);cur_mkdir->directitem[1].next=cur_mkdir->directitem[1].firstdisk;cur_mkdir->directitem[1].property='1';cur_mkdir->directitem[1].size=ROOT_DISK_SIZE;for(i=2;i<MSD+2;i++)/*-子目錄都初始化為空-*/{cur_mkdir->directitem[i].sign=0;cur_mkdir->directitem[i].firstdisk=-1;strcpy(cur_mkdir->directitem[i].name,"");cur_mkdir->directitem[i].next=-1;cur_mkdir->directitem[i].property='0';cur_mkdir->directitem[i].size=0;}return0;}intrmdir(char*name){inti,j,item;structdirect*temp_dir;/*-檢查當(dāng)前目錄項(xiàng)中有無該目錄-*/for(i=2;i<MSD+2;i++){if(!strcmp(cur_dir->directitem[i].name,name))break;}if(i>=MSD+2)/*-沒有這個(gè)文件或目錄-*/return(-1);if(cur_dir->directitem[i].property!='1')/*-刪除的不是目錄-*/return(-3);/*-判斷要?jiǎng)h除的目錄有無子目錄-*/temp_dir=(structdirect*)(fdisk+cur_dir->directitem[i].next*DISKSIZE);for(j=2;j<MSD+2;j++){if(temp_dir->directitem[j].next!=-1)break;}if(j<MSD+2)/*-有子目錄或文件-*/return(-2);/*找到起始盤塊號,并將其釋放*/item=cur_dir->directitem[i].firstdisk;fat[item].em_disk='0';/*-修改目錄項(xiàng)-*/cur_dir->directitem[i].sign=0;cur_dir->directitem[i].firstdisk=-1;strcpy(cur_dir->directitem[i].name,"");cur_dir->directitem[i].next=-1;cur_dir->directitem[i].property='0';cur_dir->directitem[i].size=0;return0;}voiddir(){inti;for(i=2;i<MSD+2;i++){if(cur_dir->directitem[i].firstdisk!=-1)/*-如果存在子目錄-*/{printf("%s\t”,cur_dir->directitem[i].name);if(cur_dir->directitem[i].property=='0')/*-文件-*/printf("%d\t\t\n”,cur_dir->directitem[i].size);elseprintf("\t<目錄>\t\n");}}}intcd(char*name){inti,j,item;char*str;char*temp,*point,*point1;structdirect*temp_dir;temp_dir=cur_dir;str=name;if(!strcmp("\\”,name)){cur_dir=root;strcpy(bufferdir,"Root:");return0;}temp=(char*)malloc(DIR_MAXSIZE*sizeof(char));/*-最長路徑名字分配空間-*/for(i=0;i<(int)strlen(str);i++)temp[i]=str[i];temp[i]='\0';for(j=0;j<MSD+2;j++)/*-查找該子目錄是否在當(dāng)前目錄中-*/{if(!strcmp(temp_dir->directitem[j].name,temp))break;}free(temp);/*釋放申請的臨時(shí)空間*///if(temp_dir->directitem[j].property!=T)/*-打開的不是目錄-*///return(-2);if(j>=MSD+2)/*-不在當(dāng)前目錄-*/return(-1);item=temp_dir->directitem[j].firstdisk;/*-當(dāng)前目錄在磁盤中位置-*/temp_dir=(structdirect*)(fdisk+item*DISKSIZE);if(!strcmp("..",name)){if(cur_dir->directitem[j-1].sign!=1)/*-如果上級目錄不是根目錄-*/{point=strchr(bufferdir,'\\');〃查找字符串bufferdir中首次出現(xiàn)字符'的位置while(point!=NULL){point1=point+1;/*-減去'\'所占的空間,記錄下次查找的起始地址-*/point=strchr(point1,'\\');}*(point1-1)='\0';/*-將上一級目錄刪除-*/}}else{//if(name[0]!='\\')bufferdir=strcat(bufferdir,"\\");/*-修改當(dāng)前目錄-*/bufferdir=strcat(bufferdir,name);}cur_dir=temp_dir;/*-將當(dāng)前目錄確定下來-*/return0;}voidshow(){printf("%s>”,bufferdir);}voidprint(){printf("*********************************************************\n");printf("**********************文件系統(tǒng)設(shè)計(jì)***********************\n");printf("*\t命令格式說明*\n");printf("*\tcd目錄名更改當(dāng)前目錄*\n");printf("*\tmkdir目錄名創(chuàng)建子目錄*\n");printf("*\trmdir目錄名刪除子目錄*\n");printf("*\tdir顯示當(dāng)前目錄的子目錄*\n");printf("*\tcreate文件名創(chuàng)建文件*\n");printf("*\tdel文件名刪除文件*\n");printf("*\topen文件名打開文件*\n");printf("*\tclose文件名關(guān)閉文件*\n");printf("*\tread讀文件*\n");printf("*\twrite寫文件*\n");printf("*\texit退出系統(tǒng)*\n");printf("*********************************************************\n");}voidmain(){FILE*fp;charch;chara[100];charcode[11][10];charname[10];inti,flag,r_size;char*contect;contect=(char*)malloc(MAX_WRITE*sizeof(char));if((fp=fopen("disk.dat","rb"))==NULL){printf("Youhavenotformat,Doyouwantformat?(y/n)");scanf("%c”,&ch);if(ch=='y'){initfile();printf("Successfullyformat!\n");}else{return;}}enter();print();show();strcpy(code[0],"exit");strcpy(code[1],"create");strcpy(code[2],"open");strcpy(code[3],"close");strcpy(code[4],"write");strcpy(code[5],"read");strcpy(code[6],"del");strcpy(code[7],"mkdir");strcpy(code[8],"rmdir");strcpy(code[9],"dir");strcpy(code[10],"cd");while(1){scanf("%s",a);for(i=0;i<11;i++){if(!strcmp(code[i],a))break;}swit
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年版技術(shù)開發(fā)合同標(biāo)的為人工智能應(yīng)用
- 2025年山東淄博高新區(qū)衛(wèi)生健康系統(tǒng)事業(yè)單位招聘5人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東淄博市淄川區(qū)事業(yè)單位招考106名工作人員管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東濟(jì)寧微山縣招聘城鎮(zhèn)公益性崗位人員369人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東濟(jì)南市鋼城區(qū)部分學(xué)校(幼兒園)招聘教師59人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東濟(jì)南大學(xué)招聘120人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 建筑工程中級職稱個(gè)人述職報(bào)告范文(7篇)
- 2025年山東德州平原縣事業(yè)單位招聘102名管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東德州夏津縣農(nóng)業(yè)農(nóng)村局家畜繁殖專員招聘15人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 牛頭刨床課程設(shè)計(jì)曲柄角度
- 【企業(yè)盈利能力探析的國內(nèi)外文獻(xiàn)綜述2400字】
- 全國職業(yè)院校技能大賽高職組(智慧物流賽項(xiàng))備賽試題庫(含答案)
- 醫(yī)學(xué)生創(chuàng)新創(chuàng)業(yè)基礎(chǔ)智慧樹知到期末考試答案2024年
- 梅毒專題知識培訓(xùn)
- 衛(wèi)生監(jiān)督協(xié)管醫(yī)療監(jiān)督檢查培訓(xùn)課件
- 長江引航中心公開招聘45人【共500題附答案解析】模擬試卷
- 大班科學(xué)活動(dòng) 有害的噪音
- 話劇《林黛玉進(jìn)賈府》
- 人音版初中音樂七年級下冊 第四單元 美洲樂聲 《化裝舞會》課件(共8張PPT)
- 北師大版三年級數(shù)學(xué)上冊認(rèn)識小數(shù)復(fù)習(xí)課件ppt
- 2019版外研社高中英語必修二單詞默寫表
評論
0/150
提交評論