版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 高級(jí)操作系統(tǒng)實(shí)驗(yàn)報(bào)告</p><p> 姓 名: </p><p> 學(xué) 號(hào): </p><p> 專 業(yè): </p><p> 任 課 教 師:
2、 </p><p> 2014年01 月18 </p><p><b> 目 錄</b></p><p> 一、課程設(shè)計(jì)題目和目的1</p><p> 二、課程設(shè)計(jì)要求1</p><p> 三、程序設(shè)計(jì)思想1</p><p> 四、文件系統(tǒng)的
3、實(shí)現(xiàn)2</p><p> 1.數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)2</p><p><b> 2.程序功能圖3</b></p><p><b> 3.實(shí)體關(guān)系圖3</b></p><p><b> 4.數(shù)據(jù)流圖4</b></p><p><b>
4、 5.程序流程圖5</b></p><p> (1) .建立文件:create(文件名,記錄長(zhǎng)度)6</p><p> (2) .寫文件:write(文件名,開始位置,字符串)7</p><p> (3) .讀文件:read(文件名,開始位置,長(zhǎng)度)8</p><p> (4) .顯示文件所有內(nèi)容 type(文件名
5、)8</p><p> (5) .刪除文件delete(文件名)9</p><p> (6) .重命名文件ren(文件名,新文件名)10</p><p> (7) .查詢文件屬性ask(文件名)11</p><p> (8) .關(guān)閉文件close(文件名)12</p><p> 五、程序運(yùn)行結(jié)果及分
6、析13</p><p> 六、課程設(shè)計(jì)總結(jié)15</p><p><b> 七、參考文獻(xiàn)16</b></p><p><b> 八、附錄17</b></p><p> 一、課程設(shè)計(jì)題目和目的</p><p> 通過模擬文件系統(tǒng)的實(shí)現(xiàn),深入理解操作系統(tǒng)中文件系統(tǒng)
7、的理論知識(shí), 加深對(duì)教材中的重要算法的理解。同時(shí)通過編程實(shí)現(xiàn)這些算法,更好地掌握操作系統(tǒng)的原理及實(shí)現(xiàn)方法,提高綜合運(yùn)用各專業(yè)課知識(shí)的能力。</p><p><b> 二、課程設(shè)計(jì)要求</b></p><p> 通過組長(zhǎng)分工,我主要完成了如下幾個(gè)功能的操作:</p><p> 1.創(chuàng)建文件:從命令中得到文件名,得到該文件的文件長(zhǎng)度,建立文件
8、。修改目錄表。</p><p> 4.讀文件:read [文件名] [顯示開始字節(jié)] [顯示的字節(jié)數(shù)] ,直接顯示所需要的字節(jié)數(shù)。</p><p> 5.寫文件:write [文件名] [插入的位置] [插入的內(nèi)容]</p><p> 6.修改屬性:修改文件屬性 文件名,文件權(quán)限,文件長(zhǎng)度等。</p><p><b> 三
9、、程序設(shè)計(jì)思想</b></p><p> 閱讀操作系統(tǒng)方面的書籍,了解操作系統(tǒng)的文件系統(tǒng)原理。結(jié)合分析課程設(shè)計(jì)要求,確定實(shí)體以及它們之間的關(guān)系。實(shí)體關(guān)系有三張表(磁盤空間分配表、文件表、打開文件表)、一個(gè)模擬磁盤的數(shù)組、命令服務(wù)和用戶構(gòu)成。用戶負(fù)責(zé)輸入命令。命令服務(wù)實(shí)現(xiàn)命令的解釋、命令檢查、命令幫助以及調(diào)用相關(guān)模塊執(zhí)行相應(yīng)的命令功能。</p><p> 文件夾打開是則把文件
10、夾名稱及其地址壓入打開文件夾棧,文件關(guān)閉則把文件夾名稱及其地址從打開文件夾棧中拋出。</p><p> 文件打開則把文件的名稱及其父指針寫到文件列表同時(shí)置文件打開標(biāo)志為1,文件關(guān)閉則把文件從打開列表中刪除,同時(shí)置文件打開指針為0,文件讀取和寫入都要檢查文件是否在文件打開列表中,未打開文件不能讀寫,只讀文件不能寫,只寫文件不能讀。</p><p> 文件夾和文件創(chuàng)建,文件夾和文件的創(chuàng)建首
11、先檢驗(yàn)?zāi)夸浭欠駷榭?,為空則把文件夾或文件連接到該目錄下,不為空則把檢查目錄下是否有同名文件夾或文件,有則提示創(chuàng)建不成功,沒有則把文件夾或文件連接到該目錄下的最后一個(gè)子節(jié)點(diǎn),作為它的兄弟節(jié)點(diǎn)。</p><p> 文件夾和文件的刪除,文件夾下沒有打開的文件或文件沒有打開才能刪除,否則刪除失敗,刪除文件夾時(shí)利用了中序歷遍來刪除子樹。</p><p><b> 四、文件系統(tǒng)的實(shí)現(xiàn)&l
12、t;/b></p><p><b> 1.數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)</b></p><p> 通過分析課程設(shè)計(jì)要求,具體設(shè)計(jì)出如下數(shù)據(jù)結(jié)構(gòu):</p><p> typedef struct uof //文件屬性</p><p><b> {</b></p><p>
13、 char filename[14]; //文件名字</p><p> int mode; //文件的權(quán)限0-readonly;1-writeonly;2-read/write</p><p> int length; //文件長(zhǎng)度</p><p> int addr; //物理塊號(hào)</p><
14、;p> int state; //0-建立,1-建立</p><p> int readptr; </p><p><b> };</b></p><p> 通過結(jié)構(gòu)體,將文件名字、文件在磁盤的開始位置、文件長(zhǎng)度、文件最大長(zhǎng)度、文件類型、創(chuàng)建時(shí)間結(jié)合在一起。文件類型,本模擬程序使用txt類型。設(shè)置一個(gè)線性表來存儲(chǔ)文件。<
15、/p><p><b> 2.程序功能圖</b></p><p> 文件系統(tǒng)提供的文件操作有建立文件(create)、刪除文件(delete)、條件讀取文件(read)、寫入文件(write)、查詢文件的屬性(ask)、顯示文件所有內(nèi)容(type)、重命名文件(ren)、關(guān)閉文件(close)??梢酝ㄟ^鍵盤輸入命令來模擬文件的操作。通過exit命令退出程序。</p
16、><p><b> 3.實(shí)體關(guān)系圖</b></p><p> 命令服務(wù)使得用戶能夠輸入命令,在需要時(shí)提供命令的幫助。同時(shí)能夠分析命令,調(diào)用相應(yīng)的命令模塊對(duì)模擬磁盤、磁盤空間分配表、文件表、打開文件表進(jìn)行操作。磁盤空間分配表記錄模擬磁盤的使用情況。文件表記錄文件的信息和在磁盤里的位置等信息。打開文件表記錄已打開的文件,對(duì)應(yīng)文件表中的文件信息,和文件表里的文件節(jié)點(diǎn)類似,記
17、錄了文件在模擬磁盤中的信息。</p><p><b> 4.程序流程圖</b></p><p> 模擬文件系統(tǒng)提供的文件操作有建立(create),讀?。╮ead),顯示(type),刪除(detele),寫入(write),關(guān)閉(close),重命名(ren)和查詢(ask)。在模擬程序中可從鍵盤上輸入文件操作命令來模擬各用戶程序中所調(diào)用的各種文件操作,用一個(gè)結(jié)
18、束命令(exit)停止程序的執(zhí)行。</p><p> (1) .創(chuàng)建文件:create(文件名,記錄長(zhǎng)度)</p><p> 模擬文件系統(tǒng)進(jìn)行“創(chuàng)建文件”的處理流程如下:</p><p> (2) .寫文件:write(文件名,開始位置,字符串)</p><p> 模擬文件系統(tǒng)進(jìn)行“建立文件”的處理流程如下:</p>&
19、lt;p> (3) .讀文件:read(文件名,開始位置,長(zhǎng)度)</p><p> 模擬文件系統(tǒng)進(jìn)行“讀取文件”的處理流程如下:</p><p><b> 五.實(shí)驗(yàn)程序說明:</b></p><p><b> 1.創(chuàng)建文件:</b></p><p><b> 2.打開文件:
20、</b></p><p><b> 3.寫文件:</b></p><p><b> 4.修改文件屬性:</b></p><p><b> 六、課程設(shè)計(jì)總結(jié)</b></p><p> 通過本次的課程設(shè)計(jì),使我能夠正確運(yùn)用操作系統(tǒng)課程中所學(xué)的基本理論和知識(shí),加深
21、了對(duì)文件系統(tǒng)基本概念的理解,以及磁盤文件系統(tǒng)的文件操作。還有讓我感受挺深的是對(duì)軟件工程方法的應(yīng)用。設(shè)計(jì)一個(gè)軟件,先要做好需求分析,這一點(diǎn)很重要,如果沒有分析好需求,到軟件設(shè)計(jì)的最后,發(fā)現(xiàn)所做的功能不符合要求,那么一切都得重做,前面所有的努力都付諸東流。在程序設(shè)計(jì)的開始,由于分析工作做得不夠深入和細(xì)致,吃了點(diǎn)小苦頭。對(duì)于這樣一個(gè)小設(shè)計(jì)來說,都會(huì)吃苦頭,要是大工程更是無法想像,有可能會(huì)項(xiàng)目失敗。以后得加強(qiáng)對(duì)軟件工程的學(xué)習(xí)。另外在運(yùn)用C語言的
22、時(shí)候,感覺有點(diǎn)生疏,在組織語言時(shí)時(shí)而出錯(cuò),在編程和調(diào)試的過程中,經(jīng)常會(huì)出現(xiàn)意想不到的問題,并非每個(gè)問題都可以從相關(guān)資料中找到解決方法,有些問題是無法預(yù)料到的,這就需要通過自己理性的分析得出問題的解決方案。</p><p> 在設(shè)計(jì)過程中,查詢了不少相關(guān)資料,不斷的發(fā)現(xiàn)問題、提出問題、解決問題。在對(duì)自己所編寫的源程序段的糾錯(cuò)的過程中,使我更好的理解了操作系統(tǒng)中文件系統(tǒng)的理論知識(shí),同時(shí)在編程時(shí)用到了模塊化的設(shè)計(jì)思想
23、,這種編程方法可以使我們的編程變的更簡(jiǎn)單,可以使我們的查錯(cuò)與糾錯(cuò)變的更方便??偟膩碚f通過這次的設(shè)計(jì)的學(xué)習(xí)使我學(xué)到了很多在平時(shí)的學(xué)習(xí)中學(xué)不到的很多東西,通過這次課程設(shè)計(jì),使我對(duì)操作系統(tǒng)和編程產(chǎn)生興趣,我想我會(huì)在這條路上繼續(xù)前進(jìn)下去。我相信,只要不斷的嚴(yán)格要求自己,注意培養(yǎng)自己的思維能力,就一定會(huì)有更大更輝煌的發(fā)展和提高。</p><p><b> 七、參考文獻(xiàn)</b></p>
24、<p> [1][美]Abraham Silberschatz Peter Baer Galvin Greg Gagne 鄭扣根 譯.OPERATING SYSTEM CONCEPTS[Sixth Edition] 操作系統(tǒng)概念.高等教育出版社,2004,01</p><p> [2](美)Roger S.Pressman 著 梅宏 譯.軟件工程-實(shí)踐者的研究方法.機(jī)械工業(yè)出版社,2002,09&l
25、t;/p><p> [3]蔡啟先.C語言程序設(shè)計(jì)教程(第二版).重慶大學(xué)出版社,2003,07</p><p> [4]朱戰(zhàn)立.數(shù)據(jù)結(jié)構(gòu).西安電子科技大學(xué)出版社,2003,05</p><p><b> 八、附錄</b></p><p> 1.程序源代碼及注釋</p><p> //////
26、//////////////////////////////////////////////////////</p><p> // 編譯工具:Visual c++ 6.0 //</p><p> // //<
27、/p><p> // 作者:~小楚*smill~ 、藍(lán)色的天空 //</p><p> // 郵件:qvb20974151@163.com //</p><p> //
28、 //</p><p> // 復(fù)制、傳播請(qǐng)保留作者信息,謝謝! //</p><p> // //</p><p> /////////////////////////////////
29、///////////////////////////</p><p> #include <stdio.h></p><p> #include <conio.h></p><p> #include <string.h></p><p> #include <stdlib.h><
30、;/p><p> #include <time.h> </p><p> void fileCreate(char *fileName,int fileLenght); //創(chuàng)建文件</p><p> void fileDel(char *fileName); //刪除文件</p><p>
31、; void fileRead(char *fileName,int postion,int lenght);</p><p> void fileWrite(char *fileName,int position,char *s); //函數(shù)聲明</p><p> void fileAsk(char *fileName); //查詢文
32、件屬性</p><p> void fileType(char *fileName); //顯示文件內(nèi)容</p><p> void fileRen(char *fileName,char *newName); //重命名文件</p><p> void fileDir();
33、 //列出所有文件</p><p> void fileClose(char *fileName); //關(guān)閉一個(gè)文件</p><p> int requestDisk(int *startPosition,int *maxLength); //分配磁盤空間</p><p> ///////////
34、//////////////////////</p><p><b> //模擬磁盤空間</b></p><p> char disk[10000]; </p><p> ///////////////////////////////</p><p><b> //磁盤空間管理 </b>&l
35、t;/p><p> struct freeDiskTable </p><p><b> {</b></p><p> int start; //開始位置</p><p> int length; //占用長(zhǎng)度</p><p> int maxLength; //最大長(zhǎng)度</p
36、><p> int useFlag; //使用標(biāo)志,1為占用,0為空閑</p><p><b> };</b></p><p> //////////////////////////////////</p><p><b> //文件表</b></p><p>
37、struct fileTable</p><p><b> {</b></p><p> char fileName[20]; //文件名字</p><p> int start; //開始位置</p><p> int length; //文件長(zhǎng)度</p>&l
38、t;p> int maxLength; //最大長(zhǎng)度</p><p> char fileKind[8]; //文件種類,此默認(rèn)為txt</p><p> struct tm *timeinfo; //文件創(chuàng)建時(shí)間</p><p><b> };</b></p><p> /////////
39、///////////////////////</p><p><b> //打開文件表</b></p><p> struct openFileTable</p><p><b> {</b></p><p> char fileName[20]; //文件名字</p>
40、<p> char fileKind[8]; //文件類型</p><p> int start; //文件開始位置</p><p> int length; //文件長(zhǎng)度</p><p> int maxLength; //最大長(zhǎng)度</p><p> int ope
41、nCount; //打開文件的進(jìn)程數(shù)</p><p> struct tm *timeinfo; //文件創(chuàng)建時(shí)間</p><p><b> };</b></p><p> //////////////////////////////</p><p> typedef struct freeDiskT
42、able LinDataType; //定義鏈表的數(shù)據(jù)類型</p><p> #include "LinList.h" //鏈表操作集合</p><p> SLNode *freeDiskTableHead; //定義磁盤分配表鏈表 頭指針</p><p> #define MaxSize 100
43、 //定義線性表 最大長(zhǎng)度</p><p> typedef struct fileTable SeqDataType; //定義線性表數(shù)據(jù)類型</p><p> #include "SeqList.h" //線性表操作集合</p><p> SeqList L; //文件表,模擬文件操作嘛
44、,文件數(shù)不多,故可以用 線性表,簡(jiǎn)化操作^_^</p><p> struct openFileTable OFT[10]; //打開文件表數(shù)組</p><p> int OFT_count=0; //打開文件表占用長(zhǎng)度</p><p> void main()</p><p><b> {&l
45、t;/b></p><p> struct orderTable //命令表</p><p><b> {</b></p><p> char name[8]; </p><p><b> };</b></p><p> char orderInput[3
46、0]; //存儲(chǔ)用戶輸入的命令字符串</p><p> char orderName[8]; //命令名字</p><p> char fileName[20]; //命令參數(shù)1,是文件名字</p><p> char parameter2[6]; //命令參數(shù)2,是個(gè)數(shù)字</p><p> char param
47、eter3[30]; //命令參數(shù)3,是字符串或數(shù)字</p><p> struct orderTable u[9]; //命令表</p><p> int i=0; </p><p> int flag=0; //用戶輸入串 讀寫位置 標(biāo)志</p><p> int flag
48、Order=-1;</p><p> /////////////////////////////////////</p><p> LinListInitiate(&freeDiskTableHead);//磁盤空間分配鍵表初始化</p><p> struct freeDiskTable temp; </p><p> te
49、mp.length=0;</p><p> temp.maxLength=10000;</p><p> temp.start=0;</p><p> temp.useFlag=0;</p><p> if(!LinListInsert(freeDiskTableHead,0,temp))</p><p>&l
50、t;b> {</b></p><p> printf("初始磁盤空閑表失敗!");</p><p> system("pause");</p><p><b> exit(0);</b></p><p><b> }</b><
51、/p><p> /////////////////////////////////////</p><p><b> //文件表初始化</b></p><p> SeqListInitiate(&L); //初始化 文件表</p><p> //////////////////////////////////
52、///</p><p> for(i=0;i<2;i++) </p><p> for(int j=0;j<2;j++)</p><p><b> {</b></p><p> system("color fc");</p><p>
53、printf("\n\n\n\n\n\n\n\n\n 計(jì) 046 何珠舉 操作系統(tǒng)課程設(shè)計(jì)\n");</p><p> for(int k=0;k<30000000;k++);</p><p> system("cls");</p><p> system("color
54、 f3");</p><p> printf("\n\n\n\n\n\n\n\n\n 計(jì) 046 何珠舉 操作系統(tǒng)課程設(shè)計(jì)\n");</p><p> for(k=0;k<30000000;k++);</p><p> system("cls");</p>
55、<p><b> }</b></p><p> system("color 17"); //設(shè)置背景色 和 前景色</p><p> ////////////////////////////////////////////////////////////</p><p><b> //初
56、始化命令表</b></p><p> strcpy(u[0].name,"create");</p><p> strcpy(u[1].name,"delete");</p><p> strcpy(u[2].name,"read");</p><p> strc
57、py(u[3].name,"write");</p><p> strcpy(u[4].name,"ask");</p><p> strcpy(u[5].name,"type");</p><p> strcpy(u[6].name,"ren");</p><
58、p> strcpy(u[7].name,"dir");</p><p> strcpy(u[8].name,"close");</p><p> ////////////////////////////////////////////////////////////</p><p><b> while
59、(1)</b></p><p><b> {</b></p><p> printf("\n");</p><p> printf("|******************************************************|\n");</p><
60、p> printf("|* create-創(chuàng)建 delete-刪除 read-讀取 write-寫入 *|\n");</p><p> printf("|* ask-查詢 type-顯示 ren-重命名 dir-顯示文件 *|\n");</p><p> printf("|* close-關(guān)閉文件
61、 *|\n");</p><p> printf("|* 輸入'命令 ?'獲得幫助,例如'create ?',exit-退出程序 *|\n");</p><p> printf("|*********************************
62、*********************|\n");</p><p> printf("請(qǐng)輸入命令:>");</p><p> fflush(stdin); //清空緩沖區(qū)</p><p> gets(orderInput); //獲取用戶輸入串</p><p> if(!strcm
63、p(orderInput,"exit"))exit(0); //當(dāng)用戶輸入 exit 退出程序</p><p> system("cls"); //清屏</p><p> for(i=0;orderInput[i]!=' '&&orderInput[i]!='\0';i++)//以空格為界
64、分解用戶輸入串</p><p><b> {</b></p><p> orderName[i]=orderInput[i];</p><p><b> }</b></p><p> flag=i;//保存讀寫指針</p><p> if(flag>6)
65、 //命令名長(zhǎng)度 小于6</p><p><b> {</b></p><p> printf("輸入的命令有誤,請(qǐng)重新輸入!\n");</p><p> continue ;</p><p><b> }</b></p><p> or
66、derName[i]='\0';</p><p> flagOrder=-1; //初始化標(biāo)志位,flagOrder 指明命令在命令表中的位置</p><p> for(i=0;i<9;i++)</p><p><b> {</b></p><p> if(!strcmp(orderNam
67、e,u[i].name))</p><p><b> {</b></p><p> flagOrder=i; //記錄命令的位置,以便訪問</p><p><b> break;</b></p><p><b> }</b></p><p>
68、<b> }</b></p><p> if(flagOrder==-1)</p><p><b> {</b></p><p> printf("你輸入的命令有誤!請(qǐng)重新輸入!\n");</p><p> continue ;</p><p>
69、<b> }</b></p><p> /////////////////////////////////////////////////////</p><p> //以空格為界,分解字符串,分解出第一個(gè)字符串放到fileName中</p><p> for(i=flag+1;orderInput[i]!=' '&am
70、p;&orderInput[i]!='\0';i++)</p><p><b> {</b></p><p> fileName[i-flag-1]=orderInput[i];</p><p><b> }</b></p><p> fileName[i-flag-
71、1]='\0'; //為字符串?dāng)?shù)組 置一個(gè)結(jié)束標(biāo)志</p><p> /////////////////////////////////////////////////////</p><p> flag=i; //下一個(gè)字符串 讀寫指針</p><p> if(!strcmp(fileName,"
72、?")) //顯示命令幫助</p><p><b> {</b></p><p> switch(flagOrder)</p><p><b> {</b></p><p><b> case 0: </b></p><p> pri
73、ntf("創(chuàng)建一個(gè)文件 格式 create [filename][filelength]\n");</p><p> printf("例如: create a1 1000 ,將創(chuàng)建名為a1,長(zhǎng)度為1000字節(jié)的文件\n");</p><p><b> break;</b></p><p><b&
74、gt; case 1:</b></p><p> printf("刪除一個(gè)文件 格式 delete [filename] \n");</p><p> printf("例如: delete a1,將刪除名為a1的文件\n");</p><p><b> break;</b></p
75、><p><b> case 2: </b></p><p> printf("讀取一個(gè)文件 格式 read [filename][postion][length]\n");</p><p> printf("例如: read a1 8 3,從a1文件第8個(gè)字節(jié)開始,顯示3字節(jié)內(nèi)容\n");</p
76、><p><b> break;</b></p><p><b> case 3:</b></p><p> printf("寫一個(gè)文件 格式 write [fileName][postion][conten] \n");</p><p> printf("例始
77、: write a1 15 test,從a1文件第15字節(jié)開始寫入 test 字符串\n");</p><p><b> break;</b></p><p><b> case 4:</b></p><p> printf("顯示文件的屬性,格式 ask [filename]\n");
78、</p><p> printf("例如 ask a1 ,將顯示文件 a1的屬性\n");</p><p><b> break;</b></p><p><b> case 5:</b></p><p> printf("顯示文件的所有內(nèi)容,格式 type [
79、filename]\n");</p><p> printf("例如 type a1,將顯示文件 a1的所有內(nèi)容\n");</p><p><b> break;</b></p><p><b> case 6:</b></p><p> printf(&quo
80、t;重命名一個(gè)文件,格式 ren [oldFileName][newFileName]\n");</p><p> printf("例如ren a1 b1 ,將a1改名為b1\n");</p><p><b> break;</b></p><p><b> case 7:</b><
81、;/p><p> printf("顯示所有文件,例如 dir,將顯示所有文件\n");</p><p><b> break;</b></p><p><b> case 8:</b></p><p> printf("關(guān)閉文件,格式 close [fileName
82、]\n");</p><p> printf("例如,close a1,將關(guān)閉文件a1\n");</p><p><b> break;</b></p><p><b> default:</b></p><p> printf("命令錯(cuò)誤"
83、);</p><p><b> }</b></p><p><b> getch();</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {<
84、;/b></p><p> switch(flagOrder)//對(duì)相應(yīng)的命令 進(jìn)行參數(shù)處理</p><p><b> {</b></p><p><b> case 0:</b></p><p><b> {</b></p><p>
85、int Temp[4]={1,10,100,1000};</p><p> int sum=0;</p><p> int len=0;</p><p> for(i=flag+1;orderInput[i]!=' '&&orderInput[i]!='\0';i++)</p><p>&
86、lt;b> {</b></p><p> parameter2[i-flag-1]=orderInput[i];</p><p><b> }</b></p><p> parameter2[i-flag-1]='\0'; //為字符串?dāng)?shù)組 置一個(gè)結(jié)束標(biāo)志</p><p><
87、;b> flag=i; </b></p><p> len=strlen(parameter2); //求字符串?dāng)?shù)組的長(zhǎng)度</p><p> for(i=0;i<len;i++) //把第二個(gè)參數(shù) 字符串變成整數(shù)</p><p> sum=sum+((int)parameter2[len-i-1]-48)*Temp[i];</
88、p><p> fileCreate(fileName,sum); //將命令和參數(shù) 傳給建文件模塊執(zhí)行</p><p><b> }</b></p><p><b> break;</b></p><p><b> case 1:</b></p><p&
89、gt; fileDel(fileName); //刪除文件</p><p><b> break;</b></p><p><b> case 2:</b></p><p><b> {</b></p><p> int Temp[4]={1,10,100,1000}
90、;</p><p> int sum=0;</p><p> int len=0;</p><p> int sum2=0;</p><p> //////////////////////////////////////////////////////////</p><p> for(i=flag+1;or
91、derInput[i]!=' '&&orderInput[i]!='\0';i++)</p><p><b> {</b></p><p> parameter2[i-flag-1]=orderInput[i];</p><p><b> }</b></p>
92、<p> parameter2[i-flag-1]='\0';</p><p><b> flag=i; </b></p><p> len=strlen(parameter2); //求字符串?dāng)?shù)組的長(zhǎng)度</p><p> for(i=0;i<len;i++) //把第二個(gè)參數(shù) 字符串變成整數(shù)<
93、;/p><p> sum=sum+((int)parameter2[len-i-1]-48)*Temp[i];</p><p> ///////////////////////////////////////////////////////////</p><p> for(i=flag+1;orderInput[i]!=' '&&
94、orderInput[i]!='\0';i++)</p><p><b> {</b></p><p> parameter3[i-flag-1]=orderInput[i]; //把第三個(gè)參數(shù)變成整型</p><p><b> }</b></p><p> paramete
95、r3[i-flag-1]='\0';</p><p><b> flag=i; </b></p><p> len=strlen(parameter3);</p><p> for(i=0;i<len;i++)</p><p> sum2=sum2+((int)parameter3[len-
96、i-1]-48)*Temp[i];</p><p> fileRead(fileName,sum,sum2); //調(diào)用讀文件模塊</p><p><b> }</b></p><p><b> break;</b></p><p><b> case 3:</b>&l
97、t;/p><p><b> {</b></p><p> int Temp[4]={1,10,100,1000};</p><p> int sum=0;</p><p> int len=0;</p><p> ///////////////////////////////////////
98、///////////////////</p><p> for(i=flag+1;orderInput[i]!=' '&&orderInput[i]!='\0';i++)</p><p><b> {</b></p><p> parameter2[i-flag-1]=orderInput
99、[i];</p><p><b> }</b></p><p> parameter2[i-flag-1]='\0';</p><p><b> flag=i; </b></p><p> len=strlen(parameter2); //求字符串?dāng)?shù)組的長(zhǎng)度</p&g
100、t;<p> for(i=0;i<len;i++) //把第二個(gè)參數(shù) 字符串變成整數(shù)</p><p> sum=sum+((int)parameter2[len-i-1]-48)*Temp[i];</p><p> ///////////////////////////////////////////////////////////</p><
101、;p> for(i=flag+1;orderInput[i]!=' '&&orderInput[i]!='\0';i++)</p><p><b> {</b></p><p> parameter3[i-flag-1]=orderInput[i]; //獲取第三個(gè)參數(shù),為字符串</p><
102、;p><b> }</b></p><p> parameter3[i-flag-1]='\0';</p><p><b> flag=i; </b></p><p> //////////////////////////////////////////////////////////<
103、/p><p> fileWrite(fileName,sum,parameter3); //調(diào)用寫文件模塊</p><p><b> }</b></p><p><b> break;</b></p><p><b> case 4:</b></p><
104、p> fileAsk(fileName); //查詢文件屬性</p><p><b> break;</b></p><p><b> case 5:</b></p><p> fileType(fileName); //顯示文件內(nèi)容</p><p><b> bre
105、ak;</b></p><p><b> case 6:</b></p><p><b> {</b></p><p> for(i=flag+1;orderInput[i]!=' '&&orderInput[i]!='\0';i++)</p>
106、<p><b> {</b></p><p> parameter2[i-flag-1]=orderInput[i];</p><p><b> }</b></p><p> parameter2[i-flag-1]='\0';</p><p><b>
107、 flag=i; </b></p><p> fileRen(fileName,parameter2);</p><p><b> }</b></p><p><b> break;</b></p><p><b> case 7:</b></p&g
108、t;<p> fileDir();</p><p><b> break;</b></p><p><b> case 8:</b></p><p> fileClose(fileName);</p><p><b> break;</b></p&
109、gt;<p><b> default:</b></p><p> printf("錯(cuò)誤!沒有可執(zhí)行的命令");</p><p><b> }</b></p><p><b> }</b></p><p><b> }<
110、;/b></p><p><b> }</b></p><p> //以上主函數(shù),主函數(shù)進(jìn)行數(shù)據(jù)結(jié)構(gòu)的定義 分析用戶輸入的命令。</p><p> //提供命令幫助。把命令和參數(shù),傳遞給執(zhí)行模塊</p><p> ///////////////////////////////////////////////
111、///////////////////////</p><p> void fileCreate(char *fileName,int fileLength)//沒有寫到打開文件表</p><p><b> {</b></p><p><b> int i=0;</b></p><p> t
112、ime_t rawtime;</p><p> int startPosition=0; //文件開始位置,等磁盤分配函數(shù) 返回值</p><p> int maxLength=fileLength;</p><p> struct fileTable temp;</p><p> for(i=0;i<L.size;i++)&l
113、t;/p><p> if(!strcmp(fileName,L.list[i].fileName)) //判斷是否重名,如果重名直接返回</p><p><b> {</b></p><p> printf("文件重名,請(qǐng)取別的名字!\n");</p><p> return ; //文件重名,退
114、出創(chuàng)建函數(shù)</p><p><b> }</b></p><p> if(!requestDisk(&startPosition,&maxLength))</p><p><b> {</b></p><p> printf("申請(qǐng)磁盤空間失敗!無法建立文件!\n&
115、quot;);</p><p> return ; //申請(qǐng)磁盤空間失敗,退出創(chuàng)建函數(shù)</p><p><b> }</b></p><p> strcpy(temp.fileName,fileName); </p><p> strcpy(temp.fileKind,"txt"); //設(shè)置
116、文件類型為 txt</p><p> temp.length=0; //創(chuàng)建的時(shí)候,還沒寫入內(nèi)容,是空文件,長(zhǎng)度設(shè)為0</p><p> temp.maxLength=fileLength; //文件的最大長(zhǎng)度</p><p> temp.start=startPosition; //文件的開始位置</p>&l
117、t;p> time(&rawtime); //獲取時(shí)間</p><p> temp.timeinfo=localtime(&rawtime); //把時(shí)間寫到結(jié)構(gòu)體里去</p><p> if(!SeqListInsert(&L,L.size,temp)) //把文件 插入到文件表</p><p><b> {<
118、/b></p><p> printf("插入文件表失敗!\n");</p><p> system("pause");</p><p> exit(0); //把文件插入到 文件表,如果失敗,退出程序</p><p><b> }</b></p>&l
119、t;p> printf("成功創(chuàng)建文件!\n\n");</p><p> printf("===========================================\n");</p><p> printf("文件名 長(zhǎng)度 最大長(zhǎng)度 類型 開始位置\n");//顯示剛建立的文件</p
120、><p> printf("%s ",temp.fileName);</p><p> printf("%d ",temp.length);</p><p> printf("%d ",temp.maxLength);</p><p> printf
121、("%s ",temp.fileKind);</p><p> printf("%d ",temp.start);</p><p> printf("\n===========================================\n");</p><p> printf(&qu
122、ot;create進(jìn)程打開了文件%s,關(guān)閉請(qǐng)用close命令!\n\n",fileName);</p><p><b> //寫到打開文件表</b></p><p> strcpy(OFT[OFT_count].fileName,temp.fileName);</p><p> strcpy(OFT[OFT_count].fil
123、eKind,temp.fileKind);</p><p> OFT[OFT_count].length=temp.length;</p><p> OFT[OFT_count].maxLength=temp.maxLength;</p><p> OFT[OFT_count].start=temp.start;</p><p> O
124、FT[OFT_count].openCount=1;</p><p> OFT[OFT_count].timeinfo=temp.timeinfo;</p><p> OFT_count++; //打開表 記錄的是文件數(shù) </p><p> //printf("count%d",OFT_count);&
125、lt;/p><p><b> }</b></p><p> void fileDel(char *fileName)</p><p><b> {</b></p><p><b> int i;</b></p><p> int flag=0;
126、 </p><p> int k=0; //記錄文件在 文件表中的位置</p><p> SLNode *p; //磁盤空間分配表 指針</p><p> SeqDataType x; //存儲(chǔ)被刪除的結(jié)點(diǎn),無特殊意義</p><p> for(i=0;i<OFT_count;i++) //判斷是否被別的進(jìn)程
127、占用,若被占用,打印出錯(cuò),直接返回</p><p> if(!strcmp(fileName,OFT[i].fileName))</p><p><b> {</b></p><p> printf("別的進(jìn)程占用文件!無法刪除!");</p><p><b> return ;&l
128、t;/b></p><p><b> }</b></p><p> for(i=0;i<L.size;i++)//從文件表里查找到要?jiǎng)h除的文件,若查找不到,直接返回</p><p><b> {</b></p><p> if(!strcmp(fileName,L.list[i]
129、.fileName))</p><p><b> {</b></p><p><b> flag=1;</b></p><p><b> k=i;</b></p><p><b> break;</b></p><p>&l
130、t;b> }</b></p><p><b> }</b></p><p> if(flag==0)</p><p><b> {</b></p><p> printf("無此文件!");</p><p><b>
131、 return ;</b></p><p><b> }</b></p><p> if(flag==1)//查找到文件后,把磁盤空間置為空閑,之后從文件表中刪除</p><p><b> {</b></p><p> for(p=freeDiskTableHead;p->
132、next!=NULL;p=p->next)</p><p><b> {</b></p><p> if(p->next->data.start==L.list[k].start)</p><p><b> {</b></p><p> p->next->dat
133、a.useFlag=0;</p><p> printf("成功刪除!\n");</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p>
134、SeqListDelete(&L,k,&x);//從文件表中刪除</p><p><b> }</b></p><p><b> }</b></p><p> void fileRead(char *fileName,int position,int length)</p><p&
135、gt;<b> {</b></p><p><b> int i;</b></p><p> int flag=0;</p><p><b> int k=0;</b></p><p> for(i=0;i<OFT_count;i++) //查找文件打開表,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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)課程設(shè)計(jì)模擬操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)-- 操作系統(tǒng)
- 軟件工程課程設(shè)計(jì)—選課系統(tǒng)
- 軟件工程課程設(shè)計(jì)管理系統(tǒng)
- 軟件工程課程設(shè)計(jì)
- 軟件工程課程設(shè)計(jì)
- 軟件工程課程設(shè)計(jì)
- 軟件工程課程設(shè)計(jì)
- 《軟件工程》課程設(shè)計(jì)
- 軟件工程課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 軟件工程-課程設(shè)計(jì)-socket聊天系統(tǒng)
- 軟件工程課程設(shè)計(jì)-超市管理系統(tǒng)
- 軟件工程課程設(shè)計(jì)(酒店管理系統(tǒng))
- 軟件工程課程設(shè)計(jì)-------bbs論壇系統(tǒng)
- 軟件工程課程設(shè)計(jì)——遠(yuǎn)程監(jiān)控系統(tǒng)
- 軟件工程課程設(shè)計(jì)---獎(jiǎng)學(xué)金評(píng)定系統(tǒng)
- 軟件工程課程設(shè)計(jì)---超市管理系統(tǒng)
- 軟件工程課程設(shè)計(jì)--庫存管理系統(tǒng)
評(píng)論
0/150
提交評(píng)論