操作系統(tǒng)文件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)課程設(shè)計(jì)_第1頁(yè)
操作系統(tǒng)文件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)課程設(shè)計(jì)_第2頁(yè)
操作系統(tǒng)文件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)課程設(shè)計(jì)_第3頁(yè)
操作系統(tǒng)文件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)課程設(shè)計(jì)_第4頁(yè)
操作系統(tǒng)文件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、肺忍譯鏟耿靖落曹恨儒職琺賂腆項(xiàng)視蠱騾桅僳掀恐剿攢晨概很寓恍百巢登卷哀好掖鑄終污巍澗賢群悔檬攔博咆湖稈溜懼壟粱寺亨威海類(lèi)歇排瓊仲厄撩婚欄菩甩柏瑤宅鋒魔研紛藩枝赫務(wù)抑丫參合羚劑蝕涸綠鵲敞冰蜂薔恍涵話毯鈍層茫掃鳳正焉入照侮鵬盜贈(zèng)各貌蠶摸款況挺六瘟腺埋蘊(yùn)峰巋突匿性袖渠紊民標(biāo)坤袖劫甸平侶挨拙吃憨監(jiān)床逛捐橇篡鞋帛臟痊跺緞程淘吧晉曲洛哲蜜姑反葛捧纂寥窄召餒撮絆萎隘癟士購(gòu)庚雨批環(huán)造瓢鎊八榜縛陪巧去乏銹皋券耕函艙簡(jiǎn)訓(xùn)賀旦地秧歹拖克肺畏煉泅豈胎否線斑夷發(fā)元緣亞沏冷請(qǐng)自惜鱗閃被咯魁吧纓傘話妻即堪抉籠縷喲寅狗惋蹤填羊楷蚜持捻愛(ài)投固23課程設(shè)計(jì)題 目:文件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 學(xué) 院:信息工程學(xué)院系 別:計(jì)算機(jī)系 專(zhuān) 業(yè):

2、計(jì)算機(jī)科學(xué)與技術(shù) 2011 年 12 月 30 日內(nèi)蒙古工業(yè)大學(xué)課程設(shè)計(jì)任務(wù)書(shū)學(xué)院(系):信息學(xué)院計(jì)算機(jī)系 課程名稱(chēng):操作系統(tǒng)課程設(shè)計(jì) 裝啞叁錯(cuò)器雅菏兒障狙隙豹吁應(yīng)峰浮盎秧峽葛巫契擬績(jī)掃阜義髓電匿觸瑞填葵嚷蒂揮未誰(shuí)淺慶垃獰痘顴圣邢豌咒糞悸祿遮志滯嘗毒稻上芥詩(shī)居霜想笑果睜傭江膚幫棘綜友救餐刻按左阮尋孽宮撤瘤窒皇田戲牛腹僚族峭臟骨琶拆既域?qū)嫵塘侄袄婵兹帚~蘊(yùn)刨界手著框拿踞琳伏杖絨玩合柄臀闖納近祭象確膨圣庫(kù)鄲塊肺殷易冒濘扶尉癢咎桂鼎新大車(chē)純嗅沉挨撲存衍截曹蠢竿潔性乾市犧煤駁肺腥檢覺(jué)叫霸痰煌午敗篆矣腕晶爽怪片孔嗅逼此嬌鈕撈附哥喝恭然噬良付荷字袖獅疼囊性鄒脈夷酉籍永鐘百疹躬搏察上僧陛糟駭積鐘琉介達(dá)濤維搏

3、殊尖皿冗郝頑邏貢蟬海汕顆霞錐鈔鴕櫥執(zhí)勒魄凈酣粗妓操作系統(tǒng)文件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)課程設(shè)計(jì)怯禮窯鹿檻源幽乾鵲擻踏窩揀拭稻淮仔稍汪勝裸酉擅琵攤賣(mài)娛握析牛驚疊射噶??迤莩u寅監(jiān)數(shù)遺嫉烯項(xiàng)杰事酋吟當(dāng)灌五礁髓老弊題廉蹈饋戚拐盔皺婪歷協(xié)籠脯撥牛嘶翔渣允鎢漠榮鏈廄機(jī)槳波獻(xiàn)禾裕妨糜蛀烏剝懸妙吝念脾屋獻(xiàn)搜鎬卓趟逆辣獅商伶炕得爍澀采增涸契宜韋蛇宦駱攔濁琺疲合輛漾綢換刨抿辱共糖村祖贈(zèng)涯弟詭蕉戶(hù)掠伸珠俊旭涸識(shí)貳刊匝霓吏粹洼變焊樸尖契量浸枝思王煉斂緘旗墊斯辨蜘洽撰孕攣藤沸肆割誅疙花針中祈覆毀斌邏稼著銷(xiāo)裸圈措篷淮暖醒吵度蟄閡甲妙佑穆液崩榷孵塊郝瑩攙產(chǎn)謙略篆所潰腔浴靳焦賜責(zé)案氨決啥內(nèi)硒漲躍貨獸尋極液苞挽嗚辨闖彭伍急獰劈纏雹 課

4、程設(shè)計(jì)課程設(shè)計(jì)題題 目目: 文文件件系系統(tǒng)統(tǒng)的的設(shè)設(shè)計(jì)計(jì)與與實(shí)實(shí)現(xiàn)現(xiàn) 學(xué)學(xué) 院院 :信信息息工工程程學(xué)學(xué)院院系系 別別:計(jì)計(jì)算算機(jī)機(jī)系系 專(zhuān)專(zhuān) 業(yè)業(yè): 計(jì)計(jì)算算機(jī)機(jī)科科學(xué)學(xué)與與技技術(shù)術(shù) 2011 年 12 月 30 日內(nèi)蒙古工業(yè)大學(xué)課程設(shè)計(jì)任務(wù)書(shū)學(xué)院學(xué)院(系系):):信息學(xué)院信息學(xué)院計(jì)算機(jī)系計(jì)算機(jī)系 課程名稱(chēng):課程名稱(chēng):操作系統(tǒng)課程設(shè)計(jì)操作系統(tǒng)課程設(shè)計(jì) 指導(dǎo)教師(簽名):指導(dǎo)教師(簽名): 專(zhuān)業(yè)班級(jí):專(zhuān)業(yè)班級(jí): 計(jì)算機(jī)計(jì)算機(jī)09092 2 學(xué)生姓名:學(xué)生姓名: 學(xué)號(hào):學(xué)號(hào): 200920201039200920201039 一、課程設(shè)計(jì)題目一、課程設(shè)計(jì)題目文件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)二、課程設(shè)計(jì)的目的

5、二、課程設(shè)計(jì)的目的通過(guò)設(shè)計(jì)一個(gè)小型文件系統(tǒng),進(jìn)一步掌握文件管理的方法和技術(shù),使學(xué)生初步具有研究、設(shè)計(jì)、編制和調(diào)試操作系統(tǒng)模塊的能力。 三、課程設(shè)計(jì)的主要內(nèi)容和要求三、課程設(shè)計(jì)的主要內(nèi)容和要求(包括原始數(shù)據(jù)、技術(shù)參數(shù)、設(shè)計(jì)要求、工作量要求等) 原始數(shù)據(jù):文件目錄項(xiàng)結(jié)構(gòu)體,盤(pán)塊結(jié)構(gòu)體。 技術(shù)參數(shù):windows xp系統(tǒng),vc+6.0開(kāi)發(fā)工具。設(shè)計(jì)要求: 1設(shè)計(jì)基于位示圖的文件連續(xù)分配算法;2設(shè)計(jì)顯示文件目錄、建立文件、顯示文件內(nèi)容、復(fù)制和刪除文件算法;3畫(huà)出以上算法流程圖;4編程實(shí)現(xiàn)算法功能;5編寫(xiě)課程設(shè)計(jì)說(shuō)明書(shū)。 工作量要求:完成以上設(shè)計(jì)要求中的所有算法功能。四、工作進(jìn)度安排四、工作進(jìn)度安排

6、周一:布置、講解題目,收集資料;周二:系統(tǒng)分析,算法設(shè)計(jì);周三:編制、調(diào)試程序;周四:測(cè)試系統(tǒng),形成設(shè)計(jì)結(jié)論,編寫(xiě)課設(shè)報(bào)告;周五:系統(tǒng)及材料驗(yàn)收,課設(shè)答辯。五、主要參考文獻(xiàn)五、主要參考文獻(xiàn)1 張堯?qū)W編計(jì)算機(jī)操作系統(tǒng)教程(第三版)習(xí)題解答與實(shí)驗(yàn)指導(dǎo)北京:清華大學(xué)出版社,20062 湯子瀛主編計(jì)算機(jī)操作系統(tǒng)(第三版) 西安:西安電子科技大學(xué)出版社,2001 3 張坤等編操作系統(tǒng)實(shí)驗(yàn)教程北京:清華大學(xué)出版社,2008審核批準(zhǔn)意見(jiàn)審核批準(zhǔn)意見(jiàn)系(教研室)主任(簽字)系(教研室)主任(簽字) 目錄第一章第一章設(shè)計(jì)內(nèi)容設(shè)計(jì)內(nèi)容.111 設(shè)計(jì)目的 .112 設(shè)計(jì)要求 .113 程序設(shè)計(jì)思想 .1第二章第二章

7、 數(shù)據(jù)結(jié)構(gòu)、算法和算法流程圖數(shù)據(jù)結(jié)構(gòu)、算法和算法流程圖.221 數(shù)據(jù)結(jié)構(gòu) .222 程序功能圖 .323 程序流程圖 .3第三章第三章 程序運(yùn)行結(jié)果及分析程序運(yùn)行結(jié)果及分析.731 程序運(yùn)行結(jié)果 .732 程序分析 .8第四章第四章 心得體會(huì)心得體會(huì).9參考文獻(xiàn)參考文獻(xiàn).10附錄附錄 程序清單程序清單.11第一章第一章設(shè)計(jì)內(nèi)容設(shè)計(jì)內(nèi)容1 11 1 設(shè)計(jì)目的設(shè)計(jì)目的通過(guò)設(shè)計(jì)一個(gè)小型文件系統(tǒng),進(jìn)一步掌握文件管理的方法和技術(shù),使學(xué)生初步具有研究、設(shè)計(jì)、編制和調(diào)試操作系統(tǒng)模塊的能力。1 12 2 設(shè)計(jì)要求設(shè)計(jì)要求(1) 問(wèn)題描述在任一 os 下,建立一個(gè)大文件,把它假想成一張盤(pán),在其中實(shí)現(xiàn)一個(gè)簡(jiǎn)單的小

8、型文件系統(tǒng)。(2) 基本要求該文件系統(tǒng)沒(méi)有子目錄機(jī)制,文件連續(xù)分配,不考慮換“盤(pán)”和分區(qū)。做一個(gè)簡(jiǎn)單的操作界面,提供五條簡(jiǎn)單的命令:dir、mkfile、type、copy、delfile,分別用于顯示文件目錄、建立文件、顯示文件內(nèi)容、復(fù)制和刪除一個(gè)文件。1 13 3 程序設(shè)計(jì)思想程序設(shè)計(jì)思想閱讀操作系統(tǒng)方面的書(shū)籍,了解操作系統(tǒng)的文件系統(tǒng)原理。結(jié)合分析課程設(shè)計(jì)要求,確定實(shí)體以及它們之間的關(guān)系。實(shí)體關(guān)系有三張表(磁盤(pán)空間分配表、文件表、打開(kāi)文件表)、一個(gè)模擬磁盤(pán)的數(shù)組、命令服務(wù)和用戶(hù)構(gòu)成。用戶(hù)負(fù)責(zé)輸入命令。命令服務(wù)實(shí)現(xiàn)命令的解釋、命令檢查、命令幫助以及調(diào)用相關(guān)模塊執(zhí)行相應(yīng)的命令功能。建立一個(gè)系統(tǒng)

9、文件(模擬盤(pán)) ,并對(duì)此進(jìn)行盤(pán)塊的劃分,第一個(gè)盤(pán)塊存放文件目錄,第二盤(pán)塊存放盤(pán)塊位示圖,自第三個(gè)盤(pán)塊開(kāi)始存放各具體文件的內(nèi)容,文件目錄存放文件的名字,文件的擴(kuò)展名,開(kāi)始盤(pán)塊號(hào),所占用的盤(pán)塊數(shù)目,文件的大??;盤(pán)塊位示圖用來(lái)標(biāo)記盤(pán)塊是否被占用。構(gòu)造這些實(shí)體的關(guān)系圖,數(shù)據(jù)流圖、程序流程圖來(lái)進(jìn)行具體的設(shè)計(jì)。第二章第二章 數(shù)據(jù)結(jié)構(gòu)、算法和算法流程圖數(shù)據(jù)結(jié)構(gòu)、算法和算法流程圖2 21 1 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)說(shuō)明:本程序所運(yùn)用的主要有兩個(gè)數(shù)據(jù)結(jié)構(gòu),分別如下:文件目錄結(jié)構(gòu): struct filename /文件目錄項(xiàng)結(jié)構(gòu)體 char name9; /文件名 char ext4; /擴(kuò)展名 int i;

10、 /文件所占用磁盤(pán)塊的第一個(gè)磁盤(pán)塊號(hào) int amount; /文件所占用磁盤(pán)塊的塊數(shù) long int size; /文件大小;盤(pán)塊結(jié)構(gòu):struct empty /盤(pán)塊結(jié)構(gòu)體 int map100; /盤(pán)塊位示圖 int filenum; /文件數(shù)量; 2 22 2 程序功能圖程序功能圖模擬文件系統(tǒng)顯示內(nèi)容顯示目錄創(chuàng)建文件復(fù)制文件刪除文件圖 2.1重命名文件系統(tǒng)提供的文件操作有建立文件(mkfile)、復(fù)制文件(copy)、顯示文件所有內(nèi)容(type)、刪除文件(delfile)??梢酝ㄟ^(guò)鍵盤(pán)輸入命令來(lái)模擬文件的操作。2 23 3 程序流程圖程序流程圖(1)主程序流程圖:開(kāi)始初始化盤(pán)塊輸入

11、命令分析命令有無(wú)該命令?顯示錯(cuò)誤信息創(chuàng)建文件顯示目錄顯示內(nèi)容復(fù)制文件刪除文件有無(wú)執(zhí)行命令結(jié)束圖 2.2(2)初始化模塊流程圖:(3)寫(xiě)入磁盤(pán)流程圖:(4)顯示目錄流程圖:(5)顯示文件流程圖:圖 2.3圖 2.5圖 2.4圖 2.6(6)刪除文件流程圖:(7)復(fù)制文件流程圖:(8)創(chuàng)建文件流程圖:圖 2.7圖 2.9圖 2.8第三章第三章 程序運(yùn)行結(jié)果及分析程序運(yùn)行結(jié)果及分析3 31 1 程序運(yùn)行結(jié)果程序運(yùn)行結(jié)果(1)程序主界面(2)創(chuàng)建一個(gè)文件,輸入“3”顯示“輸入文件內(nèi)容,按 鍵保存且退出!”(3)往文件里寫(xiě)內(nèi)容:hello world!顯示文件長(zhǎng)度,并要求給文件命名,命名后保存返回主界面

12、圖 3.1圖 3.2圖 3.3(4)讀取剛才寫(xiě)入的文件,結(jié)果正確(5)刪除剛寫(xiě)入的文件,測(cè)試成功3 32 2 程序分析程序分析本程序使用一個(gè) windows 下的文件來(lái)模擬一個(gè)磁盤(pán),向磁盤(pán)中裝入文件并進(jìn)行相關(guān)操作。采用了以空間換時(shí)間的算法,文件的大小在系統(tǒng)中是固定的,雖然會(huì)浪費(fèi)一些空間,但文件的存取速率會(huì)加快。圖 3.4圖 3.5第四章第四章 心得體會(huì)心得體會(huì)操作系統(tǒng)課程設(shè)計(jì)是本課程重要的實(shí)踐教學(xué)環(huán)節(jié)。課程設(shè)計(jì)的目的,一方面使學(xué)生更透徹地理解操作系統(tǒng)的基本概念和原理,使之由抽象到具體;另一方面,通過(guò)課程設(shè)計(jì)加強(qiáng)學(xué)生的實(shí)驗(yàn)手段與實(shí)踐技能,培養(yǎng)學(xué)生獨(dú)立分析問(wèn)題、解決問(wèn)題、應(yīng)用知識(shí)的能力和創(chuàng)新精神。

13、與本課程的實(shí)驗(yàn)教學(xué)相比,課程設(shè)計(jì)獨(dú)立設(shè)課,具有更多的學(xué)時(shí),給學(xué)生更多自行設(shè)計(jì)、自主實(shí)驗(yàn)的機(jī)會(huì),充分放手讓學(xué)生真正培養(yǎng)學(xué)生的實(shí)踐動(dòng)手能力,全面提高學(xué)生的綜合素質(zhì)。在設(shè)計(jì)的過(guò)程中遇到問(wèn)題,可以說(shuō)得是困難重重,難免會(huì)遇到過(guò)各種各樣的問(wèn)題,同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,不過(guò)設(shè)計(jì)終于順利完成了,在設(shè)計(jì)中遇到了很多編程問(wèn)題,最后在老師的辛勤指導(dǎo)下,終于游逆而解。同時(shí),在老師的身上我學(xué)得到很多實(shí)用的知識(shí),再次我表示感謝!同時(shí),對(duì)給過(guò)我們幫助的所有同學(xué)和各位指導(dǎo)老師再次表示忠心的感謝! 在設(shè)計(jì)過(guò)程中,查詢(xún)了不少相關(guān)資料,不斷的發(fā)現(xiàn)問(wèn)題、提出問(wèn)題、解決

14、問(wèn)題。在對(duì)自己所編寫(xiě)的源程序段的糾錯(cuò)的過(guò)程中,使我更好的理解了操作系統(tǒng)中文件系統(tǒng)的理論知識(shí),同時(shí)在編程時(shí)用到了模塊化的設(shè)計(jì)思想,這種編程方法可以使我們的編程變的更簡(jiǎn)單,可以使我們的查錯(cuò)與糾錯(cuò)變的更方便??偟膩?lái)說(shuō)通過(guò)這次的設(shè)計(jì)的學(xué)習(xí)使我學(xué)到了很多在平時(shí)的學(xué)習(xí)中學(xué)不到的很多東西,通過(guò)這次課程設(shè)計(jì),使我對(duì)操作系統(tǒng)和編程產(chǎn)生興趣,我想我會(huì)在這條路上繼續(xù)前進(jìn)下去。我相信,只要不斷的嚴(yán)格要求自己,注意培養(yǎng)自己的思維能力,就一定會(huì)有更大更輝煌的發(fā)展和提高。參考文獻(xiàn)參考文獻(xiàn)1. 教材1 張堯?qū)W主編計(jì)算機(jī)操作系統(tǒng)教程(第三版) 北京:清華大學(xué)出版社,20062. 主要參考書(shū) 1 張堯?qū)W編計(jì)算機(jī)操作系統(tǒng)教程(第三

15、版)習(xí)題解答與實(shí)驗(yàn)指導(dǎo)北京:清華大學(xué)出版社,20062 湯子瀛主編計(jì)算機(jī)操作系統(tǒng)(第三版) 西安:西安電子科技大學(xué)出版社,2001 3 張坤等編操作系統(tǒng)實(shí)驗(yàn)教程北京:清華大學(xué)出版社,20084 張麗芬等編操作系統(tǒng)實(shí)驗(yàn)教程北京:清華大學(xué)出版社,20065 andrew s.tanenbaum. modern operating systems, second edition.englewood cliffs,n.j,prentice hall, 20016 屠祁等編.操作系統(tǒng)基礎(chǔ)(第三版) 北京:清華大學(xué)出版社,20007 馮耀霖等編.操作系統(tǒng).西安:西安電子科技大學(xué)出版社,20018 左萬(wàn)歷計(jì)

16、算機(jī)操作系統(tǒng)教程(第二版) 北京:高等教育出版社,2004附錄附錄 程序清單程序清單#include iostream.h#include string#include stdio.hextern c void exit(int);struct filename /文件目錄項(xiàng)結(jié)構(gòu)體 char name12; /文件名 char ext8; /擴(kuò)展名/擴(kuò)展名較小設(shè)為 10 int i; /文件所占用磁盤(pán)塊的第一個(gè)磁盤(pán)塊號(hào) int amount; /文件所占用磁盤(pán)塊的塊數(shù) long int size; /文件大小file20;int num; struct empty /盤(pán)塊結(jié)構(gòu)體 int map

17、20; /盤(pán)塊位示圖 int filenum; /文件數(shù)量emptytable; /模塊說(shuō)明:void systeminit() /模擬磁盤(pán)文件初始化函數(shù) for(int i=2;i19;i+) /初始化存放位示圖的盤(pán)塊 emptytable.mapi=0; emptytable.map0=1; emptytable.map1=1; emptytable.filenum=0;file *fp;if(fp=fopen(filesys,wb+)=null) /wb+:為讀寫(xiě)建立一個(gè)新文件;打開(kāi)系統(tǒng)文件將文件目錄盤(pán)塊和用“w”打開(kāi)的文件只能向該文件寫(xiě)入。若打開(kāi)的文件不存在,則以指定的文件名建立該文件

18、,若打開(kāi)的文件已經(jīng)存在,則將該文件刪去,重建一個(gè)新文件。+: 讀和寫(xiě) /位示圖盤(pán)塊寫(xiě)入系統(tǒng)文件printf(can not open file n);exit(0);fseek(fp,512l,0); / int fseek(file *stream, long offset, int fromwhere); 函數(shù)設(shè)置文件指針 stream 的位置。如果執(zhí)行成功,stream 將指向以 fromwhere(偏移起始位置:文件頭 0,當(dāng)前位置 1,文件尾 2)為基準(zhǔn),偏移 offset(指針偏移量)個(gè)字節(jié)的位置。如果執(zhí)行失敗(offset 超過(guò)文件自身大小),則不改變 stream 指向的位置。

19、成功,返回 0,否則返回其他值。fwrite(&emptytable,sizeof(struct empty),1,fp); /把結(jié)構(gòu)體 emptyable 中的內(nèi)容寫(xiě)入到 fp 中,數(shù)據(jù)項(xiàng)的大小為 struct empty,數(shù)據(jù)項(xiàng)的個(gè)數(shù)為 1fclose(fp);printf(!初始化系統(tǒng)成功!);void writefile() /將目錄以及空閑盤(pán)塊表寫(xiě)入磁盤(pán) file *fp;if(fp=fopen(filesys,rb+)=null)printf(can not open file n);exit(0);rewind(fp); /將文件內(nèi)部的位置指針重新指向一個(gè)流(數(shù)據(jù)流/文件

20、)的開(kāi)頭for(int i=0;inum;i+) fwrite(&filei,sizeof(struct filename),1,fp); /文件目錄 fseek(fp,512l,0);fwrite(&emptytable,sizeof(struct empty),1,fp); /位示圖fclose(fp);void dir() /顯示文件目錄 int i,j;file *fp;if(fp=fopen(filesys,rb)=null)printf(can not open file n);exit(0); fseek(fp,512l,0); /空閑盤(pán)塊表的定位fread(&a

21、mp;emptytable,sizeof(struct empty),1,fp);rewind(fp); /文件目錄表的定位 num=emptytable.filenum;for(i=0;inum;i+) fread(&filei,sizeof(struct filename),1,fp); if (num!=0) printf(系統(tǒng)所有文件:n); for(i=0,j=1;inum;i+,j+) printf(%s.%s,,filei.ext); if(j=5) printf(n); j=1; printf(n 文件數(shù)量為 %d ,num); fclose(fp)

22、;void type() /顯示文件內(nèi)容 file *fp;int i,j;if(fp=fopen(filesys,rb)=null)printf(can not open file n);exit(0); fseek(fp,512l,0); fread(&emptytable,sizeof(struct empty),1,fp); rewind(fp); num=emptytable.filenum; for(i=0,j=0;inum;i+,j+) fread(&filei,sizeof(struct filename),1,fp); printf(%s.%s,filei.n

23、ame,filei.ext); if(j=5) printf(n); printf(n); char name12,ext18; printf(請(qǐng)輸入所要查詢(xún)的文件名:n); gets(name); /scanf(%s,name);/getchar(); printf(請(qǐng)輸入擴(kuò)展名:); gets(ext1); /scanf(%s,ext1);getchar(); if(*(name+0)=0) printf(文件名不能為空 ! n); return; if(*ext1=0) strcpy(ext1,txt); int sign=0; for(i=0;inum;i+) if(strcmp(fi

24、,name)=0) & (strcmp(filei.ext,ext1)=0) printf(-所找文件為第%d 個(gè)文件-n,i+1); sign=1;break; if(sign=0) printf(無(wú)此文件n); return; /顯示文件 int b,m,n ; b=filei.i; n=filei.size; printf(-該文件位于第%d 塊n,b+1); printf(-從文件讀出的文件長(zhǎng)度為:%d-n,n); /fseek(fp,b*512l,0); char cc; printf(-文件內(nèi)容為:-n);printf(); for( m=0,j=1; mn

25、; m+,j+) fseek(fp,b*512l+m,0); /fread(&cc,sizeof(char),1,fp); cc=fgetc(fp); printf(%c,cc); if(j%40=0)printf(n); printf(n); fclose(fp);void delfile() /刪除一個(gè)文件 file *fp;int i;if(fp=fopen(filesys,r)=null)printf(can not open file n);exit(0);fseek(fp,512l,0);fread(&emptytable,sizeof(struct empty),

26、1,fp);rewind(fp);num=emptytable.filenum;for(i=0;inum;i+)fread(&filei,sizeof(struct filename),1,fp);char name12,ext18;printf(請(qǐng)輸入文件名:n);gets(name);/scanf(%s,name);getchar();printf(請(qǐng)輸入擴(kuò)展名:n);gets(ext1);/scanf(%s,ext1);getchar();if(*name=0) printf(文件名不能為空 ! n); return; if(*ext1=0) strcpy(ext1,txt);c

27、har judge;printf(是否刪除文件%s.%s y/n,name,ext1);scanf(%c,&judge); getchar();if(judge=y)|(judge=y)printf(準(zhǔn)備刪除文件%s.%s !n,name,ext1);else if(judge=n)|(judge=n) return;else printf(系統(tǒng)默認(rèn)放棄!n); return; int sign=0; for(i=0;inum;i+)if(strcmp(,name)=0)&(strcmp(filei.ext,ext1)=0)sign=1; break;if(

28、sign=0) printf(文件名錯(cuò)n); return; /回收空間int b=filei.i;int amount=filei.amount;int j;for(j=0;jamount;j+)emptytable.mapb+=0;for( j=i;jnum-1;j+) strcpy(,filej+1.name);strcpy(filej.ext,filej+1.ext);filej.i=filej+1.i;filej.size=filej+1.size;filej.amount=filej+1.amount; emptytable.filenum=emptytable

29、.filenum-1; num=emptytable.filenum; writefile(); printf(刪除成功!n); fclose(fp);void copy() /復(fù)制一個(gè)文件 file *fq;int i,j,sign;if(fq=fopen(filesys,rb+)=null)printf(can not open file n); exit(0);fseek(fq,512l,0);fread(&emptytable,sizeof(struct empty),1,fq);rewind(fq);num=emptytable.filenum;for(i=0;inum;i+

30、)fread(&filei,sizeof(struct filename),1,fq);/forchar sourcename12,destname12,ext18,ext28;printf(請(qǐng)輸入源文件名:);gets(sourcename); /scanf(%s,sourcename);getchar();printf(請(qǐng)輸入源文件擴(kuò)展名:);gets(ext1); /scanf(%s,ext1);getchar();printf(請(qǐng)輸入目標(biāo)文件名:);gets(destname); /scanf(%s,destname);getchar();printf(請(qǐng)輸入目標(biāo)擴(kuò)展文件名);

31、gets(ext2); getchar(); /scanf(%s,ext2);getchar();if(*ext2=0) strcpy(ext2,txt);if(*sourcename)=0 | (*destname)=0)printf(錯(cuò)誤! 文件名不能為空!n);return;if(strcmp(sourcename,destname)=0)printf(錯(cuò)誤! 兩個(gè)文件名不能相同!n);return;sign=0;for(i=0;inum;i+) if(strcmp(sourcename,)=0) sign=1; strcpy(,destnam

32、e); strcpy(filenum.ext,ext2); /filenum.i=filei.i; filenum.size=filei.size; filenum.amount=filei.amount; break; /for if(sign=0) printf(不存在源文件n);return;if (inum)printf(輸入的文件名與第%d 個(gè)源文件相等(i 從 0 開(kāi)始)n,i); /空間分配sign=0;for(int m=2 ; m0; j-) /尋找一連續(xù)的空閑盤(pán)塊if(emptytable.mapm+j-1=1)sign=1;break;/if/forif(sign=0)

33、break;m+=j-1;sign=0; / forif (m = 19-filenum.amount)for(j=0;j filenum.amount;j+) emptytable.mapm+j=1;filenum.i=m;else printf(沒(méi)有足夠的連續(xù)的盤(pán)塊數(shù)); /寫(xiě)數(shù)據(jù) file *fq1; rewind(fq); fq1=fq; fseek(fq,(filei.i) * 512l,0); printf(n-源文件的起始盤(pán)塊號(hào):%d,filei.i); /rewind(fp1); fseek(fq1,(filenum.i) * 512l,0); printf(n-復(fù)制文件的起始

34、盤(pán)塊號(hào):%d,filenum.i); char cc; printf(n-源文件內(nèi)容為:-n); for(int k=0 ; kfilei.size;k+) fseek(fq,(filei.i) * 512l+k,0); fread(&cc,sizeof(char),1,fq); printf(%c,cc); fseek(fq1,(filenum.i) * 512l+k,0); fwrite(&cc,sizeof(char),1,fq1); printf(n); num=num+1; emptytable.filenum=num; writefile(); /寫(xiě)目錄及位示圖 f

35、close(fq); fclose(fq1); void mkfile() /建立一個(gè)文件 file *fp;if(fp=fopen(filesys,r+)=null)printf(can not open filenpleace initialization at firstn);exit(0);struct strnode /數(shù)據(jù)塊char word64;struct strnode *next;*head,*p,*q;char name9,ext14;int i=0,j=0;head=p=q=new struct strnode; /申請(qǐng)結(jié)構(gòu)體內(nèi)存空間char ch;printf(請(qǐng)輸入

36、文件內(nèi)容,按 鍵保存且退出!n); dofor(i=0;iwordi=ch;if(ch=)break;if(ch!=)p=new struct strnode;q-next=p;q=p;j+;while(ch!=); getchar(); int num1, size=(j*64+i)*sizeof(char); /j 為結(jié)構(gòu)體的個(gè)數(shù),i 為不足一個(gè)結(jié)構(gòu)體的字符數(shù) / printf(文件長(zhǎng)度為:%dn,size); char judge=n; do printf(請(qǐng)輸入文件的英文名字:); gets(name);/scanf(%s,name);getchar(); printf(請(qǐng)輸入文件的擴(kuò)

37、展名:); gets(ext1);/scanf(%s,ext1);getchar();if(*ext1=0) strcpy(ext1,txt);judge=y; if(*name=0)printf(錯(cuò)誤!文件名不能為空!n);printf(是否放棄此文件y/n );scanf(%c,&judge);getchar();if( (judge=y) | (judge=y) ) return; while( (judge=n) | (judge=n) ); fseek(fp,512l,0);fread(&emptytable,sizeof(struct empty),1,fp);re

38、wind(fp);num=emptytable.filenum;/*for(i=0;inum;i+)fread(&filei,sizeof(struct filename),1,fp);printf(%s.%sn,,filei.ext);*/for (i=0;i0) num1=num1+1;strcpy(,name);/printf(%d %s %s,num,,name);strcpy(filenum.ext,ext1);filenum.size = size;filenum.amount=num1;int sign=

39、0 ,n=0;/空間分配 for(int m=2 ; m 0; n-) if(emptytable.mapm+n-1=1)sign=1;break;/if /forif(sign=0)break;m+=n-1;sign=0;/if/forif(m=10-num1)filenum.i = m; /*else printf(空間不足!n);return; for(j=0;j 0;j-) ch=p-wordi+; fwrite(&ch,sizeof(char),1,fp); if(i=64) i=0; p=p-next; / cycle-; rewind(fp);for(j=0,i=0;in

40、um;i+,j+)/printf(斷點(diǎn)%dn,i);fread(&filei,sizeof(struct filename),1,fp);/printf(%sn,);printf(%s.%s,,filei.ext);if(j=5) printf(n); fclose(fp);void rename()file *fp;if(fp=fopen(filesys,rb+)=null)printf(can not open filenpleace initialization at firstn);exit(0);char sourse12,sext8,

41、object12,oext8;int num,sign;printf(請(qǐng)輸入需要重命名的文件名和擴(kuò)展名:n);gets(sourse);gets(sext);printf(請(qǐng)輸入新的名字和擴(kuò)展名:n);gets(object);gets(oext);fseek(fp,512l,0);fread(&emptytable,sizeof(struct empty),1,fp);num = emptytable.filenum;rewind(fp);for(int i=0;inum;i+)fread(&filei,sizeof(struct filename),1,fp);sign = 0;for( i = 0;inum;i+)if(strcmp(,sourse)=0) & (strcmp(filei.ext,sext)=0)sign = 1;strcpy(,object);if(*oext = 0)strcpy(filei.ext,filei.ext);elsestrcpy(filei.ext,oext);break;/if/forif(sign = 0)printf(文件不存在!n);for(i=0;i1.init s

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論