版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計</b></p><p> 題 目:文件系統(tǒng)的設(shè)計與實(shí)現(xiàn) </p><p><b> 學(xué)生姓名:胡浩亮 </b></p><p> 學(xué) 院:信息工程學(xué)院</p><p> 系 別:計算機(jī)系 </p><p> 專
2、 業(yè):軟件工程 </p><p><b> 班 級: </b></p><p><b> 指導(dǎo)教師: </b></p><p> 2009年1月15日</p><p><b> 摘 要</b></p><p> 設(shè)計一個小型的文件管理系統(tǒng),
3、在XP系統(tǒng)下,建立一個大文件,把它假想成一張盤,在其上實(shí)現(xiàn)小型文件管理系統(tǒng)。該小型文件系統(tǒng)有一個簡單的主界面,提供五條簡單的命令:dir、mkfile、type、copy、delfile,分別用于顯示文件目錄、建立文件、顯示文件內(nèi)容、復(fù)制和刪除一個文件。</p><p> 關(guān)鍵字:操作系統(tǒng),課程設(shè)計,文件系統(tǒng)</p><p><b> 目 錄</b></p&
4、gt;<p> 第一章設(shè)計內(nèi)容1</p><p> 1.1 設(shè)計目的1</p><p> 1.2 設(shè)計要求1</p><p> 1.3 程序設(shè)計思想1</p><p> 第二章 數(shù)據(jù)結(jié)構(gòu)、算法和算法流程圖2</p><p> 2.1 數(shù)據(jù)結(jié)構(gòu)2</p><p&
5、gt; 2.2 程序功能圖2</p><p> 2.3 程序流程圖3</p><p> 第三章 程序運(yùn)行結(jié)果及分析6</p><p> 3.1 程序運(yùn)行結(jié)果6</p><p> 3.2 程序分析7</p><p> 第四章 心得體會8</p><p><b>
6、 參考文獻(xiàn)9</b></p><p> 附錄 程序清單10</p><p><b> 設(shè)計內(nèi)容</b></p><p><b> 1.1 設(shè)計目的</b></p><p> 通過設(shè)計一個小型文件系統(tǒng),進(jìn)一步掌握文件管理的方法和技術(shù),使學(xué)生初步具有研究、設(shè)計、編制和調(diào)試操作系統(tǒng)
7、模塊的能力。</p><p><b> 1.2 設(shè)計要求</b></p><p><b> (1) 問題描述</b></p><p> 在任一OS下,建立一個大文件,把它假想成一張盤,在其中實(shí)現(xiàn)一個簡單的小型文件系統(tǒng)。</p><p><b> (2) 基本要求</b>
8、</p><p> 該文件系統(tǒng)沒有子目錄機(jī)制,文件連續(xù)分配,不考慮換“盤”和分區(qū)。做一個簡單的操作界面,提供五條簡單的命令:dir、mkfile、type、copy、delfile,分別用于顯示文件目錄、建立文件、顯示文件內(nèi)容、復(fù)制和刪除一個文件。</p><p> 1.3 程序設(shè)計思想</p><p> 閱讀操作系統(tǒng)方面的書籍,了解操作系統(tǒng)的文件系統(tǒng)原理。結(jié)
9、合分析課程設(shè)計要求,確定實(shí)體以及它們之間的關(guān)系。實(shí)體關(guān)系有三張表(磁盤空間分配表、文件表、打開文件表)、一個模擬磁盤的數(shù)組、命令服務(wù)和用戶構(gòu)成。用戶負(fù)責(zé)輸入命令。命令服務(wù)實(shí)現(xiàn)命令的解釋、命令檢查、命令幫助以及調(diào)用相關(guān)模塊執(zhí)行相應(yīng)的命令功能。</p><p> 建立一個系統(tǒng)文件(模擬盤),并對此進(jìn)行盤塊的劃分,第一個盤塊存放文件目錄,第二盤塊存放盤塊位示圖,自第三個盤塊開始存放各具體文件的內(nèi)容,文件目錄存放文件的
10、名字,文件的擴(kuò)展名,開始盤塊號,所占用的盤塊數(shù)目,文件的大?。槐P塊位示圖用來標(biāo)記盤塊是否被占用。</p><p> 構(gòu)造這些實(shí)體的關(guān)系圖,數(shù)據(jù)流圖、程序流程圖來進(jìn)行具體的設(shè)計。</p><p> 第二章 數(shù)據(jù)結(jié)構(gòu)、算法和算法流程圖</p><p><b> 2.1 數(shù)據(jù)結(jié)構(gòu)</b></p><p> 數(shù)據(jù)結(jié)構(gòu)說明
11、:本程序所運(yùn)用的主要有兩個數(shù)據(jù)結(jié)構(gòu),分別如下:</p><p><b> 文件目錄結(jié)構(gòu):</b></p><p> struct filename { //文件目錄項結(jié)構(gòu)體 </p><p> char name[9]; //文件名</p>&l
12、t;p> char ext[4]; //擴(kuò)展名</p><p> int i; //文件所占用磁盤塊的第一個磁盤塊號</p><p> int Amount; //文件所占用磁盤塊的塊數(shù)</p><p> long int size;
13、 //文件大小</p><p><b> };</b></p><p><b> 盤塊結(jié)構(gòu):</b></p><p> struct empty { //盤塊結(jié)構(gòu)體</p><p> int map[100];
14、 //盤塊位示圖</p><p> int filenum; //文件數(shù)量</p><p><b> }; </b></p><p><b> 2.2 程序功能圖</b></p><p> 文件系統(tǒng)提供的文件操作有建立文件(mkfile)、復(fù)制文
15、件(copy)、顯示文件所有內(nèi)容(type)、刪除文件(delfile)??梢酝ㄟ^鍵盤輸入命令來模擬文件的操作。</p><p><b> 2.3 程序流程圖</b></p><p> ?。?)主程序流程圖:</p><p> ?。?)初始化模塊流程圖:</p><p> ?。?)寫入磁盤流程圖:</p>
16、<p> (4)顯示目錄流程圖:</p><p> (5)顯示文件流程圖:</p><p> ?。?)刪除文件流程圖:</p><p> (7)復(fù)制文件流程圖:</p><p> ?。?)創(chuàng)建文件流程圖:</p><p> 第三章 程序運(yùn)行結(jié)果及分析</p><p> 3.
17、1 程序運(yùn)行結(jié)果</p><p><b> ?。?)程序主界面</b></p><p> (2)創(chuàng)建一個文件,輸入“3”顯示“輸入文件內(nèi)容,按@ 鍵保存且退出!”</p><p> ?。?)往文件里寫內(nèi)容:Hello World!顯示文件長度,并要求給文件命名,命名后保存返回主界面</p><p> (4)讀取剛才寫
18、入的文件,結(jié)果正確</p><p> ?。?)刪除剛寫入的文件,測試成功</p><p> 對于測試用例,還有很多路徑都有測試過,鑒于篇幅,就不再列出所有可能的路徑來進(jìn)行白盒測試。</p><p><b> 3.2 程序分析</b></p><p> 本程序使用一個Windows下的文件來模擬一個磁盤,向磁盤中裝入
19、文件并進(jìn)行相關(guān)操作。采用了以空間換時間的算法,文件的大小在系統(tǒng)中是固定的,雖然會浪費(fèi)一些空間,但文件的存取速率會加快。</p><p><b> 第四章 心得體會</b></p><p> 通過本次的課程設(shè)計,使我能夠正確運(yùn)用操作系統(tǒng)課程中所學(xué)的基本理論和知識,加深了對文件系統(tǒng)基本概念的理解,以及磁盤文件系統(tǒng)的文件操作。還有讓我感受挺深的是對軟件工程方法的應(yīng)用。設(shè)
20、計一個軟件,先要做好需求分析,這一點(diǎn)很重要,如果沒有分析好需求,到軟件設(shè)計的最后,發(fā)現(xiàn)所做的功能不符合要求,那么一切都得重做,前面所有的努力都付諸東流。還有比較重要的是,畫好程流程圖。在程序設(shè)計的開始,由于分析工作做得不夠深入和細(xì)致,吃了點(diǎn)小苦頭。對于這樣一個小設(shè)計來說,都會吃苦頭,要是大工程更是無法想像,有可能會項目失敗。以后得加強(qiáng)對軟件工程的學(xué)習(xí)。另外在運(yùn)用C語言的時候,感覺有點(diǎn)生疏,在組織語言時時而出錯,在編程和調(diào)試的過程中,經(jīng)常
21、會出現(xiàn)意想不到的問題,并非每個問題都可以從相關(guān)資料中找到解決方法,有些問題是無法預(yù)料到的,這就需要通過自己理性的分析得出問題的解決方案。</p><p> 在設(shè)計過程中,查詢了不少相關(guān)資料,不斷的發(fā)現(xiàn)問題、提出問題、解決問題。在對自己所編寫的源程序段的糾錯的過程中,使我更好的理解了操作系統(tǒng)中文件系統(tǒng)的理論知識,同時在編程時用到了模塊化的設(shè)計思想,這種編程方法可以使我們的編程變的更簡單,可以使我們的查錯與糾錯變的
22、更方便??偟膩碚f通過這次的設(shè)計的學(xué)習(xí)使我學(xué)到了很多在平時的學(xué)習(xí)中學(xué)不到的很多東西,通過這次課程設(shè)計,使我對操作系統(tǒng)和編程產(chǎn)生興趣,我想我會在這條路上繼續(xù)前進(jìn)下去。我相信,只要不斷的嚴(yán)格要求自己,注意培養(yǎng)自己的思維能力,就一定會有更大更輝煌的發(fā)展和提高。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 張堯?qū)W編.計算機(jī)操作系統(tǒng)教程(第三版)習(xí)題
23、解答與實(shí)驗(yàn)指導(dǎo).北京:清華大學(xué)出版社,2006</p><p> [2] 湯子瀛主編.計算機(jī)操作系統(tǒng)(第三版).西安:西安電子科技大學(xué)出版社,2001 </p><p> [3] CSDN論壇.bbs.csdn.net</p><p><b> 附錄 程序清單</b></p><p> #include &quo
24、t;iostream.h"</p><p> #include "string"</p><p> #include "stdio.h"</p><p> extern "C" void exit(int);</p><p> struct filename
25、 //文件目錄項結(jié)構(gòu)體 </p><p><b> {</b></p><p> char name[9]; //文件名</p><p> char ext[4]; //擴(kuò)展名</p><p
26、> int i; //文件所占用磁盤塊的第一個磁盤塊號</p><p> int Amount; //文件所占用磁盤塊的塊數(shù)</p><p> long int size; //文件大小</p><p> }file[11];</
27、p><p><b> int num;</b></p><p> struct empty //盤塊結(jié)構(gòu)體</p><p> { int map[11]; //盤塊位示圖</p><p> int filenum;
28、 //文件數(shù)量</p><p> }emptytable; </p><p><b> //☆模塊說明:</b></p><p> void SystemInit() //模擬磁盤文件初始化函數(shù)</p><p> { for(int i=2;i
29、<10;i++) //初始化存放位示圖的盤塊</p><p> emptytable.map[i]=0;</p><p> emptytable.map[0]=1;</p><p> emptytable.map[1]=1;</p><p> emptytable.filenum=0;</p&
30、gt;<p><b> FILE *fp;</b></p><p> if((fp=fopen("filesys","wb+"))==NULL) //wb+:為讀寫建立一個"新"文件;打開系統(tǒng)文件將文件目錄盤塊和</p><p> {
31、 //位示圖盤塊寫入系統(tǒng)文件</p><p> printf("can not open file \n");</p><p><b> exit(0);</b></p><p><b> }</b></p><p> fseek
32、(fp,512L,0);</p><p> fwrite(&emptytable,sizeof(struct empty),1,fp);</p><p> fclose(fp);</p><p> printf("!!!初始化系統(tǒng)成功!!!");</p><p><b> }</b>&
33、lt;/p><p> void WriteFile() //將目錄以及空閑盤塊表寫入磁盤</p><p> { </p><p><b> FILE *fp;</b></p><p> if((fp=fopen(
34、"filesys","rb+"))==NULL)</p><p><b> {</b></p><p> printf("can not open file \n");</p><p><b> exit(0);</b></p><p&g
35、t;<b> }</b></p><p> rewind(fp);</p><p> for(int i=0;i<num;i++)</p><p><b> {</b></p><p> fwrite(&file[i],sizeof(struct filename),1,fp
36、); //////////////////////文件目錄</p><p><b> }</b></p><p> fseek(fp,512L,0);</p><p> fwrite(&emptytable,sizeof(struct empty),1,fp); //////////////////////
37、//////位示圖</p><p> fclose(fp);</p><p><b> }</b></p><p> void dir() // 顯示文件目錄</p><p> { int i,j;</p>
38、<p><b> FILE *fp;</b></p><p> if((fp=fopen("filesys","rb"))==NULL)</p><p> {printf("can not open file \n");</p><p><b> ex
39、it(0);</b></p><p><b> } </b></p><p> fseek(fp,512L,0); //空閑盤塊表的定位</p><p> fread(&emptytable,sizeof(struct empty),1,fp);<
40、;/p><p> rewind(fp); //文件目錄表的定位</p><p> num=emptytable.filenum;</p><p> for(i=0;i<num;i++)</p><p> fread(&file[i],sizeof(
41、struct filename),1,fp);</p><p> if (num!=0)</p><p> { printf("系統(tǒng)文件目錄結(jié)構(gòu):\n");</p><p> for(i=0,j=1;i<num;i++,j++)</p><p><b> { </b></p>
42、<p> printf("%s.%s\n",file[i].name,file[i].ext);</p><p><b> if(j==5)</b></p><p> { printf("\n");</p><p><b> j=1;</b></p>
43、<p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> printf("\n文件數(shù)量為 %d ",num);</p><p> fclose(fp);</p&g
44、t;<p><b> }</b></p><p> void type() //顯示文件內(nèi)容</p><p><b> { </b></p><p><b> FILE *fp;</b>&l
45、t;/p><p><b> int i,j;</b></p><p> if((fp=fopen("filesys","rb"))==NULL)</p><p> {printf("can not open file \n");</p><p><b&
46、gt; exit(0);</b></p><p><b> }</b></p><p> fseek(fp,512L,0);</p><p> fread(&emptytable,sizeof(struct empty),1,fp);</p><p> rewind(fp);</p&g
47、t;<p> num=emptytable.filenum;</p><p> for(i=0;i<num;i++)</p><p> { fread(&file[i],sizeof(struct filename),1,fp);</p><p> printf("%s.%s\n",file[i].na
48、me,file[i].ext); ////////////////////////////</p><p><b> }</b></p><p> char name[9],ext1[4];</p><p> printf("請輸入文件名:\n");</p><p&g
49、t; gets(name); //scanf("%s",name);//getchar(); </p><p> printf("請輸入擴(kuò)展名:");</p><p> gets(ext1); //scanf("%s",ext1);getchar();</p><p> if(
50、*(name+0)=='\0')</p><p><b> {</b></p><p> printf("文件名不能為空 ! \n");</p><p><b> return;</b></p><p><b> }</b>&l
51、t;/p><p> if(*ext1=='\0') </p><p> strcpy(ext1,"txt");</p><p> int sign=0;</p><p> for(i=0;i<num;i++)</p><p> if((strcmp(file[i].nam
52、e,name)==0) && (strcmp(file[i].ext,ext1)==0))</p><p> { printf("---找到第%d個文件(從0開始)----\n",i); </p><p><b> sign=1;</b></p><p><b> break;<
53、/b></p><p><b> }</b></p><p> /////////////////////////////////////////////</p><p> if(sign==0)</p><p> { printf("無此文件\n");</p><
54、p><b> return;</b></p><p><b> }</b></p><p><b> //顯示文件</b></p><p> int b,m,n ;</p><p> b=file[i].i;</p><p> n=fi
55、le[i].size;</p><p> printf("---該文件位于第%d(從第0塊開始)塊\n",b); ///////////////////////</p><p> printf("---從文件讀出的文件長度為:%d\n---",n);</p><p> //fseek(f
56、p,b*512L,0);</p><p><b> char cc;</b></p><p> //printf("---文件內(nèi)容長度為:%ld\n",n);</p><p> printf("---文件內(nèi)容為:---\n");</p><p> for( m=0,j=1;
57、 m<n; m++,j++) //////////////////////////////////////////////////// </p><p><b> { </b></p><p> fseek(fp,b*512L+m,0);</p><p> //fread
58、(&cc,sizeof(char),1,fp); </p><p> cc=fgetc(fp); </p><p> printf("%c",cc);</p><p> if(j%80==0)printf("\n");</p><p><b> }</b&g
59、t;</p><p> printf("\n"); </p><p> fclose(fp);</p><p><b> }</b></p><p> void delfile() //刪除一個文件&
60、lt;/p><p> { FILE *fp;</p><p><b> int i;</b></p><p> if((fp=fopen("filesys","r"))==NULL)</p><p><b> {</b></p>
61、<p> printf("can not open file \n");</p><p><b> exit(0);</b></p><p><b> }</b></p><p> fseek(fp,512L,0);</p><p> fread(&e
62、mptytable,sizeof(struct empty),1,fp);</p><p> rewind(fp);</p><p> num=emptytable.filenum;</p><p> for(i=0;i<num;i++)</p><p> fread(&file[i],sizeof(struct fil
63、ename),1,fp);</p><p> char name[9],ext1[3];</p><p> printf("請輸入文件名:\n");</p><p> gets(name);</p><p> //scanf("%s",name);getchar();</p>&l
64、t;p> printf("請輸入擴(kuò)展名:\n");</p><p> gets(ext1);</p><p> //scanf("%s",ext1);getchar();</p><p> if(*name=='\0')</p><p> {printf("文
65、件名不能為空 ! \n"); return; }</p><p> if(*ext1=='\0') strcpy(ext1,"txt");</p><p> char judge;</p><p> printf("是否刪除文件%s.%s [y/n]",name,ext1);</p&
66、gt;<p> scanf("%c",&judge); getchar();</p><p> if((judge=='y')||(judge=='Y'))</p><p> printf("準(zhǔn)備刪除文件%s.%s !\n",name,ext1);</p><p>
67、; else if((judge=='n')||(judge=='N'))</p><p><b> return;</b></p><p><b> else</b></p><p><b> {</b></p><p> print
68、f("系統(tǒng)默認(rèn)放棄!\n");</p><p><b> return;</b></p><p><b> }</b></p><p> int sign=0;</p><p> for(i=0;i<num;i++)</p><p> if
69、((strcmp(file[i].name,name)==0)&&(strcmp(file[i].ext,ext1)==0))</p><p><b> {</b></p><p><b> sign=1; </b></p><p><b> break;</b></p&
70、gt;<p><b> }</b></p><p> if(sign==0)</p><p> { printf("文件名錯\n"); </p><p><b> return; </b></p><p><b> }</b>
71、;</p><p><b> //回收空間</b></p><p> int b=file[i].i;</p><p> int Amount=file[i].Amount;</p><p><b> int j;</b></p><p> for(j=0;j<
72、;Amount;j++)</p><p> emptytable.map[b++]=0;</p><p> for( j=i;j<num-1;j++)</p><p> { strcpy(file[j].name,file[j+1].name);</p><p> strcpy(file[j].ext,file[j+1].ex
73、t);</p><p> file[j].i=file[j+1].i;</p><p> file[j].size=file[j+1].size;</p><p> file[j].Amount=file[j+1].Amount;</p><p><b> }</b></p><p>
74、emptytable.filenum=emptytable.filenum-1;</p><p> num=emptytable.filenum;</p><p> WriteFile();</p><p> fclose(fp);</p><p><b> }</b></p><p>
75、 void copy() //復(fù)制一個文件</p><p> { FILE *fq;</p><p><b> int i,j;</b></p><p> if((fq=fopen("filesys","rb+"))=
76、=NULL)</p><p> {printf("can not open file \n");</p><p><b> exit(0);</b></p><p><b> }</b></p><p> fseek(fq,512l,0);</p><
77、;p> fread(&emptytable,sizeof(struct empty),1,fq);</p><p> rewind(fq);</p><p> num=emptytable.filenum;</p><p> for(i=0;i<num;i++)</p><p> fread(&file[
78、i],sizeof(struct filename),1,fq);</p><p> char SourceName[9],DestName[9],ext1[4],ext2[4];</p><p> printf("請輸入源文件名:");</p><p> gets(SourceName); //scan
79、f("%s",SourceName);getchar();</p><p> printf("請輸入源文件擴(kuò)展名:");</p><p> gets(ext1); //scanf("%s",ext1);getchar();</p><p> printf
80、("請輸入目標(biāo)文件名:");</p><p> gets(DestName); //scanf("%s",DestName);getchar();</p><p> printf("請輸入目標(biāo)擴(kuò)展文件名");</p><p> gets(ext2);
81、 //scanf("%s",ext2);getchar();</p><p> if(*ext2=='\0') strcmp(ext2,"txt");</p><p> if((*SourceName)=='\0' || (*DestName)=='\0')<
82、;/p><p><b> {</b></p><p> cout<<"錯誤! 文件名不能為空!\n";</p><p><b> return;</b></p><p><b> }</b></p><p> if(
83、strcmp(SourceName,DestName)==0)</p><p><b> {</b></p><p> cout<<"錯誤! 兩個文件名不能相等!\n";</p><p><b> return;</b></p><p><b> }
84、</b></p><p> for(i=0;i<num;i++) </p><p> if(strcmp(SourceName,file[i].name)==0)</p><p><b> { </b></p><p> strcpy(file[num].
85、name,DestName);</p><p> strcpy(file[num].ext,ext2);</p><p> //file[num].i=file[i].i;</p><p> file[num].size=file[i].size;</p><p> file[num].Amount=file[i].Amount;&l
86、t;/p><p> break; /////////////////////</p><p><b> }</b></p><p> if (i<num)</p><p> printf("輸入的文件名與第%d個源文件相等(i
87、從0開始)\n",i); ////////////////////////</p><p><b> else</b></p><p><b> { </b></p><p> printf("不存在源文件\n");</p><p><b>
88、 return;</b></p><p><b> }</b></p><p><b> //空間分配</b></p><p> int sign=0;</p><p> for(int m=2 ; m<=10-file[num].Amount ; m++)</p&g
89、t;<p><b> {</b></p><p> if(emptytable.map[m]==0)</p><p><b> {</b></p><p> for( j=file[i].Amount; j>0; j--) //尋找一連續(xù)的空閑盤塊</p>&l
90、t;p> if(emptytable.map[m+j-1]==1)</p><p><b> {</b></p><p><b> sign=1;</b></p><p><b> break;</b></p><p><b> }</b>
91、</p><p> if(sign==0) break;</p><p><b> m+=j-1;</b></p><p><b> sign=0;</b></p><p><b> }</b></p><p><b> }&l
92、t;/b></p><p> if (m <= 10-file[num].Amount)</p><p> { for(j=0;j < file[num].Amount;j++)</p><p> emptytable.map[m+j]=1;</p><p> file[num].i=m;</p>&l
93、t;p><b> }</b></p><p><b> else</b></p><p> printf("沒有足夠的連續(xù)的盤塊數(shù)");</p><p><b> //寫數(shù)據(jù)</b></p><p> FILE *fq1;</p>
94、<p> rewind(fq);</p><p><b> fq1=fq;</b></p><p> fseek(fq,(file[i].i) * 512L,0); </p><p> printf("\n---源文件的起始盤塊號:%d",file[i].i); ////////
95、/////////</p><p> //rewind(fp1);</p><p> fseek(fq1,(file[num].i) * 512L,0);</p><p> printf("\n---復(fù)制文件的起始盤塊號:%d",file[num].i); //////////////////</p><
96、p><b> char cc;</b></p><p> printf("\n---源文件內(nèi)容為:---\n");</p><p> for(int k=0 ; k<file[i].size;k++)</p><p><b> { </b></p><p>
97、 fseek(fq,(file[i].i) * 512L+k,0); </p><p> fread(&cc,sizeof(char),1,fq); //////////////////////////////// </p><p> printf("%c",cc);</p><p> fseek(f
98、q1,(file[num].i) * 512L+k,0); </p><p> fwrite(&cc,sizeof(char),1,fq1);</p><p><b> }</b></p><p> printf("\n"); </p><p> num=num+1;</p&
99、gt;<p> emptytable.filenum=num;</p><p> WriteFile(); //寫目錄及位示圖</p><p> fclose(fq);</p><p> fclose(fq1);</p><p><b> }<
100、/b></p><p> void mkfile() //建立一個文件 </p><p> {struct strNode //數(shù)據(jù)塊</p><p> {char word[64];</p><p> struct strNode
101、*next;</p><p> }*head,*p,*q;</p><p> char name[9],ext1[4];</p><p> int i=0,j=0;</p><p> head=p=q=new struct strNode; //申請結(jié)構(gòu)體內(nèi)存空間</p><p><b> char
102、 ch;</b></p><p> printf("請輸入文件內(nèi)容,按 @ 鍵保存且退出!\n");</p><p><b> do{</b></p><p> for(i=0;i<64;i++)</p><p><b> {</b></p>
103、<p> //ch=getchar();</p><p> scanf("%c",&ch);</p><p> p->word[i]=ch;</p><p> if(ch=='@')break;</p><p><b> }</b></p&g
104、t;<p> if(ch!='@')</p><p><b> {</b></p><p> p=new struct strNode;</p><p> q->next=p;</p><p><b> q=p;</b></p><p
105、><b> j++;</b></p><p><b> }</b></p><p> }while(ch!='@');</p><p> getchar();</p><p> int num1, size=(j*64+i)*sizeof(char);</p&g
106、t;<p><b> ////////</b></p><p> printf("文件長度為:%d\n",size);</p><p> char judge='n';</p><p><b> do{</b></p><p> print
107、f("請輸入文件的英文名字:");</p><p> gets(name);</p><p> //scanf("%s",name);getchar();</p><p> printf("請輸入文件的擴(kuò)展名:");</p><p> gets(ext1);</p>
108、;<p> //scanf("%s",ext1);getchar();</p><p> if(*ext1=='\0')strcpy(ext1,"txt");</p><p> judge='y';</p><p> if(*name=='\0')</
109、p><p><b> {</b></p><p> printf("錯誤!文件名不能為空!\n");</p><p> printf("是否放棄此文件[Y/N] ");</p><p> scanf("%c",&judge);getchar();&l
110、t;/p><p> if( (judge=='y') || (judge=='Y') ) </p><p><b> return;</b></p><p><b> }</b></p><p> }while( (judge=='n') || (
111、judge=='N') );</p><p><b> FILE *fp;</b></p><p> if((fp=fopen("filesys","r+"))==NULL)</p><p> {printf("can not open file");</
112、p><p><b> exit(0);</b></p><p><b> }</b></p><p> fseek(fp,512l,0);</p><p> fread(&emptytable,sizeof(struct empty),1,fp);</p><p>
113、; rewind(fp);</p><p> num=emptytable.filenum;</p><p> for(i=0;i<num;i++)</p><p><b> {</b></p><p> fread(&file[i],sizeof(struct filename),1,fp);&
114、lt;/p><p> printf("%s.%s\n",file[i].name,file[i].ext);</p><p><b> }</b></p><p> for (i=0;i<num;i++)</p><p><b> {</b></p>&l
115、t;p> if( (strcmp(file[i].name,name)==0) && (strcmp(file[i].ext,ext1)==0) )</p><p><b> {</b></p><p> printf("! 錯誤 ! 兩個文件名不能相等\n");</p><p><b>
116、; return;</b></p><p><b> }</b></p><p><b> }</b></p><p> num1=size/512;</p><p> if((size%512)>0) num1=num1+1;</p><p>
117、 strcpy(file[num].name,name);</p><p> strcpy(file[num].ext,ext1);</p><p> file[num].size = size;</p><p> file[num].Amount=num1;</p><p> int sign=0 ,n=0;</p>
118、<p><b> //空間分配</b></p><p> for(int m=2 ; m <=10-num1; m++)</p><p> { if(emptytable.map[m]==0)</p><p><b> {</b></p><p> for(n=file
119、[num].Amount; n>0; n--)</p><p> if(emptytable.map[m+n-1]==1)</p><p><b> {sign=1;</b></p><p><b> break;</b></p><p><b> }</b>&
120、lt;/p><p> if(sign==0)break;</p><p><b> m+=n-1;</b></p><p><b> sign=0;</b></p><p><b> }</b></p><p><b> }</b&
121、gt;</p><p> if(m<=10-num1)</p><p> file[num].i = m;</p><p><b> else</b></p><p> {printf("空間不足!\n");</p><p><b> return;
122、</b></p><p><b> }</b></p><p> for(j=0;j < file[num].Amount;j++)</p><p> emptytable.map[m+j]=1;</p><p> num=num+1;</p><p> emptyta
123、ble.filenum=num;</p><p> WriteFile();//寫目錄及位示圖</p><p><b> //寫數(shù)據(jù)</b></p><p> fseek(fp,file[num-1].i * 512L,0);</p><p> long int cycle=file[num-1].size;&l
124、t;/p><p> p=head; i=0;</p><p> for(j=cycle;j>0;j--)</p><p> { ch=p->word[i++];</p><p> fwrite(&ch,sizeof(char),1,fp);</p><p><b> if(i>
125、;=64)</b></p><p><b> { i=0;</b></p><p> p=p->next;</p><p><b> }</b></p><p> // cycle--;</p><p><b> }</b&g
126、t;</p><p> fclose(fp);</p><p><b> }</b></p><p> void mnue() //菜單函數(shù)</p><p> { printf("\n\n");</p><p> printf(&qu
127、ot; !!!請選擇一個功能!!!\n");</p><p> printf(" :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n");</p><p> printf(" :
128、 1. Init Sysfile. :\n");</p><p> printf(" : 2. Dir. : \n");</p><p&g
129、t; printf(" : 3. Create a file. : \n"); </p><p> printf(" : 4. Type.
130、:\n");</p><p> printf(" : 5. Copy. : \n");</p><p> printf(" : 6. Delfile.
131、 :\n");</p><p> printf(" : 7. Exit. : \n"); </p><p> printf(" :::::::::::
132、::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n");</p><p><b> }</b></p><p> void main()</p><p><b> { char k;</b></p><p>
133、;<b> while(1)</b></p><p> { mnue(); //顯示系統(tǒng)菜單</p><p> k=getchar();getchar();</p><p> switch (k)</p><p><b> {</b></p>&l
134、t;p> case '1': SystemInit();</p><p><b> break;</b></p><p> case '2': dir(); </p><p><b> break;</b></p><p> case
135、'3': mkfile(); </p><p><b> break;</b></p><p> case '4': type(); </p><p><b> break;</b></p><p&
136、gt; case '5': copy(); </p><p><b> break;</b></p><p> case '6': delfile(); </p><p><b> break; </b>
137、;</p><p> case '7': exit(1); </p><p> default : printf("error\n");</p><p><b> exit(0);</b></p><p><b> }</b>&l
溫馨提示
- 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è)計與實(shí)現(xiàn)課程設(shè)計
- 多文件系統(tǒng)設(shè)計課程設(shè)計
- 操作系統(tǒng)課程設(shè)計報告--虛擬文件系統(tǒng)的實(shí)現(xiàn)
- 文件系統(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)的實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計報告--多級文件系統(tǒng)
- cramfs文件系統(tǒng)移植課程設(shè)計
- 操作系統(tǒng)課程設(shè)計報告--多級文件系統(tǒng).doc
- 操作系統(tǒng)課程設(shè)計--基于linux的模擬文件系統(tǒng)的設(shè)計與實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計---文件系統(tǒng)的模擬
- 文件管理系統(tǒng)課程設(shè)計---多用戶多級目錄文件系統(tǒng)的實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計報告--linux二級文件系統(tǒng)設(shè)計
- 操作系統(tǒng)課程設(shè)計---模擬文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計--模擬文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計--樹形目錄文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計-模擬文件系統(tǒng)
評論
0/150
提交評論