版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計</b></p><p> 題 目:文件系統(tǒng)的設(shè)計與實現(xiàn) </p><p><b> 學(xué)生姓名: </b></p><p> 學(xué) 院:信息工程學(xué)院</p><p> 系 別:計算機(jī)系 </p><p> 專 業(yè)
2、:計算機(jī)科學(xué)與技術(shù) </p><p><b> 班 級: </b></p><p><b> 指導(dǎo)教師: </b></p><p> 2011年12月30日</p><p><b> 課程設(shè)計任務(wù)書</b></p><p><b>
3、 目錄</b></p><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é)
4、構(gòu)2</p><p> 2.2 程序功能圖3</p><p> 2.3 程序流程圖3</p><p> 第三章 程序運行結(jié)果及分析7</p><p> 3.1 程序運行結(jié)果7</p><p> 3.2 程序分析8</p><p> 第四章 心得體會9</p>
5、<p><b> 參考文獻(xiàn)10</b></p><p> 附錄 程序清單11</p><p><b> 設(shè)計內(nèi)容</b></p><p><b> 1.1 設(shè)計目的</b></p><p> 通過設(shè)計一個小型文件系統(tǒng),進(jìn)一步掌握文件管理的方法和技術(shù),
6、使學(xué)生初步具有研究、設(shè)計、編制和調(diào)試操作系統(tǒng)模塊的能力。</p><p><b> 1.2 設(shè)計要求</b></p><p><b> (1) 問題描述</b></p><p> 在任一OS下,建立一個大文件,把它假想成一張盤,在其中實現(xiàn)一個簡單的小型文件系統(tǒng)。</p><p><b&g
7、t; (2) 基本要求</b></p><p> 該文件系統(tǒng)沒有子目錄機(jī)制,文件連續(xù)分配,不考慮換“盤”和分區(qū)。做一個簡單的操作界面,提供五條簡單的命令:dir、mkfile、type、copy、delfile,分別用于顯示文件目錄、建立文件、顯示文件內(nèi)容、復(fù)制和刪除一個文件。</p><p> 1.3 程序設(shè)計思想</p><p> 閱讀操作系
8、統(tǒng)方面的書籍,了解操作系統(tǒng)的文件系統(tǒng)原理。結(jié)合分析課程設(shè)計要求,確定實體以及它們之間的關(guān)系。實體關(guān)系有三張表(磁盤空間分配表、文件表、打開文件表)、一個模擬磁盤的數(shù)組、命令服務(wù)和用戶構(gòu)成。用戶負(fù)責(zé)輸入命令。命令服務(wù)實現(xiàn)命令的解釋、命令檢查、命令幫助以及調(diào)用相關(guān)模塊執(zhí)行相應(yīng)的命令功能。</p><p> 建立一個系統(tǒng)文件(模擬盤),并對此進(jìn)行盤塊的劃分,第一個盤塊存放文件目錄,第二盤塊存放盤塊位示圖,自第三個盤塊
9、開始存放各具體文件的內(nèi)容,文件目錄存放文件的名字,文件的擴(kuò)展名,開始盤塊號,所占用的盤塊數(shù)目,文件的大小;盤塊位示圖用來標(biāo)記盤塊是否被占用。</p><p> 構(gòu)造這些實體的關(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&
10、gt;<p> 數(shù)據(jù)結(jié)構(gòu)說明:本程序所運用的主要有兩個數(shù)據(jù)結(jié)構(gòu),分別如下:</p><p><b> 文件目錄結(jié)構(gòu):</b></p><p> struct filename { //文件目錄項結(jié)構(gòu)體 </p><p> char name[9];
11、 //文件名</p><p> char ext[4]; //擴(kuò)展名</p><p> int i; //文件所占用磁盤塊的第一個磁盤塊號</p><p> int Amount; //文件所占用磁盤塊的塊數(shù)</p><p>
12、; long int size; //文件大小</p><p><b> };</b></p><p><b> 盤塊結(jié)構(gòu):</b></p><p> struct empty { //盤塊結(jié)構(gòu)體</p><p>
13、 int map[100]; //盤塊位示圖</p><p> int filenum; //文件數(shù)量</p><p><b> }; </b></p><p><b> 2.2 程序功能圖</b></p><p> 文件系統(tǒng)提供
14、的文件操作有建立文件(mkfile)、復(fù)制文件(copy)、顯示文件所有內(nèi)容(type)、刪除文件(delfile)。可以通過鍵盤輸入命令來模擬文件的操作。</p><p><b> 2.3 程序流程圖</b></p><p> ?。?)主程序流程圖:</p><p> ?。?)初始化模塊流程圖:</p><p>
15、(3)寫入磁盤流程圖:</p><p> (4)顯示目錄流程圖:</p><p> ?。?)顯示文件流程圖:</p><p> ?。?)刪除文件流程圖:</p><p> ?。?)復(fù)制文件流程圖:</p><p> ?。?)創(chuàng)建文件流程圖:</p><p> 第三章 程序運行結(jié)果及分析<
16、;/p><p> 3.1 程序運行結(jié)果</p><p><b> ?。?)程序主界面</b></p><p> (2)創(chuàng)建一個文件,輸入“3”顯示“輸入文件內(nèi)容,按@ 鍵保存且退出!”</p><p> ?。?)往文件里寫內(nèi)容:Hello World!顯示文件長度,并要求給文件命名,命名后保存返回主界面</p>
17、;<p> ?。?)讀取剛才寫入的文件,結(jié)果正確</p><p> ?。?)刪除剛寫入的文件,測試成功</p><p><b> 3.2 程序分析</b></p><p> 本程序使用一個Windows下的文件來模擬一個磁盤,向磁盤中裝入文件并進(jìn)行相關(guān)操作。采用了以空間換時間的算法,文件的大小在系統(tǒng)中是固定的,雖然會浪費一些空
18、間,但文件的存取速率會加快。</p><p><b> 第四章 心得體會</b></p><p> 操作系統(tǒng)課程設(shè)計是本課程重要的實踐教學(xué)環(huán)節(jié)。課程設(shè)計的目的,一方面使學(xué)生更透徹地理解操作系統(tǒng)的基本概念和原理,使之由抽象到具體;另一方面,通過課程設(shè)計加強(qiáng)學(xué)生的實驗手段與實踐技能,培養(yǎng)學(xué)生獨立分析問題、解決問題、應(yīng)用知識的能力和創(chuàng)新精神。與本課程的實驗教學(xué)相比,課程
19、設(shè)計獨立設(shè)課,具有更多的學(xué)時,給學(xué)生更多自行設(shè)計、自主實驗的機(jī)會,充分放手讓學(xué)生真正培養(yǎng)學(xué)生的實踐動手能力,全面提高學(xué)生的綜合素質(zhì)。</p><p> 在設(shè)計的過程中遇到問題,可以說得是困難重重,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,不過設(shè)計終于順利完成了,在設(shè)計中遇到了很多編程問題,最后在老師的辛勤指導(dǎo)下,終于游逆而解。同時,在老
20、師的身上我學(xué)得到很多實用的知識,再次我表示感謝!同時,對給過我們幫助的所有同學(xué)和各位指導(dǎo)老師再次表示忠心的感謝!</p><p> 在設(shè)計過程中,查詢了不少相關(guān)資料,不斷的發(fā)現(xiàn)問題、提出問題、解決問題。在對自己所編寫的源程序段的糾錯的過程中,使我更好的理解了操作系統(tǒng)中文件系統(tǒng)的理論知識,同時在編程時用到了模塊化的設(shè)計思想,這種編程方法可以使我們的編程變的更簡單,可以使我們的查錯與糾錯變的更方便??偟膩碚f通過這次
21、的設(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><b> 1. 教材</b></p>&
22、lt;p> [1] 張堯?qū)W主編.計算機(jī)操作系統(tǒng)教程(第三版).北京:清華大學(xué)出版社,2006</p><p><b> 2. 主要參考書 </b></p><p> [1] 張堯?qū)W編.計算機(jī)操作系統(tǒng)教程(第三版)習(xí)題解答與實驗指導(dǎo).北京:清華大學(xué)出版社,2006</p><p> [2] 湯子瀛主編.計算機(jī)操作系統(tǒng)(第三版).西安
23、:西安電子科技大學(xué)出版社,2001 </p><p> [3] 張坤等編.操作系統(tǒng)實驗教程.北京:清華大學(xué)出版社,2008</p><p> [4] 張麗芬等編.操作系統(tǒng)實驗教程.北京:清華大學(xué)出版社,2006</p><p> [5] Andrew S.Tanenbaum. Modern Operating Systems, Second Edition.E
24、nglewood Cliffs,N.J,Prentice Hall, 2001</p><p> [6] 屠祁等編.操作系統(tǒng)基礎(chǔ)(第三版).北京:清華大學(xué)出版社,2000</p><p> [7] 馮耀霖等編.操作系統(tǒng).西安:西安電子科技大學(xué)出版社,2001</p><p> [8] 左萬歷.計算機(jī)操作系統(tǒng)教程(第二版).北京:高等教育出版社,2004<
25、/p><p><b> 附錄 程序清單</b></p><p> #include "iostream.h"</p><p> #include "string"</p><p> #include "stdio.h"</p><p>
26、; extern "C" void exit(int);</p><p> struct filename //文件目錄項結(jié)構(gòu)體 </p><p><b> {</b></p><p> char name[12];
27、//文件名</p><p> char ext[8]; //擴(kuò)展名//擴(kuò)展名較小設(shè)為10</p><p> int i; //文件所占用磁盤塊的第一個磁盤塊號</p><p> int Amount; //文件所占用磁盤塊的塊數(shù)</p>
28、;<p> long int size; //文件大小</p><p> }file[20];</p><p><b> int num;</b></p><p> struct empty //盤塊結(jié)構(gòu)體</p><p>
29、; { int map[20]; //盤塊位示圖</p><p> int filenum; //文件數(shù)量</p><p> }emptytable; </p><p><b> //模塊說明:</b></p><p> void S
30、ystemInit() //模擬磁盤文件初始化函數(shù)</p><p><b> { </b></p><p> for(int i=2;i<19;i++) { //初始化存放位示圖的盤塊</p><p> emptytable.map[i]=0;</p&
31、gt;<p><b> }</b></p><p> emptytable.map[0]=1;</p><p> emptytable.map[1]=1;</p><p> emptytable.filenum=0;</p><p><b> FILE *fp;</b>&l
32、t;/p><p> if((fp=fopen("filesys","wb+"))==NULL) //wb+:為讀寫建立一個"新"文件;打開系統(tǒng)文件將文件目錄盤塊和用“w”打開的文件只能向該文件寫入。若打開的文件不存在,則以指定的文件名建立該文件,若打開的文件已經(jīng)存在,則將該文件刪去,重建一個新文件。+: 讀和寫</p><p>
33、 { //位示圖盤塊寫入系統(tǒng)文件</p><p> printf("can not open file \n");</p><p><b> exit(0);</b></p><p><b> }</b></p>&l
34、t;p> 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(指針偏移量)個字節(jié)的位置。如果執(zhí)行失敗(offset超過文件自身大小),則不改變stream指向
35、的位置。成功,返回0,否則返回其他值。</p><p> fwrite(&emptytable,sizeof(struct empty),1,fp); //把結(jié)構(gòu)體emptyable中的內(nèi)容寫入到fp中,數(shù)據(jù)項的大小為struct empty,數(shù)據(jù)項的個數(shù)為1</p><p> fclose(fp);</p><p> printf("
36、!!!初始化系統(tǒng)成功!!!");</p><p><b> }</b></p><p> void WriteFile() //將目錄以及空閑盤塊表寫入磁盤</p><p> { </p><p><b> FIL
37、E *fp;</b></p><p> if((fp=fopen("filesys","rb+"))==NULL)</p><p><b> {</b></p><p> printf("can not open file \n");</p><p
38、><b> exit(0);</b></p><p><b> }</b></p><p> rewind(fp); //將文件內(nèi)部的位置指針重新指向一個流(數(shù)據(jù)流/文件)的開頭</p><p> for(int i=0;i<num;i++)</p><p><b&
39、gt; {</b></p><p> fwrite(&file[i],sizeof(struct filename),1,fp); //文件目錄</p><p><b> }</b></p><p> fseek(fp,512L,0);</p><p> fwrite(&em
40、ptytable,sizeof(struct empty),1,fp); //位示圖</p><p> fclose(fp);</p><p><b> }</b></p><p> void dir() //顯示文件目錄</p>
41、<p> { int i,j;</p><p><b> FILE *fp;</b></p><p> if((fp=fopen("filesys","rb"))==NULL)</p><p> {printf("can not open file \n");
42、</p><p><b> exit(0);</b></p><p><b> } </b></p><p> fseek(fp,512L,0); //空閑盤塊表的定位</p><p> fread(&emptyta
43、ble,sizeof(struct empty),1,fp);</p><p> rewind(fp); //文件目錄表的定位</p><p> num=emptytable.filenum;</p><p> for(i=0;i<num;i++)</p><
44、;p> fread(&file[i],sizeof(struct filename),1,fp);</p><p> if (num!=0)</p><p> { printf("系統(tǒng)所有文件:\n");</p><p> for(i=0,j=1;i<num;i++,j++)</p><p>&
45、lt;b> { </b></p><p> printf("%s.%s",file[i].name,file[i].ext);</p><p><b> if(j==5)</b></p><p> { printf("\n");</p><p><
46、b> j=1;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> printf("\n文件數(shù)量為 %d ",num);</p>
47、<p> fclose(fp);</p><p><b> }</b></p><p> void type() //顯示文件內(nèi)容</p><p><b> { </b></p><p><b>
48、; FILE *fp;</b></p><p><b> int i,j;</b></p><p> if((fp=fopen("filesys","rb"))==NULL)</p><p> {printf("can not open file \n");<
49、;/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&
50、gt; rewind(fp);</p><p> num=emptytable.filenum;</p><p> for(i=0,j=0;i<num;i++,j++)</p><p> { fread(&file[i],sizeof(struct filename),1,fp);</p><p> print
51、f("%s.%s",file[i].name,file[i].ext); </p><p> if(j==5) printf("\n");</p><p><b> }</b></p><p> printf("\n");</p><p>
52、 char name[12],ext1[8];</p><p> printf("請輸入所要查詢的文件名:\n");</p><p> gets(name); //scanf("%s",name);//getchar(); </p><p> printf("請輸入擴(kuò)展名:");<
53、;/p><p> gets(ext1); //scanf("%s",ext1);getchar();</p><p> if(*(name+0)=='\0')</p><p><b> {</b></p><p> printf("文件名不能為空 ! \n&qu
54、ot;);</p><p><b> return;</b></p><p><b> }</b></p><p> if(*ext1=='\0') </p><p> strcpy(ext1,"txt");</p><p>
55、 int sign=0;</p><p> for(i=0;i<num;i++)</p><p> if((strcmp(file[i].name,name)==0) && (strcmp(file[i].ext,ext1)==0))</p><p> { printf("---所找文件為第%d個文件----\n&qu
56、ot;,i+1); </p><p><b> sign=1;</b></p><p><b> break;</b></p><p><b> }</b></p><p> if(sign==0)</p><p> { printf(&q
57、uot;無此文件\n");</p><p><b> return;</b></p><p><b> }</b></p><p><b> //顯示文件</b></p><p> int b,m,n ;</p><p> b=fil
58、e[i].i;</p><p> n=file[i].size;</p><p> printf("---該文件位于第%d塊\n",b+1); </p><p> printf("---從文件讀出的文件長度為:%d---\n",n);</p><p> /
59、/fseek(fp,b*512L,0);</p><p><b> char cc;</b></p><p> printf("---文件內(nèi)容為:---\n");</p><p> printf(""); </p><p> for( m=0,j=1; m&l
60、t;n; m++,j++) </p><p><b> { </b></p><p> fseek(fp,b*512L+m,0);</p><p> //fread(&cc,sizeof(char),1,fp); </p><p> cc=fgetc(fp);
61、 </p><p> printf("%c",cc);</p><p> if(j%40==0)printf("\n");</p><p><b> }</b></p><p> printf("\n"); </p><p&
62、gt; fclose(fp);</p><p><b> }</b></p><p> void delfile() //刪除一個文件</p><p><b> { </b></p><p><b>
63、; FILE *fp;</b></p><p><b> int i;</b></p><p> if((fp=fopen("filesys","r"))==NULL)</p><p><b> {</b></p><p> printf
64、("can not open file \n");</p><p><b> exit(0);</b></p><p><b> }</b></p><p> fseek(fp,512L,0);</p><p> fread(&emptytable,sizeof(
65、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 filename),1,fp);<
66、/p><p> char name[12],ext1[8];</p><p> printf("請輸入文件名:\n");</p><p> gets(name);</p><p> //scanf("%s",name);getchar();</p><p> printf(
67、"請輸入擴(kuò)展名:\n");</p><p> gets(ext1);</p><p> //scanf("%s",ext1);getchar();</p><p> if(*name=='\0'){</p><p> printf("文件名不能為空 ! \n&quo
68、t;); </p><p><b> return;</b></p><p><b> }</b></p><p> if(*ext1=='\0') strcpy(ext1,"txt");</p><p> char judge;</p>
69、<p> printf("是否刪除文件%s.%s [y/n]",name,ext1);</p><p> scanf("%c",&judge); getchar();</p><p> if((judge=='y')||(judge=='Y'))</p><p>
70、 printf("準(zhǔn)備刪除文件%s.%s !\n",name,ext1);</p><p> else if((judge=='n')||(judge=='N')) return;</p><p><b> else</b></p><p><b> {</b>&
71、lt;/p><p> printf("系統(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+
72、+){</p><p> if((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&
73、gt; break;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(sign==0)</p><p> { printf("文件名錯\n"); </p><p>&
74、lt;b> return; </b></p><p><b> }</b></p><p><b> //回收空間</b></p><p> int b=file[i].i;</p><p> int Amount=file[i].Amount;</p>
75、<p><b> int j;</b></p><p> for(j=0;j<Amount;j++)</p><p> emptytable.map[b++]=0;</p><p> for( j=i;j<num-1;j++)</p><p><b> { </b>
76、</p><p> strcpy(file[j].name,file[j+1].name);</p><p> strcpy(file[j].ext,file[j+1].ext);</p><p> file[j].i=file[j+1].i;</p><p> file[j].size=file[j+1].size;</p&g
77、t;<p> file[j].Amount=file[j+1].Amount;</p><p><b> }</b></p><p> emptytable.filenum=emptytable.filenum-1;</p><p> num=emptytable.filenum;</p><p>
78、 WriteFile();</p><p> printf("刪除成功!\n");</p><p> fclose(fp);</p><p><b> }</b></p><p> void copy() //復(fù)制
79、一個文件</p><p><b> { </b></p><p><b> FILE *fq;</b></p><p> int i,j,sign;</p><p> if((fq=fopen("filesys","rb+"))==NULL){&l
80、t;/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><p> fr
81、ead(&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[i],sizeof
82、(struct filename),1,fq);</p><p><b> }//for</b></p><p> char SourceName[12],DestName[12],ext1[8],ext2[8];</p><p> printf("請輸入源文件名:");</p><p> g
83、ets(SourceName); //scanf("%s",SourceName);getchar();</p><p> printf("請輸入源文件擴(kuò)展名:");</p><p> gets(ext1); //scanf("%s",ext1
84、);getchar();</p><p> printf("請輸入目標(biāo)文件名:");</p><p> gets(DestName); //scanf("%s",DestName);getchar();</p><p> printf("請輸入目標(biāo)擴(kuò)展文件名")
85、;</p><p> gets(ext2); getchar(); //scanf("%s",ext2);getchar();</p><p> if(*ext2=='\0') strcpy(ext2,"txt");</p><p> if((*SourceName)
86、=='\0' || (*DestName)=='\0'){</p><p> printf("錯誤! 文件名不能為空!\n");</p><p><b> return;</b></p><p><b> }</b></p><p> if
87、(strcmp(SourceName,DestName)==0){</p><p> printf("錯誤! 兩個文件名不能相同!\n");</p><p><b> return;</b></p><p><b> }</b></p><p><b> sig
88、n=0;</b></p><p> for(i=0;i<num;i++){</p><p> if(strcmp(SourceName,file[i].name)==0)</p><p> { sign=1;</p><p> strcpy(file[num].name,DestName);</p>
89、<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;</p><p> break;
90、 </p><p><b> }</b></p><p><b> }//for </b></p><p> if(sign==0)</p><p><b> { </b></p>
91、<p> printf("不存在源文件\n");</p><p><b> return;</b></p><p><b> }</b></p><p> if (i<num)</p><p> printf("輸入的文件名與第%d個源文件相
92、等(i從0開始)\n",i); </p><p><b> //空間分配</b></p><p><b> sign=0;</b></p><p> for(int m=2 ; m<=19-file[num].Amount ; m++) //********************</p
93、><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>
94、<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> }//if<
95、;/b></p><p><b> }//for</b></p><p> if(sign==0) break;</p><p><b> m+=j-1;</b></p><p><b> sign=0;</b></p><p>&l
96、t;b> }</b></p><p><b> }// for</b></p><p> if (m <= 19-file[num].Amount){</p><p> for(j=0;j < file[num].Amount;j++)emptytable.map[m+j]=1;</p>&
97、lt;p> file[num].i=m;</p><p><b> }</b></p><p><b> else</b></p><p> printf("沒有足夠的連續(xù)的盤塊數(shù)");</p><p><b> //寫數(shù)據(jù)</b></
98、p><p> FILE *fq1;</p><p> rewind(fq);</p><p><b> fq1=fq;</b></p><p> fseek(fq,(file[i].i) * 512L,0); </p><p> printf("\n---源文件的起始盤塊號:%d&
99、quot;,file[i].i); </p><p> //rewind(fp1);</p><p> fseek(fq1,(file[num].i) * 512L,0);</p><p> printf("\n---復(fù)制文件的起始盤塊號:%d",file[num].i); </p>&
100、lt;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&
101、gt; fseek(fq,(file[i].i) * 512L+k,0); </p><p> fread(&cc,sizeof(char),1,fq); </p><p> printf("%c",cc);</p><p> fseek(fq1,(file[num].i) * 512L+k,0);
102、 </p><p> fwrite(&cc,sizeof(char),1,fq1);</p><p><b> }</b></p><p> printf("\n"); </p><p> num=num+1;</p><p> emptytable.fil
103、enum=num;</p><p> WriteFile(); //寫目錄及位示圖</p><p> fclose(fq);</p><p> fclose(fq1);</p><p><b> }</b></p><p> v
104、oid mkfile() //建立一個文件 </p><p> {FILE *fp;</p><p> if((fp=fopen("filesys","r+"))==NULL){</p><p> printf("can no
105、t open file\npleace Initialization at first\n");</p><p><b> exit(0);</b></p><p><b> }</b></p><p> struct strNode //數(shù)據(jù)塊</p><p> {ch
106、ar word[64];</p><p> struct strNode *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 strNod
107、e; //申請結(jié)構(gòu)體內(nèi)存空間</p><p><b> char ch;</b></p><p> printf("請輸入文件內(nèi)容,按 @ 鍵保存且退出!\n");</p><p><b> do{</b></p><p> for(i=0;i<64;i++)<
108、;/p><p><b> {</b></p><p> //ch=getchar();</p><p> scanf("%c",&ch);</p><p> p->word[i]=ch;</p><p> if(ch=='@')break;&
109、lt;/p><p><b> }</b></p><p> if(ch!='@')</p><p><b> {</b></p><p> p=new struct strNode;</p><p> q->next=p;</p>&
110、lt;p><b> q=p;</b></p><p><b> j++;</b></p><p><b> }</b></p><p> }while(ch!='@');</p><p> getchar();</p><p&
111、gt; int num1, size=(j*64+i)*sizeof(char); //j為結(jié)構(gòu)體的個數(shù),i為不足一個結(jié)構(gòu)體的字符數(shù)</p><p><b> ////////</b></p><p> printf("文件長度為:%d\n",size);</p><p> char judge='n
112、39;;</p><p><b> do{</b></p><p> printf("請輸入文件的英文名字:");</p><p> gets(name);</p><p> //scanf("%s",name);getchar();</p><p>
113、; printf("請輸入文件的擴(kuò)展名:");</p><p> gets(ext1);</p><p> //scanf("%s",ext1);getchar();</p><p> if(*ext1=='\0') strcpy(ext1,"txt");</p>&l
114、t;p> judge='y';</p><p> if(*name=='\0')</p><p><b> {</b></p><p> printf("錯誤!文件名不能為空!\n");</p><p> printf("是否放棄此文件[Y/N
115、] ");</p><p> scanf("%c",&judge);getchar();</p><p> if( (judge=='y') || (judge=='Y') ) </p><p><b> return;</b></p><p>
116、<b> }</b></p><p> }while( (judge=='n') || (judge=='N') );</p><p> fseek(fp,512L,0);</p><p> fread(&emptytable,sizeof(struct empty),1,fp);</p&g
117、t;<p> rewind(fp);</p><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
118、("%s.%s\n",file[i].name,file[i].ext);</p><p><b> }*/</b></p><p> for (i=0;i<num;i++){</p><p> if((strcmp(file[i].name,name)==0) && (strcmp(file[i
119、].ext,ext1)==0)){</p><p> printf("! 錯誤 ! 兩個文件名不能相同\n");</p><p><b> return;</b></p><p><b> }</b></p><p><b> }</b></p
120、><p> num1=size/512;</p><p> if((size%512)>0) num1=num1+1;</p><p> strcpy(file[num].name,name);</p><p> //printf("%d%s%s",num,file[num].name,name);</
121、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><p><b> //空間分配</b&g
122、t;</p><p> for(int m=2 ; m <=10-num1; m++){ //****************************</p><p> if(emptytable.map[m]==0){ </p><p> for(n=file[num].Amount; n>0; n--){</p>
123、<p> if(emptytable.map[m+n-1]==1){</p><p><b> sign=1;</b></p><p><b> break;</b></p><p><b> }//if</b></p><p><b> }//
124、for</b></p><p> if(sign==0)break;</p><p><b> m+=n-1;</b></p><p><b> sign=0;</b></p><p><b> }//if</b></p><p>&
125、lt;b> }//for</b></p><p> if(m<=10-num1)</p><p> file[num].i = m; //***********************************************</p><p> else
126、 </p><p><b> {</b></p><p> printf("空間不足!\n");</p><p><b> return;</b></p><p><b> }</b></p><p&
127、gt; for(j=0;j < file[num].Amount;j++){</p><p> emptytable.map[m+j]=1;</p><p><b> }</b></p><p> num=num+1;</p><p> emptytable.filenum=num;</p>
128、<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;</p><p> p=head
129、; 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>=64)</b></p>
130、<p><b> { i=0;</b></p><p> p=p->next;</p><p><b> }</b></p><p> // cycle--;</p><p><b> }</b></p><p> re
131、wind(fp);</p><p> for(j=0,i=0;i<num;i++,j++){</p><p> //printf("斷點%d\n",i);</p><p> fread(&file[i],sizeof(struct filename),1,fp);</p><p> //printf(
132、"%s\n",file[i].name);</p><p> printf("%s.%s",file[i].name,file[i].ext);</p><p> if(j==5) printf("\n");</p><p><b> }</b></p><
133、p> fclose(fp);</p><p><b> }</b></p><p> void rename(){</p><p><b> FILE *fp;</b></p><p> if((fp=fopen("filesys","rb+"
134、))==NULL){</p><p> printf("can not open file\npleace Initialization at first\n");</p><p><b> exit(0);</b></p><p><b> }</b></p><p>
135、 char sourse[12],sext[8],object[12],oext[8];</p><p> int num,sign;</p><p> printf("請輸入需要重命名的文件名和擴(kuò)展名:\n");</p><p> gets(sourse);</p><p> gets(sext);</p
136、><p> printf("請輸入新的名字和擴(kuò)展名:\n");</p><p> gets(object);</p><p> gets(oext);</p><p> fseek(fp,512L,0);</p><p> fread(&emptytable,sizeof(struct
137、 empty),1,fp);</p><p> num = emptytable.filenum;</p><p> rewind(fp);</p><p> for(int i=0;i<num;i++){</p><p> fread(&file[i],sizeof(struct filename),1,fp);<
138、;/p><p><b> }</b></p><p><b> sign = 0;</b></p><p> for( i = 0;i<num;i++){</p><p> if((strcmp(file[i].name,sourse)==0) && (strcmp(fil
139、e[i].ext,sext)==0)){</p><p><b> sign = 1;</b></p><p> strcpy(file[i].name,object);</p><p> if(*oext == '\0')</p><p> strcpy(file[i].ext,file[i]
140、.ext);</p><p><b> else</b></p><p> strcpy(file[i].ext,oext);</p><p><b> break;</b></p><p><b> }//if</b></p><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)方式做保護(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)的實現(xiàn)
- 操作系統(tǒng)課程設(shè)計--簡單文件系統(tǒng)的實現(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)
- 操作系統(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).doc
- 操作系統(tǒng)課程設(shè)計--基于linux的模擬文件系統(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)管理)
- 操作系統(tǒng)課程設(shè)計----二級文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計--多用戶多級目錄文件系統(tǒng)實現(xiàn)
- 操作系統(tǒng)課程設(shè)計---多用戶多級目錄文件系統(tǒng)的實現(xiàn)
評論
0/150
提交評論