操作系統(tǒng)課程設計-軟件工程_第1頁
已閱讀1頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  高級操作系統(tǒng)實驗報告</p><p>  姓 名: </p><p>  學 號: </p><p>  專 業(yè): </p><p>  任 課 教 師:

2、 </p><p>  2014年01 月18 </p><p><b>  目 錄</b></p><p>  一、課程設計題目和目的1</p><p>  二、課程設計要求1</p><p>  三、程序設計思想1</p><p>  四、文件系統(tǒng)的

3、實現(xiàn)2</p><p>  1.數(shù)據(jù)結構設計2</p><p><b>  2.程序功能圖3</b></p><p><b>  3.實體關系圖3</b></p><p><b>  4.數(shù)據(jù)流圖4</b></p><p><b> 

4、 5.程序流程圖5</b></p><p>  (1) .建立文件:create(文件名,記錄長度)6</p><p>  (2) .寫文件:write(文件名,開始位置,字符串)7</p><p>  (3) .讀文件:read(文件名,開始位置,長度)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) .關閉文件close(文件名)12</p><p>  五、程序運行結果及分

6、析13</p><p>  六、課程設計總結15</p><p><b>  七、參考文獻16</b></p><p><b>  八、附錄17</b></p><p>  一、課程設計題目和目的</p><p>  通過模擬文件系統(tǒng)的實現(xiàn),深入理解操作系統(tǒng)中文件系統(tǒng)

7、的理論知識, 加深對教材中的重要算法的理解。同時通過編程實現(xiàn)這些算法,更好地掌握操作系統(tǒng)的原理及實現(xiàn)方法,提高綜合運用各專業(yè)課知識的能力。</p><p><b>  二、課程設計要求</b></p><p>  通過組長分工,我主要完成了如下幾個功能的操作:</p><p>  1.創(chuàng)建文件:從命令中得到文件名,得到該文件的文件長度,建立文件

8、。修改目錄表。</p><p>  4.讀文件:read [文件名] [顯示開始字節(jié)] [顯示的字節(jié)數(shù)] ,直接顯示所需要的字節(jié)數(shù)。</p><p>  5.寫文件:write [文件名] [插入的位置] [插入的內(nèi)容]</p><p>  6.修改屬性:修改文件屬性 文件名,文件權限,文件長度等。</p><p><b>  三

9、、程序設計思想</b></p><p>  閱讀操作系統(tǒng)方面的書籍,了解操作系統(tǒng)的文件系統(tǒng)原理。結合分析課程設計要求,確定實體以及它們之間的關系。實體關系有三張表(磁盤空間分配表、文件表、打開文件表)、一個模擬磁盤的數(shù)組、命令服務和用戶構成。用戶負責輸入命令。命令服務實現(xiàn)命令的解釋、命令檢查、命令幫助以及調(diào)用相關模塊執(zhí)行相應的命令功能。</p><p>  文件夾打開是則把文件

10、夾名稱及其地址壓入打開文件夾棧,文件關閉則把文件夾名稱及其地址從打開文件夾棧中拋出。</p><p>  文件打開則把文件的名稱及其父指針寫到文件列表同時置文件打開標志為1,文件關閉則把文件從打開列表中刪除,同時置文件打開指針為0,文件讀取和寫入都要檢查文件是否在文件打開列表中,未打開文件不能讀寫,只讀文件不能寫,只寫文件不能讀。</p><p>  文件夾和文件創(chuàng)建,文件夾和文件的創(chuàng)建首

11、先檢驗目錄是否為空,為空則把文件夾或文件連接到該目錄下,不為空則把檢查目錄下是否有同名文件夾或文件,有則提示創(chuàng)建不成功,沒有則把文件夾或文件連接到該目錄下的最后一個子節(jié)點,作為它的兄弟節(jié)點。</p><p>  文件夾和文件的刪除,文件夾下沒有打開的文件或文件沒有打開才能刪除,否則刪除失敗,刪除文件夾時利用了中序歷遍來刪除子樹。</p><p><b>  四、文件系統(tǒng)的實現(xiàn)&l

12、t;/b></p><p><b>  1.數(shù)據(jù)結構設計</b></p><p>  通過分析課程設計要求,具體設計出如下數(shù)據(jù)結構:</p><p>  typedef struct uof //文件屬性</p><p><b>  {</b></p><p>

13、  char filename[14]; //文件名字</p><p>  int mode; //文件的權限0-readonly;1-writeonly;2-read/write</p><p>  int length; //文件長度</p><p>  int addr; //物理塊號</p><

14、;p>  int state; //0-建立,1-建立</p><p>  int readptr; </p><p><b>  };</b></p><p>  通過結構體,將文件名字、文件在磁盤的開始位置、文件長度、文件最大長度、文件類型、創(chuàng)建時間結合在一起。文件類型,本模擬程序使用txt類型。設置一個線性表來存儲文件。<

15、/p><p><b>  2.程序功能圖</b></p><p>  文件系統(tǒng)提供的文件操作有建立文件(create)、刪除文件(delete)、條件讀取文件(read)、寫入文件(write)、查詢文件的屬性(ask)、顯示文件所有內(nèi)容(type)、重命名文件(ren)、關閉文件(close)。可以通過鍵盤輸入命令來模擬文件的操作。通過exit命令退出程序。</p

16、><p><b>  3.實體關系圖</b></p><p>  命令服務使得用戶能夠輸入命令,在需要時提供命令的幫助。同時能夠分析命令,調(diào)用相應的命令模塊對模擬磁盤、磁盤空間分配表、文件表、打開文件表進行操作。磁盤空間分配表記錄模擬磁盤的使用情況。文件表記錄文件的信息和在磁盤里的位置等信息。打開文件表記錄已打開的文件,對應文件表中的文件信息,和文件表里的文件節(jié)點類似,記

17、錄了文件在模擬磁盤中的信息。</p><p><b>  4.程序流程圖</b></p><p>  模擬文件系統(tǒng)提供的文件操作有建立(create),讀取(read),顯示(type),刪除(detele),寫入(write),關閉(close),重命名(ren)和查詢(ask)。在模擬程序中可從鍵盤上輸入文件操作命令來模擬各用戶程序中所調(diào)用的各種文件操作,用一個結

18、束命令(exit)停止程序的執(zhí)行。</p><p>  (1) .創(chuàng)建文件:create(文件名,記錄長度)</p><p>  模擬文件系統(tǒng)進行“創(chuàng)建文件”的處理流程如下:</p><p>  (2) .寫文件:write(文件名,開始位置,字符串)</p><p>  模擬文件系統(tǒng)進行“建立文件”的處理流程如下:</p>&

19、lt;p>  (3) .讀文件:read(文件名,開始位置,長度)</p><p>  模擬文件系統(tǒng)進行“讀取文件”的處理流程如下:</p><p><b>  五.實驗程序說明:</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>  六、課程設計總結</b></p><p>  通過本次的課程設計,使我能夠正確運用操作系統(tǒng)課程中所學的基本理論和知識,加深

21、了對文件系統(tǒng)基本概念的理解,以及磁盤文件系統(tǒng)的文件操作。還有讓我感受挺深的是對軟件工程方法的應用。設計一個軟件,先要做好需求分析,這一點很重要,如果沒有分析好需求,到軟件設計的最后,發(fā)現(xiàn)所做的功能不符合要求,那么一切都得重做,前面所有的努力都付諸東流。在程序設計的開始,由于分析工作做得不夠深入和細致,吃了點小苦頭。對于這樣一個小設計來說,都會吃苦頭,要是大工程更是無法想像,有可能會項目失敗。以后得加強對軟件工程的學習。另外在運用C語言的

22、時候,感覺有點生疏,在組織語言時時而出錯,在編程和調(diào)試的過程中,經(jīng)常會出現(xiàn)意想不到的問題,并非每個問題都可以從相關資料中找到解決方法,有些問題是無法預料到的,這就需要通過自己理性的分析得出問題的解決方案。</p><p>  在設計過程中,查詢了不少相關資料,不斷的發(fā)現(xiàn)問題、提出問題、解決問題。在對自己所編寫的源程序段的糾錯的過程中,使我更好的理解了操作系統(tǒng)中文件系統(tǒng)的理論知識,同時在編程時用到了模塊化的設計思想

23、,這種編程方法可以使我們的編程變的更簡單,可以使我們的查錯與糾錯變的更方便??偟膩碚f通過這次的設計的學習使我學到了很多在平時的學習中學不到的很多東西,通過這次課程設計,使我對操作系統(tǒng)和編程產(chǎn)生興趣,我想我會在這條路上繼續(xù)前進下去。我相信,只要不斷的嚴格要求自己,注意培養(yǎng)自己的思維能力,就一定會有更大更輝煌的發(fā)展和提高。</p><p><b>  七、參考文獻</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 著 梅宏 譯.軟件工程-實踐者的研究方法.機械工業(yè)出版社,2002,09&l

25、t;/p><p>  [3]蔡啟先.C語言程序設計教程(第二版).重慶大學出版社,2003,07</p><p>  [4]朱戰(zhàn)立.數(shù)據(jù)結構.西安電子科技大學出版社,2003,05</p><p><b>  八、附錄</b></p><p>  1.程序源代碼及注釋</p><p>  //////

26、//////////////////////////////////////////////////////</p><p>  // 編譯工具:Visual c++ 6.0 //</p><p>  // //<

27、/p><p>  // 作者:~小楚*smill~ 、藍色的天空 //</p><p>  // 郵件:qvb20974151@163.com //</p><p>  //

28、 //</p><p>  // 復制、傳播請保留作者信息,謝謝! //</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); //關閉一個文件</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; //占用長度</p><p>  int maxLength; //最大長度</p

36、><p>  int useFlag; //使用標志,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; //文件長度</p>&l

38、t;p>  int maxLength; //最大長度</p><p>  char fileKind[8]; //文件種類,此默認為txt</p><p>  struct tm *timeinfo; //文件創(chuàng)建時間</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; //文件長度</p><p>  int maxLength; //最大長度</p><p>  int ope

41、nCount; //打開文件的進程數(shù)</p><p>  struct tm *timeinfo; //文件創(chuàng)建時間</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、 //定義線性表 最大長度</p><p>  typedef struct fileTable SeqDataType; //定義線性表數(shù)據(jù)類型</p><p>  #include "SeqList.h" //線性表操作集合</p><p>  SeqList L; //文件表,模擬文件操作嘛

44、,文件數(shù)不多,故可以用 線性表,簡化操作^_^</p><p>  struct openFileTable OFT[10]; //打開文件表數(shù)組</p><p>  int OFT_count=0; //打開文件表占用長度</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]; //存儲用戶輸入的命令字符串</p><p>  char orderName[8]; //命令名字</p><p>  char fileName[20]; //命令參數(shù)1,是文件名字</p><p>  char parameter2[6]; //命令參數(shù)2,是個數(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; //用戶輸入串 讀寫位置 標志</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 計 046 何珠舉 操作系統(tǒng)課程設計\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 計 046 何珠舉 操作系統(tǒng)課程設計\n");</p><p>  for(k=0;k<30000000;k++);</p><p>  system("cls");</p>

55、<p><b>  }</b></p><p>  system("color 17"); //設置背景色 和 前景色</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-關閉文件

61、 *|\n");</p><p>  printf("|* 輸入'命令 ?'獲得幫助,例如'create ?',exit-退出程序 *|\n");</p><p>  printf("|*********************************

62、*********************|\n");</p><p>  printf("請輸入命令:>");</p><p>  fflush(stdin); //清空緩沖區(qū)</p><p>  gets(orderInput); //獲取用戶輸入串</p><p>  if(!strcm

63、p(orderInput,"exit"))exit(0); //當用戶輸入 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、 //命令名長度 小于6</p><p><b>  {</b></p><p>  printf("輸入的命令有誤,請重新輸入!\n");</p><p>  continue ;</p><p><b>  }</b></p><p>  or

66、derName[i]='\0';</p><p>  flagOrder=-1; //初始化標志位,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("你輸入的命令有誤!請重新輸入!\n");</p><p>  continue ;</p><p>

69、<b>  }</b></p><p>  /////////////////////////////////////////////////////</p><p>  //以空格為界,分解字符串,分解出第一個字符串放到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'; //為字符串數(shù)組 置一個結束標志</p><p>  /////////////////////////////////////////////////////</p><p>  flag=i; //下一個字符串 讀寫指針</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)建一個文件 格式 create [filename][filelength]\n");</p><p>  printf("例如: create a1 1000 ,將創(chuàng)建名為a1,長度為1000字節(jié)的文件\n");</p><p><b>  break;</b></p><p><b&

74、gt;  case 1:</b></p><p>  printf("刪除一個文件 格式 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("讀取一個文件 格式 read [filename][postion][length]\n");</p><p>  printf("例如: read a1 8 3,從a1文件第8個字節(jié)開始,顯示3字節(jié)內(nèi)容\n");</p

76、><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  printf("寫一個文件 格式 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;重命名一個文件,格式 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("關閉文件,格式 close [fileName

82、]\n");</p><p>  printf("例如,close a1,將關閉文件a1\n");</p><p><b>  break;</b></p><p><b>  default:</b></p><p>  printf("命令錯誤"

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)//對相應的命令 進行參數(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'; //為字符串數(shù)組 置一個結束標志</p><p><

87、;b>  flag=i; </b></p><p>  len=strlen(parameter2); //求字符串數(shù)組的長度</p><p>  for(i=0;i<len;i++) //把第二個參數(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); //求字符串數(shù)組的長度</p><p>  for(i=0;i<len;i++) //把第二個參數(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]; //把第三個參數(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); //求字符串數(shù)組的長度</p&g

100、t;<p>  for(i=0;i<len;i++) //把第二個參數(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]; //獲取第三個參數(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("錯誤!沒有可執(zhí)行的命令");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }<

110、;/b></p><p><b>  }</b></p><p>  //以上主函數(shù),主函數(shù)進行數(shù)據(jù)結構的定義 分析用戶輸入的命令。</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("文件重名,請取別的名字!\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("申請磁盤空間失敗!無法建立文件!\n&

115、quot;);</p><p>  return ; //申請磁盤空間失敗,退出創(chuàng)建函數(shù)</p><p><b>  }</b></p><p>  strcpy(temp.fileName,fileName); </p><p>  strcpy(temp.fileKind,"txt"); //設置

116、文件類型為 txt</p><p>  temp.length=0; //創(chuàng)建的時候,還沒寫入內(nèi)容,是空文件,長度設為0</p><p>  temp.maxLength=fileLength; //文件的最大長度</p><p>  temp.start=startPosition; //文件的開始位置</p>&l

117、t;p>  time(&rawtime); //獲取時間</p><p>  temp.timeinfo=localtime(&rawtime); //把時間寫到結構體里去</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("文件名 長度 最大長度 類型 開始位置\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進程打開了文件%s,關閉請用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; //存儲被刪除的結點,無特殊意義</p><p>  for(i=0;i<OFT_count;i++) //判斷是否被別的進程

127、占用,若被占用,打印出錯,直接返回</p><p>  if(!strcmp(fileName,OFT[i].fileName))</p><p><b>  {</b></p><p>  printf("別的進程占用文件!無法刪除!");</p><p><b>  return ;&l

128、t;/b></p><p><b>  }</b></p><p>  for(i=0;i<L.size;i++)//從文件表里查找到要刪除的文件,若查找不到,直接返回</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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論