2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  課程設(shè)計(jì)報(bào)告</b></p><p>  2011-2012學(xué)年 第一學(xué)期</p><p>  目 錄</p><p>  1.設(shè)計(jì)思想說(shuō)明1</p><p>  2.系統(tǒng)結(jié)構(gòu)說(shuō)明1</p><p>  3.數(shù)據(jù)結(jié)構(gòu)說(shuō)明2</p>&

2、lt;p><b>  3.1開(kāi)發(fā)環(huán)境2</b></p><p><b>  3.2數(shù)據(jù)存儲(chǔ)2</b></p><p><b>  3.3數(shù)據(jù)結(jié)構(gòu)2</b></p><p>  3.3.1數(shù)據(jù)塊在內(nèi)存中的物理結(jié)構(gòu)2</p><p>  3.3.2文件索引結(jié)構(gòu)2&l

3、t;/p><p>  3.3.3文件系統(tǒng)中文件元素的結(jié)構(gòu)(含文件夾和文件)3</p><p>  3.3.4文件系統(tǒng)結(jié)構(gòu)3</p><p>  3.3.5文件系統(tǒng)的當(dāng)前運(yùn)行狀態(tài)3</p><p>  3.3.6用戶(hù)結(jié)構(gòu)4</p><p>  4.各主要模塊的算法流程圖4</p><p> 

4、 4.1整體思路概述4</p><p>  4.1.1login (用戶(hù)登錄)4</p><p>  4.1.2系統(tǒng)初始化5</p><p>  4.1.3文件的創(chuàng)建: create5</p><p>  4.1.4文件的打開(kāi):open6</p><p>  4.1.5文件的讀:read7</p>

5、;<p>  4.1.6文件的寫(xiě):write8</p><p>  4.1.7文件關(guān)閉:close10</p><p>  4.1.8刪除文件:delete10</p><p>  4.1.9創(chuàng)建目錄(建立子目錄):mkdir11</p><p>  4.1.10改變當(dāng)前目錄:cd12</p><p

6、>  4.1.11列出文件目錄:dir14</p><p>  4.1.12退出:logout15</p><p>  4.2算法流程圖15</p><p>  5.使用說(shuō)明書(shū)15</p><p><b>  5.1登錄15</b></p><p>  5.2新建目錄和列出文件目錄

7、16</p><p>  5.3改變當(dāng)前目錄16</p><p>  5.4文件的創(chuàng)建16</p><p>  5.5文件的打開(kāi)17</p><p>  5.6文件的寫(xiě)17</p><p>  5.7文件的讀17</p><p>  5.8文件的關(guān)閉17</p>&l

8、t;p>  5.9文件的刪除17</p><p>  5.10返回根目錄18</p><p><b>  5.11退出18</b></p><p><b>  6.總結(jié)18</b></p><p><b>  參考文獻(xiàn)19</b></p><

9、p><b>  課程設(shè)計(jì)題目名稱(chēng)</b></p><p><b>  設(shè)計(jì)思想說(shuō)明</b></p><p>  本課程設(shè)計(jì)要求設(shè)計(jì)一個(gè)模擬的多用戶(hù)多級(jí)目錄的文件系統(tǒng)。通過(guò)具體的文件存儲(chǔ)空間的管理、文件的物理結(jié)構(gòu)、目錄結(jié)構(gòu)和文件操作的實(shí)現(xiàn),加深對(duì)文件系統(tǒng)內(nèi)部功能和實(shí)現(xiàn)過(guò)程的理解。</p><p><b>  

10、系統(tǒng)結(jié)構(gòu)說(shuō)明</b></p><p>  2.1在內(nèi)存中開(kāi)辟一個(gè)虛擬磁盤(pán)空間作為文件存儲(chǔ)器,在其上實(shí)現(xiàn)一個(gè)多用戶(hù)多目錄的文件系統(tǒng)。</p><p>  2.2文件物理結(jié)構(gòu)可采用顯式鏈接或其他方法。</p><p>  2.3磁盤(pán)空閑空間的管理可選擇位示圖或其他方法。如果采用位示圖來(lái)管理文件存儲(chǔ)空間,并采用顯式鏈接分配方式,則可以將位示圖合并到FAT中。&

11、lt;/p><p>  2.4文件目錄結(jié)構(gòu)采用多用戶(hù)多級(jí)目錄結(jié)構(gòu),每個(gè)目錄項(xiàng)包含文件名、物理地址、長(zhǎng)度等信息,還可以通過(guò)目錄項(xiàng)實(shí)現(xiàn)對(duì)文件的讀和寫(xiě)的保護(hù)。</p><p>  2.5設(shè)計(jì)一個(gè)較實(shí)用的用戶(hù)界面,方便用戶(hù)使用。要求提供以下相關(guān)文件操作:</p><p>  2.5.1具有l(wèi)ogin (用戶(hù)登錄)</p><p>  2.5.2系統(tǒng)初始化

12、(建文件卷、提供登錄模塊)</p><p>  2.5.3文件的創(chuàng)建: create</p><p>  2.5.4文件的打開(kāi):open</p><p>  2.5.5文件的讀:read</p><p>  2.5.6文件的寫(xiě):write</p><p>  2.5.7文件關(guān)閉:close</p><

13、;p>  2.5.8刪除文件:delete </p><p>  2.5.9創(chuàng)建目錄(建立子目錄):mkdir</p><p>  2.5.10改變當(dāng)前目錄:cd</p><p>  2.5.11列出文件目錄:dir</p><p>  2.5.12退出:logout</p><p><b>  數(shù)據(jù)結(jié)

14、構(gòu)說(shuō)明</b></p><p><b>  3.1開(kāi)發(fā)環(huán)境</b></p><p>  Visual C++6.0下的win32控制臺(tái)程序,C語(yǔ)言。</p><p><b>  3.2數(shù)據(jù)存儲(chǔ)</b></p><p>  在內(nèi)存中申請(qǐng)1M的空間來(lái)模擬存取設(shè)備,空間劃分為三部分,第一部分用

15、來(lái)存放位示圖,用于標(biāo)識(shí)數(shù)據(jù)塊的使用情況,第二部分放置一個(gè)文件索引的數(shù)據(jù),用于快速的查找數(shù)據(jù),第三部分放置數(shù)據(jù)信息,第三部分劃分為512塊,每塊512B,其256K,放置在1M空間的最末端,由第三部分的大小可知,第一部分只需64B即可,中間的部分用來(lái)存放文件索引。其他用到的存儲(chǔ)單元由系統(tǒng)分配。</p><p><b>  3.3數(shù)據(jù)結(jié)構(gòu)</b></p><p>  3.

16、3.1數(shù)據(jù)塊在內(nèi)存中的物理結(jié)構(gòu)</p><p>  typedef struct fb</p><p><b>  {</b></p><p>  unsigned FileBlockId;//文件塊編號(hào)</p><p>  unsigned BLOCK_SIZE; //文件塊的容量</p>&

17、lt;p>  char *FileBlockAddr; //文件塊地址</p><p>  struct fb *next; //下一個(gè)文件塊的地址</p><p>  } FileBlock;</p><p>  3.3.2文件索引結(jié)構(gòu)</p><p>  typedef struct </p><

18、p><b>  {</b></p><p>  unsigned Index;//文件元素索引編號(hào)</p><p>  char FileName[NAME_LEN]; //文件元素名</p><p>  char ParentName[NAME_LEN]; //父節(jié)點(diǎn)名</p>&

19、lt;p>  unsigned FileBlockId;//文件元素所在物理塊編號(hào)</p><p>  unsigned FileLevel; //文件元素所在層次,層+文件元素</p><p>  名為一個(gè)文件元素邏輯位置</p><p>  unsigned effect; //是否有效,0-無(wú)效,1-有效&l

20、t;/p><p>  } FileIndexElement;</p><p>  3.3.3文件系統(tǒng)中文件元素的結(jié)構(gòu)(含文件夾和文件)</p><p>  typedef struct fse</p><p><b>  {</b></p><p>  struct fse *parent;

21、 //指向自己的父親節(jié)點(diǎn)</p><p>  unsigned FileLevel; //文件元素所在層次,層+文件元素名</p><p>  為一個(gè)文件元素的邏輯位置</p><p>  char FileName[NAME_LEN]; //文件元素名</p><p>  unsigned FileBlockId;/

22、/文件元素所在物理塊編號(hào)</p><p>  unsigned FileElemLen;//文件元素的長(zhǎng)度</p><p>  FileType Type;//文件元素類(lèi)型</p><p>  FileAccess Access;//文件元素可供操作的權(quán)限</p><p>  User Creator;//

23、文件創(chuàng)建者</p><p>  char CreateTime[18];//創(chuàng)建時(shí)間,日期格式:MM/DD/YY HH:MI:SS</p><p>  char LastModTime[18];//最后一次修改時(shí)間</p><p>  char *FileData;//一個(gè)文件的數(shù)據(jù)開(kāi)始地址,文件夾時(shí)該值為NULL</p><

24、p>  FileStatus fileStu;//如果是一個(gè)文件表示文件當(dāng)前的狀態(tài)</p><p>  } FSElement;</p><p>  3.3.4文件系統(tǒng)結(jié)構(gòu)</p><p>  typedef struct </p><p><b>  {</b></p><p> 

25、 char *FSStart;//文件系統(tǒng)的起始地址</p><p>  unsigned SuperBlockSize; //文件系統(tǒng)的容量</p><p>  BitMap bm;//文件系統(tǒng)中的位示圖</p><p>  unsigned BLOCK_COUNT;//文件系統(tǒng)中文件塊的數(shù)量</p><p&

26、gt;  FileBlock *head;//文件系統(tǒng)中文件塊首地址</p><p>  FileIndex FI;//文件系統(tǒng)中的文件索引</p><p>  } SuperBlock;</p><p>  3.3.5文件系統(tǒng)的當(dāng)前運(yùn)行狀態(tài)</p><p>  typedef struct</p><p

27、><b>  {</b></p><p>  User CurrentUser;//當(dāng)前用戶(hù)</p><p>  unsigned FileLevel;//用戶(hù)所在文件系統(tǒng)層</p><p>  FSElement *CurrParent;//當(dāng)前層的父節(jié)點(diǎn)</p><p>  char *C

28、urrentPath;//當(dāng)前路徑</p><p>  } CurrentStatus;</p><p><b>  3.3.6用戶(hù)結(jié)構(gòu)</b></p><p>  typedef struct </p><p><b>  {</b></p><p>  char

29、*UserName;//用戶(hù)名稱(chēng)</p><p>  UserType ut;//用戶(hù)類(lèi)型</p><p><b>  } User;</b></p><p>  各主要模塊的算法流程圖</p><p><b>  4.1整體思路概述</b></p><p&g

30、t;  首先系統(tǒng)要完成初始化的任務(wù),建立一個(gè)系統(tǒng),并等待用戶(hù)登錄使用文件系統(tǒng),用戶(hù)登錄系統(tǒng)時(shí),系統(tǒng)對(duì)用戶(hù)的用戶(hù)名和密碼進(jìn)行驗(yàn)證(允許用戶(hù)用限次的嘗試,多最多嘗試五次),如果用戶(hù)登錄成功,則系統(tǒng)進(jìn)入命令提示符狀態(tài),等用戶(hù)輸入指令后,系統(tǒng)得用一個(gè)解釋程序按照指定方式處理用戶(hù)請(qǐng)求,用戶(hù)退出后,系統(tǒng)轉(zhuǎn)入登錄模塊,等待下一位用戶(hù)的登錄。</p><p>  4.1.1login (用戶(hù)登錄)</p><

31、p>  內(nèi)置9個(gè)用戶(hù)名和密碼,用來(lái)驗(yàn)證登錄用戶(hù)的身份,用戶(hù)登錄成功后會(huì)初始化當(dāng)前用戶(hù)等一系列的系統(tǒng)當(dāng)前信息,默認(rèn)用戶(hù)的類(lèi)型為普通用戶(hù),如果用戶(hù)未能通過(guò)身份驗(yàn)證,提示用戶(hù)登錄失敗,退出整個(gè)系統(tǒng)。</p><p><b>  用戶(hù)登錄流程圖</b></p><p>  4.1.2系統(tǒng)初始化</p><p>  系統(tǒng)的初始化要完成文件系統(tǒng)的建立

32、,包括以下幾部分:請(qǐng)求內(nèi)存、設(shè)置位示圖、初始化文件索引、初始化文本塊鏈表、初始化系統(tǒng)的當(dāng)前狀態(tài)、創(chuàng)建一個(gè)根目錄做為系統(tǒng)的根。</p><p>  4.1.3文件的創(chuàng)建: create</p><p>  只支持在當(dāng)前目錄創(chuàng)建文件,根據(jù)位示圖找到一個(gè)未使用的文件塊用來(lái)存放用戶(hù)的文件信息,根據(jù)系統(tǒng)當(dāng)前狀態(tài)來(lái)構(gòu)建一個(gè)文件系統(tǒng)元素放入到找到的文件塊中,新創(chuàng)建的文件狀態(tài)為關(guān)閉,同時(shí)更新位示圖和文件索

33、引。</p><p><b>  文件創(chuàng)建流程圖</b></p><p>  void Create(char *filename)</p><p><b>  {</b></p><p>  if (strcmp(filename, "") == 0)</p>&

34、lt;p><b>  {</b></p><p>  printf("對(duì)不起,文件名不能為空。\n");</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b>

35、</p><p>  CreateFileElement(protect, filename, file, NULL, CS.CurrParent);</p><p><b>  }</b></p><p>  printf("[%s@localhost %s]$", CS.CurrentUser.UserName, CS.

36、CurrentPath);</p><p><b>  }</b></p><p>  4.1.4文件的打開(kāi):open</p><p>  只支持在當(dāng)前目錄進(jìn)行操作,通過(guò)用戶(hù)給定的文件名在文件索引中搜索到文件的物理文件塊ID,找到該文件元素后,將文件當(dāng)前狀態(tài)置為打開(kāi)。</p><p><b>  打開(kāi)文件流程圖

37、</b></p><p>  void Open(char *path)</p><p><b>  {</b></p><p>  char display[100];</p><p>  for (unsigned i = 0; i < FS.FI.FICount; i++)</p>

38、<p><b>  {</b></p><p>  if (!strcmp(FS.FI.FIStart[i].ParentName, CS.CurrParent->FileName) </p><p>  && FS.FI.FIStart[i].FileLevel == CS.FileLevel </p><p&g

39、t;  && FS.FI.FIStart[i].effect == 1 </p><p>  && strcmp(FS.FI.FIStart[i].FileName, path) == 0)</p><p><b>  {</b></p><p>  FSElement *fselem = (FSElement

40、*)</p><p>  FindBlankFileBlock(FS.FI.FIStart[i].FileBlockId);</p><p>  fselem->fileStu = opened;</p><p>  strcpy(display, "文件已打開(kāi)完畢。\n");</p><p><b>  

41、break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if (strcmp(display, "") == 0)</p><p><b>  {</b></p>&

42、lt;p>  strcpy(display, "當(dāng)前目錄下沒(méi)有您要打開(kāi)的文件。\n");</p><p><b>  }</b></p><p>  printf("%s\n", display);</p><p>  printf("[%s@localhost %s]$", C

43、S.CurrentUser.UserName, CS.CurrentPath);</p><p><b>  }</b></p><p>  4.1.5文件的讀:read</p><p>  只支持在當(dāng)前目錄進(jìn)行操作,前提是用戶(hù)已執(zhí)行文件打開(kāi)的命令,否則會(huì)提示用戶(hù)先打開(kāi)文件。通過(guò)類(lèi)似的查找方式,找到文件的數(shù)據(jù)部分,將數(shù)據(jù)顯示到界面。</p

44、><p><b>  讀文件流程圖</b></p><p>  void Read(char *path)</p><p><b>  {</b></p><p>  char display[BLOCK_SIZE];</p><p>  for (unsigned i = 0;

45、 i < FS.FI.FICount; i++)</p><p><b>  {</b></p><p>  if (!strcmp(FS.FI.FIStart[i].ParentName, CS.CurrParent->FileName) </p><p>  && FS.FI.FIStart[i].FileLev

46、el == CS.FileLevel </p><p>  && FS.FI.FIStart[i].effect == 1 </p><p>  &&strcmp(FS.FI.FIStart[i].FileName, path) == 0)</p><p><b>  {</b></p><

47、p>  FSElement *fselem = (FSElement *)</p><p>  FindBlankFileBlock(FS.FI.FIStart[i].FileBlockId);</p><p>  if (fselem->fileStu == closed)</p><p><b>  {</b></p>

48、;<p>  strcpy(display, "文件尚未打開(kāi),請(qǐng)先打開(kāi)文件。\n");</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  if (!

49、fselem->FileData || !strcmp(fselem->FileData, ""))</p><p><b>  {</b></p><p>  strcpy(display, "文件無(wú)內(nèi)容。\n");</p><p><b>  }</b></p&

50、gt;<p><b>  else</b></p><p><b>  {</b></p><p>  strcpy(display, fselem->FileData);</p><p><b>  }</b></p><p>  fselem->

51、;fileStu = reading;</p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>

52、  if (strcmp(display, "") == 0)</p><p><b>  {</b></p><p>  strcpy(display, "當(dāng)前目錄下沒(méi)有您要打開(kāi)的文件。\n");</p><p><b>  }</b></p><p>  

53、printf("%s\n", display);</p><p>  printf("[%s@localhost %s]$", CS.CurrentUser.UserName, CS.CurrentPath);</p><p><b>  }</b></p><p>  4.1.6文件的寫(xiě):write&l

54、t;/p><p>  只支持在當(dāng)前目錄進(jìn)行操作,前提是用戶(hù)已執(zhí)行文件打開(kāi)的命令,否則會(huì)提示用戶(hù)先打開(kāi)文件。命令成功后,會(huì)等待用戶(hù)的輸入,用戶(hù)輸入完畢,使用CTRL+D,結(jié)束輸入,系統(tǒng)會(huì)讀入用戶(hù)的輸入內(nèi)容,保存到相應(yīng)的文件塊(注意,如果用戶(hù)的輸入太多,會(huì)出現(xiàn)越界或截取用戶(hù)輸入一部分的現(xiàn)象)。</p><p>  void Write(char *path)</p><p>

55、;<b>  {</b></p><p>  char display[BLOCK_SIZE];</p><p>  memset(display, '\0', BLOCK_SIZE);</p><p>  for (unsigned i = 0; i < FS.FI.FICount; i++)</p>&l

56、t;p><b>  {</b></p><p>  if (!strcmp(FS.FI.FIStart[i].ParentName, CS.CurrParent->FileName) </p><p>  && FS.FI.FIStart[i].FileLevel == CS.FileLevel </p><p>

57、  && FS.FI.FIStart[i].effect == 1 </p><p>  && strcmp(FS.FI.FIStart[i].FileName, path) == 0)</p><p><b>  {</b></p><p>  FSElement *fselem = (FSElement *)

58、</p><p>  FindBlankFileBlock(FS.FI.FIStart[i].FileBlockId);</p><p>  if (fselem->fileStu == closed)</p><p><b>  {</b></p><p>  strcpy(display, "文件尚未

59、打開(kāi),請(qǐng)先打開(kāi)文件。\n");</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  printf("\n注意:文件最大不可以超過(guò) %d 字節(jié)!!按CTRL+D結(jié)&l

60、t;/p><p>  束編輯。\n", BLOCK_SIZE - sizeof(FSElement));</p><p><b>  char c;</b></p><p>  int i = 0;</p><p>  while ((c = getchar()) != 0x04)</p><p

61、><b>  {</b></p><p>  display[i++] = c;</p><p><b>  }</b></p><p>  getchar();//處理回車(chē)</p><p>  display[i] = '\0';</p><p> 

62、 strcpy(fselem->FileData, display);</p><p>  unsigned len=strlen(display)<BLOCK_SIZE - sizeof(FSElement)</p><p>  ? strlen(display) : BLOCK_SIZE - sizeof(FSElement);</p><p>

63、  strncpy(fselem->FileData, display, len);</p><p>  fselem->fileStu = writing;</p><p>  strcpy(display, "文件寫(xiě)入成功。\n");</p><p><b>  }</b></p><

64、;p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("%s\n", display);</p><p>  printf("[%s@loca

65、lhost %s]$", CS.CurrentUser.UserName, CS.CurrentPath);</p><p><b>  }</b></p><p>  4.1.7文件關(guān)閉:close</p><p>  只支持在當(dāng)前目錄進(jìn)行操作,通過(guò)用戶(hù)給定的文件名在文件索引中搜索到文件的物理文件塊ID,找到該文件元素后,將文件當(dāng)前

66、狀態(tài)置為關(guān)閉。</p><p>  void Close(char *path)</p><p><b>  {</b></p><p>  char display[100];</p><p>  for (unsigned i = 0; i < FS.FI.FICount; i++)</p>&l

67、t;p><b>  {</b></p><p>  if (!strcmp(FS.FI.FIStart[i].ParentName, CS.CurrParent->FileName) </p><p>  && FS.FI.FIStart[i].FileLevel == CS.FileLevel </p><p>

68、  && FS.FI.FIStart[i].effect == 1 </p><p>  && strcmp(FS.FI.FIStart[i].FileName, path) == 0)</p><p><b>  {</b></p><p>  FSElement *fselem = (FSElement *)

69、</p><p>  FindBlankFileBlock(FS.FI.FIStart[i].FileBlockId);</p><p>  fselem->fileStu = opened;</p><p>  strcpy(display, "文件已關(guān)閉。\n");</p><p><b>  brea

70、k;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if (strcmp(display, "") == 0)</p><p><b>  {</b></p><p

71、>  strcpy(display, "當(dāng)前目錄下沒(méi)有您要關(guān)閉的文件。\n");</p><p><b>  }</b></p><p>  printf("%s\n", display);</p><p>  printf("[%s@localhost %s]$", CS.Cu

72、rrentUser.UserName, CS.CurrentPath);</p><p><b>  }</b></p><p>  4.1.8刪除文件:delete</p><p>  刪除文件并不真正清理文件的物理存儲(chǔ)內(nèi)容,只是將文件的有效狀態(tài)更改為無(wú)效。</p><p><b>  刪除文件流程圖<

73、/b></p><p>  void Delete(char *path)</p><p><b>  {</b></p><p>  char display[100] = "";</p><p>  for (unsigned i = 0; i < FS.FI.FICount; i++

74、)</p><p><b>  {</b></p><p>  if (!strcmp(FS.FI.FIStart[i].ParentName, CS.CurrParent->FileName) </p><p>  && FS.FI.FIStart[i].FileLevel == CS.FileLevel </p&

75、gt;<p>  && FS.FI.FIStart[i].effect == 1 </p><p>  &&strcmp(FS.FI.FIStart[i].FileName, path) == 0)</p><p><b>  {</b></p><p>  FS.FI.FIStart[i].ef

76、fect = 0;//刪除標(biāo)記</p><p>  strcpy(display, "文件已刪除。\n");</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p>

77、;<p>  if (strcmp(display, "") == 0)</p><p><b>  {</b></p><p>  strcpy(display, "當(dāng)前目錄下沒(méi)有您要?jiǎng)h除的文件。\n");</p><p><b>  }</b></p>

78、<p>  printf("%s\n", display);</p><p>  printf("[%s@localhost %s]$", CS.CurrentUser.UserName, CS.CurrentPath);</p><p><b>  }</b></p><p>  4.1.9

79、創(chuàng)建目錄(建立子目錄):mkdir</p><p>  只支持在當(dāng)前目錄創(chuàng)建文件,與創(chuàng)建文件有點(diǎn)類(lèi)似,只是文件夾在文件元素結(jié)構(gòu)中的數(shù)據(jù)部分為空。同樣會(huì)更新位示圖和文件索引。</p><p><b>  創(chuàng)建目錄流程圖</b></p><p>  void Mkdir(char *filename)</p><p><

80、;b>  {</b></p><p>  if (strcmp(filename, "") == 0)</p><p><b>  {</b></p><p>  printf("對(duì)不起,文件夾名不能為空。\n");</p><p><b>  }<

81、;/b></p><p><b>  else</b></p><p><b>  {</b></p><p>  CreateFileElement(protect, filename, dir, NULL, CS.CurrParent);</p><p><b>  }</

82、b></p><p>  printf("[%s@localhost %s]$", CS.CurrentUser.UserName, CS.CurrentPath);</p><p><b>  }</b></p><p>  4.1.10改變當(dāng)前目錄:cd</p><p>  只支持進(jìn)入下一層

83、的一個(gè)文件夾和回到父目錄,實(shí)現(xiàn)方式為通過(guò)系統(tǒng)的當(dāng)前狀態(tài),獲取一個(gè)指向目標(biāo)文件夾的指針做為當(dāng)前的父節(jié)點(diǎn),改變當(dāng)前的路徑為目標(biāo)路徑,改變用戶(hù)當(dāng)前所在層。</p><p><b>  改變當(dāng)前目錄流程圖</b></p><p>  void Cd(char *path)</p><p><b>  {</b></p>

84、<p>  int splitDisplayCou = 0;//分割符出現(xiàn)的次數(shù)</p><p>  if(strcmp(path, "..") == 0) //返回上一級(jí)目錄,即父目錄</p><p><b>  {</b></p><p>  if (CS.FileLevel > 0)</p

85、><p><b>  {</b></p><p>  CS.FileLevel--;</p><p>  CS.CurrParent = CS.CurrParent->parent;</p><p>  for (unsigned i = strlen(CS.CurrentPath) - 1; i > 0; i-

86、-)</p><p><b>  {</b></p><p>  if (CS.CurrentPath[i] == '/')</p><p><b>  {</b></p><p>  splitDisplayCou++;</p><p>  if (spli

87、tDisplayCou == 2)//已過(guò)濾掉最后一個(gè)目錄名</p><p><b>  {</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p>

88、<p><b>  }</b></p><p>  char temppath[1000] ;</p><p>  strcpy(temppath, CS.CurrentPath);</p><p>  memset(CS.CurrentPath, '\0', 1000);</p><p>  

89、strncpy(CS.CurrentPath, temppath, i+1);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p

90、><p>  char display[100] = "";</p><p>  for (unsigned i = 0; i < FS.FI.FICount; i++)</p><p><b>  {</b></p><p>  if(!strcmp(FS.FI.FIStart[i].Parent

91、Name, CS.CurrParent->FileName)</p><p>  && FS.FI.FIStart[i].FileLevel == CS.FileLevel </p><p>  && FS.FI.FIStart[i].effect == 1 </p><p>  && strcmp(FS.FI

92、.FIStart[i].FileName, path) == 0)</p><p><b>  {</b></p><p>  strcpy(display, "文件存在。\n");</p><p>  CS.CurrParent = (FSElement *)</p><p>  FindBlank

93、FileBlock(FS.FI.FIStart[i].FileBlockId);</p><p>  CS.FileLevel++;</p><p>  strcat(CS.CurrentPath, path);</p><p>  strcat(CS.CurrentPath, "/");</p><p><b&g

94、t;  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if (strcmp(display, "") == 0)//文件夾不存在,什么都不做</p><p><b>  {<

95、/b></p><p>  printf("當(dāng)前目錄下沒(méi)有您要進(jìn)入的文件夾。\n");</p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("[%s@localhost %s]$", CS.C

96、urrentUser.UserName, CS.CurrentPath);</p><p><b>  }</b></p><p>  4.1.11列出文件目錄:dir</p><p>  只支持在當(dāng)前目錄進(jìn)行操作,根據(jù)文件元素的名稱(chēng)+文件元素所在層+父節(jié)點(diǎn)可以唯一的標(biāo)識(shí)一個(gè)文件元素的關(guān)系在文件索引中搜索出當(dāng)前層的所有文件元素。</p&g

97、t;<p>  void Dir(char *path)</p><p><b>  {</b></p><p>  char display[1000];</p><p>  memset(display, '\0', 1000);</p><p><b>  //查找顯示內(nèi)容&

98、lt;/b></p><p>  for (unsigned i = 0; i < FS.FI.FICount; i++)</p><p><b>  {</b></p><p>  if (!strcmp(FS.FI.FIStart[i].ParentName, CS.CurrParent->FileName) </p

99、><p>  && FS.FI.FIStart[i].FileLevel == CS.FileLevel </p><p>  && FS.FI.FIStart[i].effect == 1)</p><p><b>  {</b></p><p>  strcat(display, FS.F

100、I.FIStart[i].FileName);</p><p>  strcat(display, "\t\t");</p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("%s\n", displa

101、y);</p><p>  printf("[%s@localhost %s]$", CS.CurrentUser.UserName, CS.CurrentPath);</p><p><b>  }</b></p><p>  4.1.12退出:logout</p><p>  用戶(hù)請(qǐng)求退出時(shí),跳出

102、命令處理,提示用戶(hù)退出系統(tǒng),轉(zhuǎn)入到登錄模塊等待下一個(gè)用戶(hù)的登錄。</p><p><b>  4.2算法流程圖</b></p><p><b>  算法流程圖</b></p><p><b>  使用說(shuō)明書(shū)</b></p><p><b>  5.1登錄</b&

103、gt;</p><p>  內(nèi)置設(shè)了user1到user8八個(gè)普通用戶(hù)和1個(gè)超級(jí)用戶(hù)root,密碼與用戶(hù)名相同。登錄時(shí)如果輸入用戶(hù)名和密碼錯(cuò)誤次數(shù)多于8次,則退出程序。輸入密碼時(shí)采用了一種不回顯的方式,雖然屏幕上沒(méi)有顯示輸入的密碼,其實(shí)密碼已經(jīng)輸入了系統(tǒng),這樣做可以提高系統(tǒng)的安全性?,F(xiàn)在用超級(jí)用戶(hù)root登錄后出現(xiàn)如下界面:/表示根目錄,$后面可以輸入命令。</p><p><b&g

104、t;  圖5.1</b></p><p>  5.2新建目錄和列出文件目錄</p><p>  由于第一次啟動(dòng)系統(tǒng),故根目錄下沒(méi)有任何東西,這點(diǎn)可以通過(guò)輸入命令dir來(lái)驗(yàn)證,故為了演示,先建立一個(gè)目錄hhh,在$后輸入命令,mkdir hhh,按回車(chē),然后再用命令dir查看根目錄下信息,此時(shí)有一個(gè)文件hhh,如下:</p><p><b>  

105、圖5.2</b></p><p><b>  5.3改變當(dāng)前目錄</b></p><p>  系統(tǒng)啟動(dòng)后,默認(rèn)路徑為根目錄/,此時(shí)若要進(jìn)入剛才新建的目錄hhh,只需輸入命令cd hhh,結(jié)果如下:路徑已由原來(lái)的/變成了/hhh/</p><p><b>  圖5.3</b></p><p&g

106、t;<b>  5.4文件的創(chuàng)建</b></p><p>  在目錄hhh下新建一個(gè)名為h的文件,在$后輸入命令create h,再用命令dir列出文件:</p><p><b>  圖5.4</b></p><p><b>  5.5文件的打開(kāi)</b></p><p>  用

107、命令open h打開(kāi)文件h:</p><p><b>  圖5.5</b></p><p><b>  5.6文件的寫(xiě)</b></p><p>  先輸入命令write h,再輸入文字:Idle brain is the devil’s workshop.</p><p><b>  圖5

108、.6</b></p><p><b>  5.7文件的讀</b></p><p>  執(zhí)行命令read h可以讀取文件h的內(nèi)容:</p><p><b>  圖5.7</b></p><p><b>  5.8文件的關(guān)閉</b></p><p&g

109、t;  執(zhí)行命令close h關(guān)閉文件h:</p><p><b>  圖5.8</b></p><p><b>  5.9文件的刪除</b></p><p>  執(zhí)行命令delete h刪除文件h:</p><p><b>  圖5.9</b></p><

110、p><b>  5.10返回根目錄</b></p><p>  執(zhí)行命令cd ..,路徑由/hhh變成了/</p><p><b>  圖5.10</b></p><p><b>  5.11退出</b></p><p>  執(zhí)行命令logout,退出系統(tǒng),可以以其他用戶(hù)

111、名進(jìn)行登錄</p><p><b>  總結(jié)</b></p><p>  在設(shè)計(jì)的過(guò)程中遇到問(wèn)題,可以說(shuō)得是困難重重,同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,通過(guò)這次課程設(shè)計(jì)之后,一定把以前所學(xué)過(guò)的知識(shí)重新溫故。這次課程設(shè)計(jì)終于順利完成了,在設(shè)計(jì)中遇到了很多編程問(wèn)題,最后在通過(guò)運(yùn)用豐富的網(wǎng)絡(luò)資源,終于游逆而解。<

112、/p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 計(jì)算機(jī)操作系統(tǒng)(第三版), 湯子丹等 ,西安電子科技大學(xué)出版社, 2007</p><p>  [2] Linux內(nèi)核完全剖析,趙炯,機(jī)械工業(yè)出版社,2006</p><p>  [3] 操作系統(tǒng)課程設(shè)計(jì),羅宇 褚瑞等,機(jī)械工業(yè)出版社,2005</

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論