版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 操作系統(tǒng)課程設(shè)計(jì)</b></p><p><b> -模擬文件系統(tǒng)</b></p><p><b> 一.實(shí)驗(yàn)?zāi)康?lt;/b></p><p> 用高級(jí)語(yǔ)言編寫和調(diào)試一個(gè)簡(jiǎn)單的文件系統(tǒng)。模擬文件管理的工作過程。加深理解文件系統(tǒng)的內(nèi)部功能和內(nèi)部實(shí)現(xiàn)。</p>
2、<p><b> 二.基本要求</b></p><p> 在任意一個(gè)OS下,建立一個(gè)大文件,把它假象成一張盤,在其中實(shí)現(xiàn)一個(gè)簡(jiǎn)單的模擬UNIX文件系統(tǒng) 。 </p><p> 可以實(shí)現(xiàn)下列幾條命令</p><p> DIR 列文件目錄</p><p> CREATE 創(chuàng)建文
3、件</p><p> MD 創(chuàng)建目錄</p><p> DELF 刪除文件</p><p> DELD 刪除目錄</p><p> CD 改變當(dāng)前目錄</p><p> SAVEF 保存文件</p><p>
4、 SAVED 保存目錄</p><p> HELP 獲得命令的幫助</p><p> EXIT 退出系統(tǒng)</p><p><b> 三.設(shè)計(jì)思想說(shuō)明</b></p><p><b> 1.設(shè)計(jì)環(huán)境</b></p><p>
5、 課程設(shè)計(jì)的環(huán)境是windows xp sp2操作系統(tǒng)。在windows系統(tǒng)中創(chuàng)建一個(gè)較大容量的文件,作為所設(shè)計(jì)文件系統(tǒng)的假想的“文件卷”,從而編寫各程序模塊。</p><p><b> 2.開發(fā)環(huán)境</b></p><p> 課程設(shè)計(jì)所使用的開發(fā)環(huán)境是VC++ 6.0</p><p><b> 3.基本思想</b>
6、</p><p> 以 1M 的存儲(chǔ)器空間作為文件空間,空間“分塊”。超級(jí)塊,在最前面,共占3.2k個(gè)字節(jié)。其中0.2K個(gè)字節(jié)存放目錄節(jié)點(diǎn)的位示圖,1K個(gè)字節(jié)存放文件節(jié)點(diǎn)的位示圖,2k字節(jié)存放盤塊節(jié)點(diǎn)的位示圖。用位狀態(tài)='0'表示空閑,狀態(tài)='1'表示已分配。后半部用于存放目錄接點(diǎn)和文件接點(diǎn)。超級(jí)塊不參與文件空間的動(dòng)態(tài)分配。其他塊用于存貯目錄接點(diǎn)和文件接點(diǎn)的信息。</p&g
7、t;<p><b> 四.需求分析</b></p><p> 該模擬文件系統(tǒng)包括目錄文件(簡(jiǎn)稱目錄)、普通文件(簡(jiǎn)稱文件),并實(shí)現(xiàn)下面一些基本功能:</p><p> 1.改變目錄:CD 〈目錄名〉,工作目錄轉(zhuǎn)到指定的目錄下。</p><p> 2.創(chuàng)建文件:CREATE 〈文件名〉,創(chuàng)建一個(gè)指定名字的新文件,即在目錄中增
8、加一項(xiàng),不考慮文件的內(nèi)容。</p><p> 3.刪除文件:DELF 〈文件名〉,刪除指定的文件。</p><p> 4.顯示目錄:DIR [〈目錄名〉],顯示目錄下全部文件和第一級(jí)子目錄,如果沒有指定路徑名,則顯示當(dāng)前目錄下的內(nèi)容。</p><p> 5.創(chuàng)建目錄:MD 〈目錄名〉,再指定路徑下創(chuàng)建指定的目錄,或者在沒有指定路徑時(shí),在當(dāng)前目錄下創(chuàng)建子目錄。&
9、lt;/p><p> 6.刪除目錄:DELD〈目錄名〉,刪除指定的目錄。</p><p> 7. 保存文件SAVEF 〈目錄名〉 保存指定文件</p><p> 8. 保存目錄 SAVED〈文件名〉,保存指定目錄</p><p> 9. 獲得命令幫助 HELP </p><p> 10. 退出文件系統(tǒng)
10、EXIT</p><p><b> 要考慮的特殊情況:</b></p><p> 1.各個(gè)命令對(duì)全路徑和相對(duì)路徑的支持</p><p> <1>.目錄不存在時(shí),給出錯(cuò)誤信息</p><p> <2>.不能用cd 進(jìn)入文件</p><p> <3>.相對(duì)
11、路徑的解析</p><p> <4>.路徑中的空格剔除</p><p> 2.新建目錄或文件時(shí)的問題</p><p><b> <1>重名問題; </b></p><p> <2>目錄或文件的名字長(zhǎng)度限制;</p><p> <3>目錄或文
12、件的名字中包含不合法字符(注意空格)</p><p> 3.刪除目錄或文件時(shí)的問題</p><p> <1>刪除不存在的文件或目錄,給出錯(cuò)誤提示</p><p> <2>刪除目錄時(shí)目錄不為空; 如果該目錄為空,則可刪除,否則給出是否做刪除,刪除操作將該目錄下的全部文件和子目錄都刪除</p><p> <3
13、>進(jìn)入到某個(gè)目錄下,卻要?jiǎng)h除本目錄或者上級(jí)目錄</p><p> 4.保存目錄和文件時(shí)的問題</p><p> <1>保存不存在的文件和目錄,給出錯(cuò)誤的提示</p><p> <2>保存目錄時(shí),應(yīng)當(dāng)保存其下的的子目錄和文件</p><p><b> 五.系統(tǒng)設(shè)計(jì)</b></p&
14、gt;<p><b> 流程圖</b></p><p><b> 數(shù)據(jù)結(jié)構(gòu)</b></p><p> <1>目錄文件結(jié)點(diǎn)信息存儲(chǔ)結(jié)構(gòu):</p><p> struct dir_node //目錄節(jié)點(diǎn)
15、 </p><p><b> {</b></p><p> SYSTEMTIME ctime; //創(chuàng)建時(shí)間</p><p> char dir_name[32]; //目錄名 </p><p
16、> int child_dir[8]; //子目錄索引 </p><p> int dir_count; //當(dāng)前子目錄數(shù) </p><p> int child_file[16];
17、 //子文件索引 </p><p> int file_count; //當(dāng)前子文件數(shù)</p><p> int parent; //父目錄索引</p><p><b> }</b></p>
18、<p> <2>文件目錄存儲(chǔ)位置存儲(chǔ)結(jié)構(gòu):</p><p> struct file_node //文件節(jié)點(diǎn)</p><p><b> {</b></p><p> SYSTEMTIME ctime; //創(chuàng)建時(shí)間
19、</p><p> char file_name[32]; //文件名 </p><p> int block[4]; //該文件占有的磁盤塊索引</p><p> int block_count;
20、 //該文件當(dāng)前占有的磁盤塊數(shù)</p><p> int file_length; //文件長(zhǎng)度 </p><p> int parent; //父目錄索引</p><p><b> } ;</b>&
21、lt;/p><p> <3>文件、目錄、盤塊的占用的標(biāo)志位</p><p> int dir_flag[DIR_NUM]; //各目錄節(jié)點(diǎn)占用標(biāo)志,0表示空閑,1表示被占用</p><p> int file_flag[FILE_NUM]; //各文件節(jié)點(diǎn)的占用標(biāo)志</p>
22、<p> int block_flag[BLOCK_NUM]; //磁盤塊的占用標(biāo)志 </p><p> <4>常駐內(nèi)存的標(biāo)志文件(目錄)修改的標(biāo)志位和標(biāo)志文件(目錄)修改標(biāo)志位的標(biāo)志位</p><p> int dir_change_flag[DIR_NUM]; //用于標(biāo)志目錄節(jié)
23、點(diǎn)的修改 </p><p> int file_change_flag[FILE_NUM]; //用于標(biāo)志文件節(jié)點(diǎn)的修改 </p><p> int dirflag_flag[DIR_NUM]; //用于標(biāo)志dir_flag
24、[DIR_NUM]的修改</p><p> int fileflag_flag[FILE_NUM]; //用于標(biāo)志file_flag[FILE_NUM]的修改</p><p> int blockflag_flag[BLOCK_NUM]; //用于標(biāo)志block_flag[BLOCK_NUM]的修改 </p>
25、;<p> <5>記錄當(dāng)前路徑和當(dāng)前目錄的全局變量</p><p> int curr; //當(dāng)前目錄索引 </p><p> dir_node *curr_dir; //當(dāng)前目錄節(jié)點(diǎn)指針
26、 </p><p> char curr_path[512]; //當(dāng)前路徑 </p><p><b> 主要模塊說(shuō)明</b></p><p><b> <1>創(chuàng)建文件</b></p><p> int get_file
27、(int parent,char *file_name) //創(chuàng)建文件節(jié)點(diǎn),成功則返回文件的索引號(hào),失敗返回-1</p><p><b> {</b></p><p> int index;</p><p> if(search(parent,file_name,1,index)!=-1) //搜索在父目錄下是否有同名文件存在,有則創(chuàng)建
28、失敗</p><p><b> {</b></p><p> printf("File name repeated!\n");</p><p> return -1;</p><p><b> }</b></p><p> for(int i=0
29、;i<FILE_NUM;i++) //搜索空閑的文件節(jié)點(diǎn) </p><p> if(file_flag[i]==0)</p><p><b> {</b></p><p> strcpy(file[i].file_name,file_name);</p><p&
30、gt; file[i].block_count=0;</p><p> if(get_block(i)==-1) //給新創(chuàng)建的文件申請(qǐng)磁盤塊,如果失敗,創(chuàng)建文件將失敗 </p><p> { </p><p> printf("Disk volumn
31、error!\n");</p><p> return -1;</p><p><b> }</b></p><p> file_flag[i]=1;</p><p> fileflag_flag[i]++; //登記并給文件節(jié)點(diǎn)初始化</p><p> fi
32、le_change_flag[i]++;</p><p> file[i].file_length=0;</p><p> file[i].parent=parent;</p><p> GetLocalTime(&file[i].ctime); //獲得當(dāng)前時(shí)間</p><p> return i; <
33、;/p><p><b> }</b></p><p> return -1;</p><p><b> }</b></p><p> int create_file(int parent,char *file_name) //在指定的目錄下創(chuàng)建文件,如果創(chuàng)建成功則返回 </p>
34、<p> { //文件的索引號(hào),否則返回-1</p><p> if(dir[parent].file_count==16) //如果父目錄已滿,則創(chuàng)建失敗</p><p><b> {</b></p><p> printf
35、("Parent directory is full!\n");</p><p> return -1;</p><p><b> }</b></p><p> int pos=get_file(parent,file_name); //開始創(chuàng)建文件</p><p&g
36、t; if(pos==-1)</p><p><b> {</b></p><p> printf("Create file error!\n");</p><p> return -1;</p><p><b> }</b></p><p>
37、 dir_node *p=&dir[parent]; //修改父目錄的控制信息</p><p> int top=p->file_count; </p><p> p->child_file[top]=pos;</p><p> p->file_count++;</p>
38、<p> dir_change_flag[parent]++;</p><p> return pos;</p><p><b> }</b></p><p> int create(char *name) //創(chuàng)建文件的主調(diào)函數(shù),前提是已經(jīng)取得要?jiǎng)?chuàng)建文件的索引</p><p>
39、 { //成功返回文件的索引號(hào),否則返回-1</p><p> int parent,p=0;</p><p> parent=get_parent(name,p);</p><p> if(parent==-1) //找不到父目錄,輸入錯(cuò)誤,創(chuàng)
40、建失敗</p><p><b> {</b></p><p> printf("Path name error!\n");</p><p> return -1;</p><p><b> }</b></p><p> return create
41、_file(parent,name+p); //開始創(chuàng)建文件</p><p><b> }</b></p><p><b> <2>創(chuàng)建目錄</b></p><p> int create_dir(int parent,char *dir_name) //在指定的目錄下創(chuàng)建目
42、錄,如果成功則返回目錄 </p><p> { //的索引號(hào),否則返回-1</p><p> if(dir[parent].dir_count==8) //如果父目錄已滿,則創(chuàng)建失敗</p><p><b>
43、; {</b></p><p> printf("Parent directory is full!\n");</p><p> return -1;</p><p><b> }</b></p><p> int pos=get_dir(parent,dir_name);
44、 //開始創(chuàng)建目錄</p><p> if(pos==-1)</p><p><b> {</b></p><p> printf("Create directory error!\n");</p><p> return -1;</p><p>&
45、lt;b> }</b></p><p> dir_node *p=&dir[parent]; //修改父目錄的控制信息</p><p> int top=p->dir_count; </p><p> p->child_dir[top]=pos;</p><
46、p> p->dir_count++;</p><p> dir_change_flag[parent]++;</p><p> return pos;</p><p><b> }</b></p><p> int md(char *name) //創(chuàng)建目
47、錄的主調(diào)函數(shù),它的參數(shù)只有用戶輸入</p><p> { //如果創(chuàng)建成功,則返回目錄的索引號(hào),否則</p><p> int parent,p=0; //返回-1</p><p> parent=get_parent(na
48、me,p);</p><p> if(parent==-1) //父目錄找不到,輸入有誤,創(chuàng)建失敗</p><p><b> {</b></p><p> printf("Path name error!\n");</p><p> re
49、turn -1;</p><p><b> }</b></p><p> return create_dir(parent,name+p); //開始創(chuàng)建目錄</p><p><b> }</b></p><p><b> <3>刪除文件<
50、;/b></p><p> void del_file(int pos) //刪除文件,調(diào)用該函數(shù)的前提是已經(jīng)取得要?jiǎng)h除文件的索引號(hào) </p><p> { </p><p> return_block(pos
51、); //釋放磁盤塊</p><p> file_flag[pos]=0; </p><p> fileflag_flag[pos]++;</p><p> file_change_flag[pos]=0;</p><p><b> }</b></p&
52、gt;<p> int del_file(int parent,char *file_name) //在指定的目錄下刪除文件,刪除成功則返回文件的 </p><p> { //索引號(hào),否則返回-1</p><p> int del_pos,in
53、dex;</p><p> if((del_pos=search(parent,file_name,1,index))==-1)//搜索該文件是否存在,不存在則刪除失敗</p><p><b> {</b></p><p> printf("The file to delete not exist!\n");</
54、p><p> return -1;</p><p><b> }</b></p><p> del_file(del_pos); //開始刪除文件</p><p> dir_node *p=&dir[parent]; //修改
55、父目錄的控制信息</p><p> if(p->file_count>=2)</p><p><b> {</b></p><p> int top=p->file_count-1; </p><p> p->child_file[index]=p->child_f
56、ile[top];</p><p><b> }</b></p><p> p->file_count--;</p><p> dir_change_flag[parent]++;</p><p> return del_pos;</p><p><b> }</b
57、></p><p> int delfile(char *name) //刪除文件的主調(diào)函數(shù),前提是知道了刪除文件的名字</p><p><b> {</b></p><p> int parent,p=0;</p><p> parent=get_parent(name,p);<
58、/p><p> if(parent==-1)</p><p><b> {</b></p><p> printf("Path name error!\n");</p><p> return -1;</p><p><b> }</b></p
59、><p> return del_file(parent,name+p);</p><p><b> }</b></p><p><b> <4>刪除目錄</b></p><p> void del_dir(int pos) //刪除指定
60、的目錄節(jié)點(diǎn),該目錄已經(jīng)為空 </p><p><b> {</b></p><p> dir_flag[pos]=0; </p><p> dirflag_flag[pos]++;</p><p> dir_change_flag[pos]=0;</p>&
61、lt;p><b> }</b></p><p> void del(int pos) //刪除一個(gè)指定目錄及它下面的所有文件及所有目錄 </p><p><b> {</b></p><p> for(int i=0;i&
62、lt;dir[pos].file_count;i++) //刪除當(dāng)前目錄下的所有文件</p><p> del_file(dir[pos].child_file[i]);</p><p> for(i=0;i<dir[pos].dir_count;i++) //刪除子目錄</p><p> del(dir[pos
63、].child_dir[i]);</p><p> del_dir(pos); //刪除當(dāng)前目錄</p><p><b> }</b></p><p> void del_dir(int parent,int del_pos,int index) //在一個(gè)指定的目錄下刪除
64、一個(gè)目錄及它下面的 </p><p> { //所有 文件及所有目錄</p><p> del(del_pos); //開始刪除目錄</p><p> if(dir[pa
65、rent].dir_count>=2) //修改父目錄的控制信息</p><p><b> {</b></p><p> int top=dir[parent].dir_count-1;</p><p> dir[parent].child_dir[index]=dir[parent].child
66、_dir[top];</p><p><b> }</b></p><p> dir[parent].dir_count--;</p><p> dir_change_flag[parent]++;</p><p><b> }</b></p><p><b&g
67、t; <5>保存文件</b></p><p> void savefile(int file_id) //顯式保存文件的核心函數(shù)</p><p><b> {</b></p><p> if(fileflag_flag[file_id]%2!=0)
68、 //如果創(chuàng)建或刪除,需要寫回磁盤{</p><p> write_bit(file_id,1);</p><p> fileflag_flag[file_id]=0;</p><p><b> }</b></p><p> if(file_change_flag[fil
69、e_id]>0) //如果控制信息被修改,需要寫回磁盤</p><p> {write_inode(file_id,1);</p><p> file_change_flag[file_id]=0;</p><p> for(int i=0;i<file[file_id].block_count;i++)&l
70、t;/p><p><b> {</b></p><p> int temp=file[file_id].block[i];</p><p> if(blockflag_flag[temp]%2!=0) //如果磁盤塊被釋放或被占用,需要寫回磁盤{</p><p> write_bit(t
71、emp,2);</p><p> blockflag_flag[temp]=0;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> int save_fi
72、le(int parent,char *file_name) //顯式保存文件</p><p><b> {</b></p><p> int pos,index;</p><p> if((pos=search(parent,file_name,1,index))==-1)</p><p>&l
73、t;b> {</b></p><p> printf("The file not exist in current directory!\n");</p><p> return -1;</p><p><b> }</b></p><p> savedir(parent)
74、; //保存父目錄</p><p> savefile(pos);</p><p> return pos;</p><p><b> }</b></p><p> int savefile(char *name) //保存文
75、件的主調(diào)函數(shù),前提知道了要保存的文件名 </p><p><b> {</b></p><p> int parent,p=0;</p><p> parent=get_parent(name,p);</p><p> if(parent==-1)</p>
76、<p><b> {</b></p><p> printf("Path name error!\n");</p><p> return -1;</p><p><b> }</b></p><p> return save_file(parent,na
77、me+p);</p><p><b> }</b></p><p><b> <6>保存目錄</b></p><p> void save_dir(int dir_id) //保存空目錄函數(shù)</p><p><b> {
78、</b></p><p> if(dirflag_flag[dir_id]%2!=0) //如果刪除或創(chuàng)建,需要寫回磁盤{</p><p> write_bit(dir_id,0);</p><p> dirflag_flag[dir_id]=0;</p><p>&l
79、t;b> }</b></p><p> if(dir_change_flag[dir_id]>0) //如果控制信息被修改,需要寫回磁盤{</p><p> write_inode(dir_id,0);</p><p> dir_change_flag[dir_id]=0;</p>&
80、lt;p><b> }</b></p><p><b> }</b></p><p> void savedir(int dir_id) //保存一個(gè)目錄,及它的所有父目錄,用了遞歸</p><p><b> {</b></p><
81、p> if(dir_id==-1)</p><p><b> return;</b></p><p> save_dir(dir_id);</p><p> savedir(dir[dir_id].parent);</p><p><b> }</b></p><
82、p> void save(int dir_id) //保存一個(gè)目錄及它下面的所有目錄及文件</p><p> { //用了遞歸</p><p> for(int i=0;i<dir[dir_id].dir_count;i++)<
83、;/p><p> save(dir[dir_id].child_dir[i]);</p><p> for(i=0;i<dir[dir_id].file_count;i++)</p><p> savefile(dir[dir_id].child_file[i]);</p><p> save_dir(dir_id);</p&
84、gt;<p><b> }</b></p><p> int save_dir(int parent,char *dir_name) //顯式保存目錄</p><p><b> {</b></p><p> int pos,index;</p><p>
85、 if((pos=search(parent,dir_name,0,index))==-1)</p><p><b> {</b></p><p> printf("The file not exist in current directory!\n");</p><p> return -1;</p>
86、<p><b> }</b></p><p> savedir(parent); //保存父目錄</p><p> save(pos); //保存自身及下面的所有文件及目錄</p><p> write
87、_bit(pos,0);</p><p> return pos;</p><p><b> }</b></p><p> int saved(char *name) //保存目錄的主調(diào)函數(shù),前提是知道了保存目錄的名字</p><p><b> {</b><
88、/p><p> int parent,p=0;</p><p> parent=get_parent(name,p);</p><p> if(parent==-1)</p><p><b> {</b></p><p> printf("Path name error!\n&qu
89、ot;);</p><p> return -1;</p><p><b> }</b></p><p> return save_dir(parent,name+p);</p><p><b> }</b></p><p><b> <7>改
90、變目錄</b></p><p> void paste(int dir_id) //用于設(shè)置當(dāng)前路徑</p><p><b> {</b></p><p> if(dir_id==0)</p><p><b> return;</
91、b></p><p> paste(dir[dir_id].parent);</p><p> strcat(curr_path,dir[dir_id].dir_name);</p><p> strcat(curr_path,"/");</p><p><b> }</b></p
92、><p> int change_dir(char *name) //改變工作目錄,成功則返回該目</p><p> { //錄的索引號(hào),否則返回-1</p><p> int parent,p=0,pos,index;
93、</p><p> if(strcmp(name,"/")==0)</p><p><b> pos=0;</b></p><p> else if(strcmp(name,"..")==0)</p><p> pos=curr_dir->parent;</p&
94、gt;<p><b> else</b></p><p><b> {</b></p><p> parent=get_parent(name,p);</p><p> if(parent==-1)</p><p> {printf("Path name e
95、rror!\n");</p><p> return -1;</p><p><b> }</b></p><p> pos=search(parent,name+p,0,index);</p><p><b> }</b></p><p> if(
96、pos==-1) //如果該目錄不存在,則失敗</p><p><b> {</b></p><p> printf("The dictory not exist!\n");</p><p> return -1;</p><p&
97、gt;<b> }</b></p><p> curr_path[3]='\0';</p><p> paste(pos);</p><p> curr=pos; //改變當(dāng)前目錄及路徑</p><p> curr_dir
98、=&dir[curr]; </p><p> return curr; </p><p><b> }</b></p><p> <8>顯示當(dāng)前目錄下的文件和子目錄
99、信息</p><p> void show_dir(int dir_id) //以下幾個(gè)函數(shù)用于顯示當(dāng)前目錄下面的目錄和文件,</p><p> { //跟上面不同的是,它不能顯示目錄及文件之間的關(guān)系,</p><p> printf("%s",dir[dir
100、_id].dir_name); //但它可以顯示一些細(xì)節(jié),如創(chuàng)建時(shí)間,文件</p><p> for(int i=strlen(dir[dir_id].dir_name);i<20;i++)</p><p> printf(" ");</p><p> printf("<DIR>");</
101、p><p> for(i=25;i<30;i++)</p><p> printf(" ");</p><p> printf("%d-%.2d-%.2d%.2d:%.2d:%.2d\n",dir[dir_id].ctime.wYear,dir[dir_id].ctime.wMonth,dir[dir_id].ctim
102、e.wDay,dir[dir_id].ctime.wHour,dir[dir_id].ctime.wMinute,dir[dir_id].ctime.wSecond);</p><p><b> }</b></p><p> void show_file(int file_id) //顯示一個(gè)文件</p>&l
103、t;p> {printf("%s",file[file_id].file_name);</p><p> for(int i=strlen(file[file_id].file_name);i<20;i++)</p><p> printf(" ");</p><p> printf("<F
104、ILE>");</p><p> for(i=26;i<30;i++)</p><p> printf(" ");</p><p> printf("%d-%.2d-%.2d%.2d:%.2d:%.2d",file[file_id].ctime.wYear,file[file_id].ctime.w
105、Month,file[file_id].ctime.wDay,file[file_id].ctime.wHour,file[file_id].ctime.wMinute,file[file_id].ctime.wSecond);</p><p> for(i=0;i<8;i++)</p><p> printf(" ");</p><p&g
106、t; int length=file[file_id].file_length;</p><p> printf("len: %d bytes\n",length);</p><p><b> }</b></p><p> void show(int dir_id) //顯示
107、目錄及文件的核心函數(shù),用了遞歸思想 </p><p> {for(int i=0;i<dir[dir_id].file_count;i++)</p><p> show_file(dir[dir_id].child_file[i]);</p><p> for(i=0;i<dir[dir_id].di
108、r_count;i++)</p><p> show_dir(dir[dir_id].child_dir[i]);</p><p><b> }</b></p><p> void list() //顯示文件及目錄的主調(diào)函數(shù)</p><p&g
109、t;<b> { </b></p><p> show(curr); //該函數(shù)的參數(shù)表示根目錄的索引</p><p> printf("\n%d files.\n",curr_dir->file_count); //統(tǒng)計(jì)文件數(shù)</p><p&g
110、t; printf("\n%d dirs.\n",curr_dir->dir_count); //統(tǒng)計(jì)目錄數(shù)</p><p><b> }</b></p><p> <8>獲得系統(tǒng)的命令的幫助</p><p> void help() //打印命令及
111、解釋</p><p><b> {</b></p><p> printf("Commands: Explanation:\n\n");</p><p> printf(" exit -Exit!\n");</p>
112、;<p> printf(" dir -Show files and directories!\n");</p><p> printf(" create -Create a new file!\n");</p><p> printf(&quo
113、t; md -Create a new directory!\n");</p><p> printf(" delf -Delete a file!\n");</p><p> printf(" deld -De
114、lete a directory!\n");</p><p> printf(" cd -Change the current directory!\n");</p><p> printf(" help -Print commands!\n")
115、;</p><p> printf(" savef -Save a file!\n");</p><p> printf(" saved -Save a directory!\n");</p><p><b> }</b&
116、gt;</p><p> 六.運(yùn)行結(jié)果及運(yùn)行情況</p><p> 七.實(shí)驗(yàn)總結(jié)和自我評(píng)價(jià)</p><p> 本系統(tǒng)基本上實(shí)現(xiàn)文件系統(tǒng)的部分命令。如cd、dir、create、md、delf、deld等。而且通過采用樹型數(shù)據(jù)結(jié)構(gòu),可以最多顯示64級(jí)目錄,建立512個(gè)文件節(jié)點(diǎn)。但仍存在很大不足:</p><p> (1)沒有按照面向?qū)ο?/p>
117、思想設(shè)計(jì)程序結(jié)構(gòu),仍以函數(shù)為主,而不是對(duì)象為主;</p><p> (2)使用太多全局變量,浪費(fèi)太多有用空間,而且存在安全隱患;</p><p> (3)系統(tǒng)函數(shù)多,并且沒有完全按照匈牙利命名法命名函數(shù)名和變量名,程序的可讀性比較差,使得整個(gè)程序顯得清晰度不夠。</p><p> (4)文件系統(tǒng)的測(cè)試用例還不夠多,大量測(cè)試時(shí)還存在幾個(gè)bug,特別是刪除的文件和
118、目錄時(shí)有時(shí)候難以將控制信息和標(biāo)志信息寫入硬盤。</p><p> 總的來(lái)說(shuō),這次的操作系統(tǒng)課程設(shè)計(jì)的工作量比較大,我投入了很多的時(shí)間和精力,通過和同學(xué)交流,獲得了很多的幫助和設(shè)計(jì)靈感,最終完成了系統(tǒng)的設(shè)計(jì)。不過這些付出都是值得的,因?yàn)槲沂斋@了更多。首先,在開發(fā)系統(tǒng)的過程中,我對(duì)操作系統(tǒng)的功能實(shí)現(xiàn),特別是文件管理這一塊的內(nèi)容有了較深的理解,這個(gè)理解程度是看書所無(wú)法達(dá)到的。另外,這次開發(fā)要使用到文件存取的操作來(lái)實(shí)現(xiàn)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計(jì)---模擬文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)-模擬文件系統(tǒng)
- 《操作系統(tǒng)》課程設(shè)計(jì)-- 模擬文件管理系統(tǒng)
- 《操作系統(tǒng)》課程設(shè)計(jì)--模擬文件管理系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--虛擬文件系統(tǒng)的實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)---文件系統(tǒng)的模擬
- 操作系統(tǒng)課程設(shè)計(jì)--基于linux的模擬文件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)--樹形目錄文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--多級(jí)文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--多級(jí)文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--多級(jí)文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--多級(jí)文件系統(tǒng).doc
- 操作系統(tǒng)課程設(shè)計(jì)二級(jí)文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)簡(jiǎn)單文件系統(tǒng)的實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)二級(jí)文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)(文件系統(tǒng)管理)
- 操作系統(tǒng)課程設(shè)計(jì)--簡(jiǎn)單文件系統(tǒng)的實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)----二級(jí)文件系統(tǒng)
- 操作系統(tǒng)文件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--二級(jí)文件系統(tǒng)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論