多用戶多級(jí)目錄文件系統(tǒng)的實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第1頁(yè)
多用戶多級(jí)目錄文件系統(tǒng)的實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第2頁(yè)
多用戶多級(jí)目錄文件系統(tǒng)的實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第3頁(yè)
多用戶多級(jí)目錄文件系統(tǒng)的實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第4頁(yè)
多用戶多級(jí)目錄文件系統(tǒng)的實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

課程設(shè)計(jì)課程名稱(chēng)_____操作系統(tǒng)____題目名稱(chēng)多顧客多級(jí)目錄文獻(xiàn)系統(tǒng)的實(shí)現(xiàn)一、課程設(shè)計(jì)的內(nèi)容本課程設(shè)計(jì)規(guī)定設(shè)計(jì)一種模擬的多顧客多級(jí)目錄的文獻(xiàn)系統(tǒng)。通過(guò)具體的文獻(xiàn)存儲(chǔ)空間的管理、文獻(xiàn)的物理構(gòu)造、目錄構(gòu)造和文獻(xiàn)操作的實(shí)現(xiàn),加深對(duì)文獻(xiàn)系統(tǒng)內(nèi)部功效和實(shí)現(xiàn)過(guò)程的理解。二、課程設(shè)計(jì)的規(guī)定與數(shù)據(jù)在內(nèi)存中開(kāi)辟一種虛擬磁盤(pán)空間作為文獻(xiàn)存儲(chǔ)器,在其上實(shí)現(xiàn)一種多顧客多目錄的文獻(xiàn)系統(tǒng)。文獻(xiàn)物理構(gòu)造可采用顯式鏈接或其它辦法。磁盤(pán)空閑空間的管理可選擇位示圖或其它辦法。如果采用位示圖來(lái)管理文獻(xiàn)存儲(chǔ)空間,并采用顯式鏈接分派方式,則能夠?qū)⑽皇緢D合并到FAT中。文獻(xiàn)目錄構(gòu)造采用多顧客多級(jí)目錄構(gòu)造,每個(gè)目錄項(xiàng)包含文獻(xiàn)名、物理地址、長(zhǎng)度等信息,還能夠通過(guò)目錄項(xiàng)實(shí)現(xiàn)對(duì)文獻(xiàn)的讀和寫(xiě)的保護(hù)。目錄組織方式能夠不使用索引結(jié)點(diǎn)的方式,但使用索引結(jié)點(diǎn),則難度系數(shù)為1.2。設(shè)計(jì)一種較實(shí)用的顧客界面,方便顧客使用。規(guī)定提供下列有關(guān)文獻(xiàn)操作:(1)含有l(wèi)ogin(顧客登錄)(2)系統(tǒng)初始化(建文獻(xiàn)卷、提供登錄模塊)(3)文獻(xiàn)的創(chuàng)立:create(4)文獻(xiàn)的打開(kāi):open(5)文獻(xiàn)的讀:read(6)文獻(xiàn)的寫(xiě):write(7)文獻(xiàn)關(guān)閉:close(8)刪除文獻(xiàn):delete(9)創(chuàng)立目錄(建立子目錄):mkdir(10)變化現(xiàn)在目錄:cd(11)列出文獻(xiàn)目錄:dir(12)退出:logout系統(tǒng)必須可實(shí)際演示,選用程序設(shè)計(jì)語(yǔ)言:C++、C等。三、課程設(shè)計(jì)應(yīng)完畢的工作1.充足理解設(shè)計(jì)的任務(wù),完畢設(shè)計(jì)的基本規(guī)定。然后根據(jù)自己的基礎(chǔ)和能力選擇不同難度的算法和實(shí)現(xiàn)方式,以獲得更高的分?jǐn)?shù)。2.獨(dú)立獨(dú)立完畢系統(tǒng)的分析、設(shè)計(jì)、編碼、測(cè)試工作。3.完畢設(shè)計(jì)報(bào)告的撰寫(xiě)。4.以光盤(pán)(以班為單位刻錄)方式提交已調(diào)試通過(guò)的完整的有關(guān)源程序和能夠運(yùn)行的執(zhí)行文獻(xiàn);提交“課程設(shè)計(jì)報(bào)告”的書(shū)面和電子兩種版本。四、課程設(shè)計(jì)進(jìn)程安排序號(hào)設(shè)計(jì)各階段內(nèi)容地點(diǎn)起止日期1查閱資料、分析題目、概要設(shè)計(jì)分散周一2具體設(shè)計(jì)、編碼分散周二3調(diào)試實(shí)驗(yàn)室周三4撰寫(xiě)設(shè)計(jì)報(bào)告分散周四5運(yùn)行、驗(yàn)收實(shí)驗(yàn)室周五五、應(yīng)收集的資料及重要參考文獻(xiàn)[1]計(jì)算機(jī)操作系統(tǒng)(修訂版),湯子瀛等,西安電子科技大學(xué)出版社,[2]操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)書(shū),傅秀芬,廣東工業(yè)大學(xué)(自編)[3]計(jì)算機(jī)操作系統(tǒng)教程(第二版),張堯?qū)W、史美林,清華大學(xué)出版社,[4]當(dāng)代操作系統(tǒng),A.S.Tanenbaum著,陳向群等譯機(jī)械工業(yè)出版社,年發(fā)出任務(wù)書(shū)日期:6月15日指導(dǎo)教師簽名:計(jì)劃完畢日期:6月24日基層教學(xué)單位負(fù)責(zé)人簽章:主管院長(zhǎng)簽章:目錄1.設(shè)計(jì)思想闡明 12.系統(tǒng)構(gòu)造闡明 13.數(shù)據(jù)構(gòu)造闡明 13.1開(kāi)發(fā)環(huán)境 13.2數(shù)據(jù)存儲(chǔ) 23.3數(shù)據(jù)構(gòu)造 23.3.1數(shù)據(jù)塊在內(nèi)存中的物理構(gòu)造 23.3.2文獻(xiàn)索引構(gòu)造 23.3.3文獻(xiàn)系統(tǒng)中文獻(xiàn)元素的構(gòu)造(含文獻(xiàn)夾和文獻(xiàn)) 23.3.4文獻(xiàn)系統(tǒng)構(gòu)造 33.3.5文獻(xiàn)系統(tǒng)的現(xiàn)在運(yùn)行狀態(tài) 33.3.6顧客構(gòu)造 44.各重要模塊的算法流程圖 44.1整體思路概述 44.1.1login(顧客登錄) 44.1.2系統(tǒng)初始化 54.1.3文獻(xiàn)的創(chuàng)立:create 54.1.4文獻(xiàn)的打開(kāi):open 64.1.5文獻(xiàn)的讀:read 64.1.6文獻(xiàn)的寫(xiě):write 84.1.7文獻(xiàn)關(guān)閉:close 94.1.8刪除文獻(xiàn):delete 104.1.9創(chuàng)立目錄(建立子目錄):mkdir 124.1.10變化現(xiàn)在目錄:cd 124.1.11列出文獻(xiàn)目錄:dir 144.1.12退出:logout 154.2算法流程圖 165.使用闡明書(shū) 175.1登錄 175.2新建目錄和列出文獻(xiàn)目錄 175.3變化現(xiàn)在目錄 175.4文獻(xiàn)的創(chuàng)立 185.5文獻(xiàn)的打開(kāi) 185.6文獻(xiàn)的寫(xiě) 185.7文獻(xiàn)的讀 185.8文獻(xiàn)的關(guān)閉 185.9文獻(xiàn)的刪除 195.10返回根目錄 195.11退出 196.心得體會(huì) 19參考文獻(xiàn) 191.設(shè)計(jì)思想闡明本課程設(shè)計(jì)規(guī)定設(shè)計(jì)一種模擬的多顧客多級(jí)目錄的文獻(xiàn)系統(tǒng)。通過(guò)具體的文獻(xiàn)存儲(chǔ)空間的管理、文獻(xiàn)的物理構(gòu)造、目錄構(gòu)造和文獻(xiàn)操作的實(shí)現(xiàn),加深對(duì)文獻(xiàn)系統(tǒng)內(nèi)部功效和實(shí)現(xiàn)過(guò)程的理解。2.系統(tǒng)構(gòu)造闡明2.1在內(nèi)存中開(kāi)辟一種虛擬磁盤(pán)空間作為文獻(xiàn)存儲(chǔ)器,在其上實(shí)現(xiàn)一種多顧客多目錄的文獻(xiàn)系統(tǒng)。2.2文獻(xiàn)物理構(gòu)造可采用顯式鏈接或其它辦法。2.3磁盤(pán)空閑空間的管理可選擇位示圖或其它辦法。如果采用位示圖來(lái)管理文獻(xiàn)存儲(chǔ)空間,并采用顯式鏈接分派方式,則能夠?qū)⑽皇緢D合并到FAT中。2.4文獻(xiàn)目錄構(gòu)造采用多顧客多級(jí)目錄構(gòu)造,每個(gè)目錄項(xiàng)包含文獻(xiàn)名、物理地址、長(zhǎng)度等信息,還能夠通過(guò)目錄項(xiàng)實(shí)現(xiàn)對(duì)文獻(xiàn)的讀和寫(xiě)的保護(hù)。2.5設(shè)計(jì)一種較實(shí)用的顧客界面,方便顧客使用。規(guī)定提供下列有關(guān)文獻(xiàn)操作:2.5.1含有l(wèi)ogin(顧客登錄)2.5.2系統(tǒng)初始化(建文獻(xiàn)卷、提供登錄模塊)2.5.3文獻(xiàn)的創(chuàng)立:create2.5.4文獻(xiàn)的打開(kāi):open2.5.5文獻(xiàn)的讀:read2.5.6文獻(xiàn)的寫(xiě):write2.5.7文獻(xiàn)關(guān)閉:close2.5.8刪除文獻(xiàn):delete2.5.9創(chuàng)立目錄(建立子目錄):mkdir2.5.10變化現(xiàn)在目錄:cd2.5.11列出文獻(xiàn)目錄:dir2.5.12退出:logout3.數(shù)據(jù)構(gòu)造闡明3.1開(kāi)發(fā)環(huán)境VisualC++6.0下的win32控制臺(tái)程序,C語(yǔ)言。3.2數(shù)據(jù)存儲(chǔ)在內(nèi)存中申請(qǐng)1M的空間來(lái)模擬存取設(shè)備,空間劃分為三部分,第一部分用來(lái)寄存位示圖,用于標(biāo)記數(shù)據(jù)塊的使用狀況,第二部分放置一種文獻(xiàn)索引的數(shù)據(jù),用于快速的查找數(shù)據(jù),第三部分放置數(shù)據(jù)信息,第三部分劃分為512塊,每塊512B,其256K,放置在1M空間的最末端,由第三部分的大小可知,第一部分只需64B即可,中間的部分用來(lái)寄存文獻(xiàn)索引。其它用到的存儲(chǔ)單元由系統(tǒng)分派。3.3數(shù)據(jù)構(gòu)造3.3.1數(shù)據(jù)塊在內(nèi)存中的物理構(gòu)造typedefstructfb{ unsignedFileBlockId; //文獻(xiàn)塊編號(hào) unsignedBLOCK_SIZE; //文獻(xiàn)塊的容量 char*FileBlockAddr; //文獻(xiàn)塊地址 structfb*next; //下一種文獻(xiàn)塊的地址}FileBlock;3.3.2文獻(xiàn)索引構(gòu)造typedefstruct{ unsignedIndex; //文獻(xiàn)元素索引編號(hào) charFileName[NAME_LEN]; //文獻(xiàn)元素名 charParentName[NAME_LEN]; //父節(jié)點(diǎn)名 unsignedFileBlockId; //文獻(xiàn)元素所在物理塊編號(hào) unsignedFileLevel; //文獻(xiàn)元素所在層次,層+文獻(xiàn)元素名為一種文獻(xiàn)元素邏輯位置 unsignedeffect; //與否有效,0-無(wú)效,1-有效}FileIndexElement;3.3.3文獻(xiàn)系統(tǒng)中文獻(xiàn)元素的構(gòu)造(含文獻(xiàn)夾和文獻(xiàn))typedefstructfse{ structfse*parent; //指向自己的父親節(jié)點(diǎn) unsignedFileLevel; //文獻(xiàn)元素所在層次,層+文獻(xiàn)元素名為一種文獻(xiàn)元素的邏輯位置 charFileName[NAME_LEN]; //文獻(xiàn)元素名 unsignedFileBlockId; //文獻(xiàn)元素所在物理塊編號(hào) unsignedFileElemLen; //文獻(xiàn)元素的長(zhǎng)度 FileTypeType; //文獻(xiàn)元素類(lèi)型 FileAccessAccess; //文獻(xiàn)元素可供操作的權(quán)限 UserCreator; //文獻(xiàn)創(chuàng)立者 charCreateTime[18]; //創(chuàng)立時(shí)間,日期格式:MM/DD/YYHH:MI:SS charLastModTime[18]; //最后一次修改時(shí)間 char*FileData; //一種文獻(xiàn)的數(shù)據(jù)開(kāi)始地址,文獻(xiàn)夾時(shí)該值為NULL FileStatusfileStu; //如果是一種文獻(xiàn)表達(dá)文獻(xiàn)現(xiàn)在的狀態(tài)}FSElement;3.3.4文獻(xiàn)系統(tǒng)構(gòu)造typedefstruct{ char*FSStart; //文獻(xiàn)系統(tǒng)的起始地址 unsignedSuperBlockSize; //文獻(xiàn)系統(tǒng)的容量 BitMapbm; //文獻(xiàn)系統(tǒng)中的位示圖 unsignedBLOCK_COUNT; //文獻(xiàn)系統(tǒng)中文獻(xiàn)塊的數(shù)量 FileBlock*head; //文獻(xiàn)系統(tǒng)中文獻(xiàn)塊首地址 FileIndexFI; //文獻(xiàn)系統(tǒng)中的文獻(xiàn)索引}SuperBlock;3.3.5文獻(xiàn)系統(tǒng)的現(xiàn)在運(yùn)行狀態(tài)typedefstruct{ UserCurrentUser; //現(xiàn)在顧客 unsignedFileLevel; //顧客所在文獻(xiàn)系統(tǒng)層 FSElement*CurrParent; //現(xiàn)在層的父節(jié)點(diǎn) char*CurrentPath; //現(xiàn)在途徑}CurrentStatus;3.3.6顧客構(gòu)造typedefstruct{ char*UserName; //顧客名稱(chēng) UserTypeut; //顧客類(lèi)型}User;4.各重要模塊的算法流程圖4.1整體思路概述首先系統(tǒng)要完畢初始化的任務(wù),建立一種系統(tǒng),并等待顧客登錄使用文獻(xiàn)系統(tǒng),顧客登錄系統(tǒng)時(shí),系統(tǒng)對(duì)顧客的顧客名和密碼進(jìn)行驗(yàn)證(允許顧客用限次的嘗試,多最多嘗試五次),如果顧客登錄成功,則系統(tǒng)進(jìn)入命令提示符狀態(tài),等顧客輸入指令后,系統(tǒng)得用一種解釋程序按照指定方式解決顧客請(qǐng)求,顧客退出后,系統(tǒng)轉(zhuǎn)入登錄模塊,等待下一位顧客的登錄。4.1.1login(顧客登錄)內(nèi)置9個(gè)顧客名和密碼,用來(lái)驗(yàn)證登錄顧客的身份,顧客登錄成功后會(huì)初始化現(xiàn)在顧客等一系列的系統(tǒng)現(xiàn)在信息,默認(rèn)顧客的類(lèi)型為普通顧客,如果顧客未能通過(guò)身份驗(yàn)證,提示顧客登錄失敗,退出整個(gè)系統(tǒng)。顧客登錄流程圖4.1.2系統(tǒng)初始化系統(tǒng)的初始化要完畢文獻(xiàn)系統(tǒng)的建立,涉及下列幾部分:請(qǐng)求內(nèi)存、設(shè)立位示圖、初始化文獻(xiàn)索引、初始化文本塊鏈表、初始化系統(tǒng)的現(xiàn)在狀態(tài)、創(chuàng)立一種根目錄做為系統(tǒng)的根。4.1.3文獻(xiàn)的創(chuàng)立:create只支持在現(xiàn)在目錄創(chuàng)立文獻(xiàn),根據(jù)位示圖找到一種未使用的文獻(xiàn)塊用來(lái)寄存顧客的文獻(xiàn)信息,根據(jù)系統(tǒng)現(xiàn)在狀態(tài)來(lái)構(gòu)建一種文獻(xiàn)系統(tǒng)元素放入到找到的文獻(xiàn)塊中,新創(chuàng)立的文獻(xiàn)狀態(tài)為關(guān)閉,同時(shí)更新位示圖和文獻(xiàn)索引。文獻(xiàn)創(chuàng)立流程圖voidCreate(char*filename){ if(strcmp(filename,"")==0) { printf("對(duì)不起,文獻(xiàn)名不能為空。\n"); } else { CreateFileElement(protect,filename,file,NULL,CS.CurrParent); } printf("[%s@localhost%s]$",CS.CurrentUser.UserName,CS.CurrentPath);}4.1.4文獻(xiàn)的打開(kāi):open只支持在現(xiàn)在目錄進(jìn)行操作,通過(guò)顧客給定的文獻(xiàn)名在文獻(xiàn)索引中搜索到文獻(xiàn)的物理文獻(xiàn)塊ID,找到該文獻(xiàn)元素后,將文獻(xiàn)現(xiàn)在狀態(tài)置為打開(kāi)。打開(kāi)文獻(xiàn)流程圖voidOpen(char*path){ chardisplay[100]; for(unsignedi=0;i<FS.FI.FICount;i++) { if(!strcmp(FS.FI.FIStart[i].ParentName,CS.CurrParent->FileName)&& FS.FI.FIStart[i].FileLevel==CS.FileLevel&&FS.FI.FIStart[i].effect==1&&strcmp(FS.FI.FIStart[i].FileName,path)==0) { FSElement*fselem=(FSElement*)FindBlankFileBlock(FS.FI.FIStart[i].FileBlockId); fselem->fileStu=opened; strcpy(display,"文獻(xiàn)已打開(kāi)完畢。\n"); break; } } if(strcmp(display,"")==0) { strcpy(display,"現(xiàn)在目錄下沒(méi)有您要打開(kāi)的文獻(xiàn)。\n"); } printf("%s\n",display); printf("[%s@localhost%s]$",CS.CurrentUser.UserName,CS.CurrentPath);}4.1.5文獻(xiàn)的讀:read只支持在現(xiàn)在目錄進(jìn)行操作,前提是顧客已執(zhí)行文獻(xiàn)打開(kāi)的命令,否則會(huì)提示顧客先打開(kāi)文獻(xiàn)。通過(guò)類(lèi)似的查找方式,找到文獻(xiàn)的數(shù)據(jù)部分,將數(shù)據(jù)顯示到界面。讀文獻(xiàn)流程圖voidRead(char*path){ chardisplay[BLOCK_SIZE]; for(unsignedi=0;i<FS.FI.FICount;i++) { if(!strcmp(FS.FI.FIStart[i].ParentName,CS.CurrParent->FileName)&&FS.FI.FIStart[i].FileLevel==CS.FileLevel&&FS.FI.FIStart[i].effect==1&& strcmp(FS.FI.FIStart[i].FileName,path)==0) { FSElement*fselem=(FSElement*)FindBlankFileBlock(FS.FI.FIStart[i].FileBlockId); if(fselem->fileStu==closed) { strcpy(display,"文獻(xiàn)尚未打開(kāi),請(qǐng)先打開(kāi)文獻(xiàn)。\n"); } else { if(!fselem->FileData||!strcmp(fselem->FileData,"")) { strcpy(display,"文獻(xiàn)無(wú)內(nèi)容。\n"); } else { strcpy(display,fselem->FileData); } fselem->fileStu=reading; } break; } } if(strcmp(display,"")==0) { strcpy(display,"現(xiàn)在目錄下沒(méi)有您要打開(kāi)的文獻(xiàn)。\n"); } printf("%s\n",display); printf("[%s@localhost%s]$",CS.CurrentUser.UserName,CS.CurrentPath);}4.1.6文獻(xiàn)的寫(xiě):write只支持在現(xiàn)在目錄進(jìn)行操作,前提是顧客已執(zhí)行文獻(xiàn)打開(kāi)的命令,否則會(huì)提示顧客先打開(kāi)文獻(xiàn)。命令成功后,會(huì)等待顧客的輸入,顧客輸入完畢,使用CTRL+D,結(jié)束輸入,系統(tǒng)會(huì)讀入顧客的輸入內(nèi)容,保存到對(duì)應(yīng)的文獻(xiàn)塊(注意,如果顧客的輸入太多,會(huì)出現(xiàn)越界或截取顧客輸入一部分的現(xiàn)象)。voidWrite(char*path){ chardisplay[BLOCK_SIZE]; memset(display,'\0',BLOCK_SIZE); for(unsignedi=0;i<FS.FI.FICount;i++) { if(!strcmp(FS.FI.FIStart[i].ParentName,CS.CurrParent->FileName)&& FS.FI.FIStart[i].FileLevel==CS.FileLevel&&FS.FI.FIStart[i].effect==1&&strcmp(FS.FI.FIStart[i].FileName,path)==0) { FSElement*fselem=(FSElement*)FindBlankFileBlock(FS.FI.FIStart[i].FileBlockId); if(fselem->fileStu==closed) { strcpy(display,"文獻(xiàn)尚未打開(kāi),請(qǐng)先打開(kāi)文獻(xiàn)。\n"); } else { printf("\n注意:文獻(xiàn)最大不能夠超出%d字節(jié)!!按CTRL+D結(jié)束編輯。\n",BLOCK_SIZE-sizeof(FSElement)); charc; inti=0; while((c=getchar())!=0x04) { display[i++]=c; } getchar(); //解決回車(chē) display[i]='\0'; strcpy(fselem->FileData,display); unsignedlen=strlen(display)<BLOCK_SIZE-sizeof(FSElement)?strlen(display):BLOCK_SIZE-sizeof(FSElement); strncpy(fselem->FileData,display,len); fselem->fileStu=writing; strcpy(display,"文獻(xiàn)寫(xiě)入成功。\n"); } break; } } printf("%s\n",display); printf("[%s@localhost%s]$",CS.CurrentUser.UserName,CS.CurrentPath);}4.1.7文獻(xiàn)關(guān)閉:close只支持在現(xiàn)在目錄進(jìn)行操作,通過(guò)顧客給定的文獻(xiàn)名在文獻(xiàn)索引中搜索到文獻(xiàn)的物理文獻(xiàn)塊ID,找到該文獻(xiàn)元素后,將文獻(xiàn)現(xiàn)在狀態(tài)置為關(guān)閉。voidClose(char*path){ chardisplay[100]; for(unsignedi=0;i<FS.FI.FICount;i++) { if(!strcmp(FS.FI.FIStart[i].ParentName,CS.CurrParent->FileName)&& FS.FI.FIStart[i].FileLevel==CS.FileLevel&&FS.FI.FIStart[i].effect==1&&strcmp(FS.FI.FIStart[i].FileName,path)==0) { FSElement*fselem=(FSElement*)FindBlankFileBlock(FS.FI.FIStart[i].FileBlockId); fselem->fileStu=opened; strcpy(display,"文獻(xiàn)已關(guān)閉。\n"); break; } } if(strcmp(display,"")==0) { strcpy(display,"現(xiàn)在目錄下沒(méi)有您要關(guān)閉的文獻(xiàn)。\n"); } printf("%s\n",display); printf("[%s@localhost%s]$",CS.CurrentUser.UserName,CS.CurrentPath);}4.1.8刪除文獻(xiàn):delete刪除文獻(xiàn)并不真正清理文獻(xiàn)的物理存儲(chǔ)內(nèi)容,只是將文獻(xiàn)的有效狀態(tài)更改為無(wú)效。刪除文獻(xiàn)流程圖voidDelete(char*path){ chardisplay[100]=""; for(unsignedi=0;i<FS.FI.FICount;i++) { if(!strcmp(FS.FI.FIStart[i].ParentName,CS.CurrParent->FileName)&&FS.FI.FIStart[i].FileLevel==CS.FileLevel&&FS.FI.FIStart[i].effect==1&& strcmp(FS.FI.FIStart[i].FileName,path)==0) { FS.FI.FIStart[i].effect=0; //刪除標(biāo)記 strcpy(display,"文獻(xiàn)已刪除。\n"); break; } } if(strcmp(display,"")==0) { strcpy(display,"現(xiàn)在目錄下沒(méi)有您要?jiǎng)h除的文獻(xiàn)。\n"); } printf("%s\n",display); printf("[%s@localhost%s]$",CS.CurrentUser.UserName,CS.CurrentPath);}4.1.9創(chuàng)立目錄(建立子目錄):mkdir只支持在現(xiàn)在目錄創(chuàng)立文獻(xiàn),與創(chuàng)立文獻(xiàn)有點(diǎn)類(lèi)似,只是文獻(xiàn)夾在文獻(xiàn)元素構(gòu)造中的數(shù)據(jù)部分為空。同樣會(huì)更新位示圖和文獻(xiàn)索引。創(chuàng)立目錄流程圖voidMkdir(char*filename){ if(strcmp(filename,"")==0) { printf("對(duì)不起,文獻(xiàn)夾名不能為空。\n"); } else { CreateFileElement(protect,filename,dir,NULL,CS.CurrParent); } printf("[%s@localhost%s]$",CS.CurrentUser.UserName,CS.CurrentPath);}4.1.10變化現(xiàn)在目錄:cd只支持進(jìn)入下一層的一種文獻(xiàn)夾和回到父目錄,實(shí)現(xiàn)方式為通過(guò)系統(tǒng)的現(xiàn)在狀態(tài),獲取一種指向目的文獻(xiàn)夾的指針做為現(xiàn)在的父節(jié)點(diǎn),變化現(xiàn)在的途徑為目的途徑,變化顧客現(xiàn)在所在層。變化現(xiàn)在目錄流程圖voidCd(char*path){ intsplitDisplayCou=0; //分割符出現(xiàn)的次數(shù) if(strcmp(path,"..")==0)//返回上一級(jí)目錄,即父目錄 { if(CS.FileLevel>0) { CS.FileLevel--; CS.CurrParent=CS.CurrParent->parent; for(unsignedi=strlen(CS.CurrentPath)-1;i>0;i--) { if(CS.CurrentPath[i]=='/') { splitDisplayCou++; if(splitDisplayCou==2) //已過(guò)濾掉最后一種目錄名 { break; } } } chartemppath[1000]; strcpy(temppath,CS.CurrentPath); memset(CS.CurrentPath,'\0',1000); strncpy(CS.CurrentPath,temppath,i+1); } } else { chardisplay[100]=""; for(unsignedi=0;i<FS.FI.FICount;i++) { if(!strcmp(FS.FI.FIStart[i].ParentName,CS.CurrParent->FileName)&& FS.FI.FIStart[i].FileLevel==CS.FileLevel&&FS.FI.FIStart[i].effect==1&&strcmp(FS.FI.FIStart[i].FileName,path)==0) { strcpy(display,"文獻(xiàn)存在。\n"); CS.CurrParent=(FSElement*)FindBlankFileBlock(FS.FI.FIStart[i].FileBlockId); CS.FileLevel++; strcat(CS.CurrentPath,path); strcat(CS.CurrentPath,"/"); break; } } if(strcmp(display,"")==0) //文獻(xiàn)夾不存在,什么都不做 { printf("現(xiàn)在目錄下沒(méi)有您要進(jìn)入的文獻(xiàn)夾。\n"); } } printf("[%s@localhost%s]$",CS.CurrentUser.UserName,CS.CurrentPath);}4.1.11列出文獻(xiàn)目錄:dir只支持在現(xiàn)在目錄進(jìn)行操作,根據(jù)文獻(xiàn)元素的名稱(chēng)+文獻(xiàn)元素所在層+父節(jié)點(diǎn)能夠唯一的標(biāo)記一種文獻(xiàn)元素的關(guān)系在文獻(xiàn)索引中搜索出現(xiàn)在層的全部文獻(xiàn)元素。voidDir(char*path){ chardisplay[1000]; memset(display,'\0',1000); //查找顯示內(nèi)容 for(unsignedi=0;i<FS.FI.FICount;i++) { if(!strcmp(FS.FI.FIStart[i].ParentName,CS.CurrParent->FileName)&&FS.FI.FIStart[i].FileLevel==CS.FileLevel&&FS.FI.FIStart[i].effect==1) { strcat(display,FS.FI.FIStart[i].FileName); strcat(display,"\t\t"); } } printf("%s\n",display); printf("[%s@localhost%s]$",CS.CurrentUser.UserN

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論