操作系統(tǒng)模擬unix文件系統(tǒng)實(shí)驗(yàn)報(bào)告_第1頁(yè)
操作系統(tǒng)模擬unix文件系統(tǒng)實(shí)驗(yàn)報(bào)告_第2頁(yè)
操作系統(tǒng)模擬unix文件系統(tǒng)實(shí)驗(yàn)報(bào)告_第3頁(yè)
操作系統(tǒng)模擬unix文件系統(tǒng)實(shí)驗(yàn)報(bào)告_第4頁(yè)
操作系統(tǒng)模擬unix文件系統(tǒng)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩35頁(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、操作系統(tǒng)大型實(shí)驗(yàn)班級(jí): 學(xué)號(hào): 姓名:一 實(shí)驗(yàn)介紹 1.實(shí)驗(yàn)名稱(chēng) 2.實(shí)驗(yàn)?zāi)康?3.實(shí)驗(yàn)內(nèi)容及要求二 實(shí)驗(yàn)環(huán)境三 實(shí)驗(yàn)設(shè)計(jì) 1.數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 2.系統(tǒng)流程設(shè)計(jì) 3.實(shí)現(xiàn)命令操作四 模塊詳解 1 .文件操作 2 .用戶(hù)操作五 實(shí)驗(yàn)演示 1 .初始化磁盤(pán)塊 2 .用戶(hù)登錄 3 .目錄操作 4 .文件操作六 源代碼七 實(shí)驗(yàn)心得體會(huì) 1.調(diào)試中遇到的問(wèn)題總結(jié) 2.實(shí)驗(yàn)感悟一、實(shí)驗(yàn)介紹1.實(shí)驗(yàn)名稱(chēng)操作系統(tǒng)大型實(shí)驗(yàn) 2.實(shí)驗(yàn)?zāi)康耐瓿梢粋€(gè) UNIX/Linux文件系統(tǒng)的子集的模擬實(shí)現(xiàn),了解Unix文件系統(tǒng)的實(shí)現(xiàn)機(jī)制。 3.實(shí)驗(yàn)內(nèi)容及要求(1) 文件卷結(jié)構(gòu)設(shè)計(jì)0#塊可省略I節(jié)點(diǎn)棧及空間為20項(xiàng)塊大小為512字

2、節(jié)卷盤(pán)塊數(shù)大于100I節(jié)點(diǎn)盤(pán)塊數(shù)大于10塊(2) I節(jié)點(diǎn)結(jié)構(gòu)設(shè)計(jì)文件大小文件聯(lián)接計(jì)數(shù)文件地址文件擁有者文件所屬組文件權(quán)限及類(lèi)別文件最后修改時(shí)間其中文件地址為六項(xiàng):四個(gè)直接塊號(hào),一個(gè)一次間址,一個(gè)兩次間址(3) 目錄結(jié)構(gòu)用16字節(jié)表示,其中14字節(jié)為文件名,2字節(jié)為I節(jié)點(diǎn)號(hào)(4) 用戶(hù)及組結(jié)構(gòu)用戶(hù)信息中包括用戶(hù)名、口令,所屬組,用戶(hù)打開(kāi)文件表(5) 文件樹(shù)結(jié)構(gòu)除(4)要求外,適當(dāng)考慮UNIX本身文件樹(shù)結(jié)構(gòu)(6) 實(shí)現(xiàn)功能Ls 顯示文件目錄Chmod 改變文件權(quán)限Chown改變文件擁有者Chgrp改變文件所屬組Pwd 顯示當(dāng)前目錄Cd 改變當(dāng)前目錄Mkdir創(chuàng)建子目錄Rmdir刪除子目錄Mv 改變

3、文件名Cp 文件拷貝Rm 文件刪除Ln 建立文件聯(lián)接Cat 連接顯示文件內(nèi)容Vi 文件寫(xiě)入Mk 創(chuàng)建文件umask 查看用戶(hù)屏蔽碼Umask文件創(chuàng)建屏蔽碼Passwd 修改用戶(hù)口令Ls-l 查看文件類(lèi)型Login 用戶(hù)注銷(xiāo) Logout 退出系統(tǒng) Help 顯示幫助信息二、實(shí)驗(yàn)環(huán)境實(shí)驗(yàn)設(shè)備:Microsoft Visual Studio 2010 開(kāi)發(fā)語(yǔ)言:c+三、實(shí)驗(yàn)設(shè)計(jì)1.數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)磁盤(pán)文件結(jié)構(gòu)設(shè)計(jì):用一個(gè)名為disk.txt的文件模擬Unix系統(tǒng)磁盤(pán) ,總共分為200塊,每塊514個(gè)字節(jié)(實(shí)際可用512個(gè)字節(jié),還有2個(gè)字節(jié)是磁盤(pán)分割符n),使第一塊(0#)盤(pán)塊做為超級(jí)塊,記錄該系統(tǒng)磁盤(pán)

4、的使用情況;第二塊(1#)盤(pán)塊第十三塊(12#)盤(pán)塊作為存儲(chǔ)I結(jié)點(diǎn)使用,每個(gè)I結(jié)點(diǎn)74個(gè)字節(jié),所以每個(gè)盤(pán)塊可以存放6個(gè)I結(jié)點(diǎn),總共有72個(gè)I結(jié)點(diǎn),記錄在超級(jí)塊中;十三塊(12#)以后的盤(pán)塊作為存儲(chǔ)文件內(nèi)容使用,總共187個(gè)盤(pán)塊,用成組連接法記錄在超級(jí)塊中。對(duì)于I結(jié)點(diǎn)的具體設(shè)計(jì)如下:class INode /(74B)public:int fsize;/文件大小 setw(6) int fbnum;/文件盤(pán)塊數(shù) setw(6) int addr4;/四個(gè)直接盤(pán)塊號(hào) 文件最大為4*512=2048=2KB setw(4)*4 int addr1;/一個(gè)一次間址() 文件大于2KB,小于2KB+16

5、*512=10KB setw(4) int addr2;/一個(gè)兩次間址()文件大于10KB,小于10KB+16*16*512B=138KB setw(4) char owner6;/文件擁有者 setw(6) char group6;/文件所屬組 setw(6) char mode12;/ 文件類(lèi)別及存儲(chǔ)權(quán)限 setw(12) char ctime10;/最近修改時(shí)間 setw(10) int connect;/文件聯(lián)接計(jì)數(shù);對(duì)于超級(jí)塊的具體設(shè)計(jì)如下:class superBlockpublic:int FIStack72;/空閑結(jié)點(diǎn)號(hào)棧 setw(3)*72 int FICount;/空閑i

6、結(jié)點(diǎn)總數(shù) setw(3) int FIPtr;/空閑結(jié)點(diǎn)棧指針 setw(3) int FBStack10;/空閑盤(pán)塊號(hào)棧 setw(4)*10 int FBCount;/空閑盤(pán)塊總數(shù) setw(4) int FBPtr;/空閑盤(pán)塊棧指針 setw(3) ;初始化磁盤(pán)示意圖:14#13#120#塊。1#塊12#塊13#塊14#塊16#塊15#塊??臻e節(jié)點(diǎn)號(hào)棧空閑盤(pán)塊號(hào)??臻e節(jié)點(diǎn)總數(shù)71空閑節(jié)點(diǎn)指針1空閑盤(pán)塊總數(shù)186空閑節(jié)點(diǎn)指針172。22#。22#。1272用于文件具體內(nèi)容存放除了超級(jí)塊、I結(jié)點(diǎn)、磁盤(pán)文件的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)以外,為了系統(tǒng)操作方便,我還設(shè)計(jì)了用戶(hù)類(lèi)、文件目錄類(lèi)。用戶(hù)類(lèi)具體設(shè)計(jì):cl

7、ass USER/用戶(hù)(24B)public:char name6;/用戶(hù)名 setw(6) char pass6;/密碼 setw(6) char group6;/所屬組 setw(6) int umask3;/用戶(hù)umask碼 setw(6) ;用戶(hù)信息全部存放在一個(gè)user.txt的文件里面,所以對(duì)于user.txt文件也有一個(gè)設(shè)計(jì),文件最開(kāi)始是存放用戶(hù)總數(shù)(setw(6)),隨后跟著的是每一位用戶(hù)名、密碼、所屬組、用戶(hù)umask碼。文件目錄類(lèi)具體設(shè)計(jì):class Catalog/目錄項(xiàng)(18B)public:char fname14;/文件名 setw(14) int index; /

8、i結(jié)點(diǎn)號(hào) setw(4) ;目錄信息全部都存放在disk磁盤(pán)里面,所以具體數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)都在上面的磁盤(pán)文件設(shè)計(jì)中提及。 2. 程序流程設(shè)計(jì) 系統(tǒng)主體流程圖設(shè)計(jì)見(jiàn)圖1 用戶(hù)注冊(cè)流程圖見(jiàn)圖2登陸功能流程圖見(jiàn)圖3用戶(hù)修改口令流程圖見(jiàn)圖4用戶(hù)umask碼修改流程圖見(jiàn)圖5 顯示所有子目錄ls操作流程圖見(jiàn)圖6創(chuàng)建文件mk、目錄mkdir流程圖見(jiàn)圖7刪除文件rm流程圖見(jiàn)圖8刪除目錄文件rmdir流程圖見(jiàn)圖9 改變當(dāng)前路徑cd操作流程圖見(jiàn)圖10查看文件內(nèi)容cat操作流程圖見(jiàn)圖11 拷貝文件、目錄cp操作流程圖見(jiàn)圖12建立文件聯(lián)接ln操作流程圖見(jiàn)圖13修改文件名稱(chēng)MV操作流程圖見(jiàn)圖14 修改文件權(quán)限chmod操作

9、流程圖見(jiàn)圖15修改文件擁有者chown、所屬組chgrp操作流程圖見(jiàn)圖16寫(xiě)流程圖vi見(jiàn)圖17開(kāi)始N文件系統(tǒng)初始化分析命令修改用戶(hù)口令顯示目錄系統(tǒng)退出改變文件擁有者改變文件所屬組顯示當(dāng)前目錄改變當(dāng)前目錄創(chuàng)建子目錄刪除子目錄改變文件名文件拷貝文件刪除改變文件權(quán)限Y用戶(hù)注銷(xiāo)文件系統(tǒng)初始化?是否為新用戶(hù)?Y注冊(cè)并登陸直接登陸N讀入超級(jí)塊中信息顯示文件內(nèi)容建立文件聯(lián)接文件寫(xiě)入創(chuàng)建文件查看用戶(hù)屏蔽碼文件創(chuàng)建屏蔽碼查看文件類(lèi)型幫助信息顯示結(jié)束圖1系統(tǒng)主體流程圖輸入命令圖2 注冊(cè)功能流程圖開(kāi)始返回輸入用戶(hù)名是否被使用?YN再次輸入口令輸入口令兩次輸入是否匹配?YN用戶(hù)名密碼寫(xiě)入文件圖3 登陸功能流程圖開(kāi)始返

10、回輸入用戶(hù)名密碼用戶(hù)名密碼是否都匹配?YN登陸成功圖4 用戶(hù)修改口令流程圖開(kāi)始返回輸入原始密碼密碼是否輸入正確?YN新密碼寫(xiě)入文件輸入新密碼兩次兩次輸入是否匹配?YN圖5 用戶(hù)umask碼修改流程圖開(kāi)始返回是否找到?輸入新的用戶(hù)umask碼用戶(hù)文件中查找該用戶(hù)YN新的umask碼寫(xiě)入文件開(kāi)始返回當(dāng)前文件是否為空?YN遍歷當(dāng)前目錄中文件項(xiàng)讀入判斷文件是否為目錄文件?N當(dāng)前目錄為空遞歸讀入該目錄內(nèi)容Y輸出所有剛剛讀入的文件項(xiàng)圖6 顯示所有子目錄ls操作流程圖圖7 創(chuàng)建文件mk、目錄mkdir流程圖開(kāi)始返回輸入文件名文件中是否有重名?NY申請(qǐng)I結(jié)點(diǎn)和盤(pán)塊是否都申請(qǐng)成功?N文件創(chuàng)建失敗Y當(dāng)前目錄文件i

11、結(jié)點(diǎn)修改新建文件名、結(jié)點(diǎn)寫(xiě)入當(dāng)前目錄新建文件i結(jié)點(diǎn)初始化新建文件成功圖8 刪除文件rm流程圖開(kāi)始輸入文件名返回對(duì)當(dāng)前目錄是否有操作權(quán)限?文件刪除失敗對(duì)當(dāng)前文件夾是否存在該文件?對(duì)該文件是否有操作權(quán)限?該文件是否為數(shù)據(jù)文件?該文件是否為聯(lián)接文件?回收文件的盤(pán)塊、結(jié)點(diǎn)當(dāng)前目錄中刪除該文件名當(dāng)前目錄中i結(jié)點(diǎn)的修改文件刪除成功NNNNNYYYYY圖9 刪除目錄文件rmdir流程圖開(kāi)始輸入文件名返回對(duì)當(dāng)前目錄是否有操作權(quán)限?目錄刪除失敗對(duì)當(dāng)前目錄是否存在該子目錄?對(duì)該子目錄是否有操作權(quán)限?該文件是否為目錄文件?該目錄文件是否為空?回收目錄的盤(pán)塊、結(jié)點(diǎn)當(dāng)前目錄中刪除該目錄名當(dāng)前目錄中i結(jié)點(diǎn)的修改目錄刪除成

12、功遞歸刪除YYYYYNNNNN圖10 改變當(dāng)前路徑cd操作流程圖開(kāi)始輸入修改路徑分析路徑路徑為'.路徑為'.路徑為'/路徑為子目錄名路徑為絕對(duì)路徑切換到當(dāng)前目錄切換到根目錄切換到父目錄切換到指定的子目錄切換到指定的任意目錄返回圖11 查看文件內(nèi)容cat操作流程圖開(kāi)始輸入文件名該文件是否為數(shù)據(jù)文件?NY讀取文件內(nèi)容當(dāng)前目錄下是否存在該文件?YN讀取文件失敗返回圖12 拷貝文件、目錄cp操作流程圖開(kāi)始輸入需要拷貝的文件名,拷貝的指定路徑返回對(duì)當(dāng)前目錄是否存在該文件?分析文件類(lèi)型要拷貝文件為目錄文件要拷貝文件為數(shù)據(jù)文件保存當(dāng)前路徑保存當(dāng)前路徑指定路徑下新建目錄文件指定路徑下新

13、建數(shù)據(jù)文件讀入目錄文件內(nèi)容讀入數(shù)據(jù)文件內(nèi)容讀入的內(nèi)容寫(xiě)入新建目錄文件讀入的內(nèi)容寫(xiě)入新建數(shù)據(jù)文件路徑還原圖13 建立文件聯(lián)接ln操作流程圖開(kāi)始輸入建立聯(lián)接的兩個(gè)文件名Y對(duì)該文件是否有操作權(quán)限?Y對(duì)當(dāng)前目錄是否存在建立聯(lián)接的文件?Y對(duì)當(dāng)前目錄是否有操作權(quán)限?NNN新建一個(gè)文件名不同,結(jié)點(diǎn)號(hào)相同的文件返回建立聯(lián)接文件不成功圖14 修改文件名稱(chēng)MV操作流程圖開(kāi)始輸入要修改的文件名Y對(duì)該文件是否有操作權(quán)限?Y對(duì)當(dāng)前目錄是否存在修改的文件?Y對(duì)當(dāng)前目錄是否有操作權(quán)限?NNN將新的文件名替換舊的寫(xiě)入文件返回修改文件名不成功輸入修改以后的文件名Y該目錄中是否有同名的文件?N修改當(dāng)前文件i結(jié)點(diǎn)NNN對(duì)當(dāng)前目錄是

14、否有操作權(quán)限?Y對(duì)當(dāng)前目錄是否存在修改的文件?Y對(duì)該文件是否有操作權(quán)限?Y輸入要修改的文件名開(kāi)始圖15 修改文件權(quán)限chmod操作流程圖分析當(dāng)前用戶(hù)文件擁有這文件所屬組內(nèi)成員其他用戶(hù)選擇修改哪類(lèi)用戶(hù)的權(quán)限選擇修改模式返回修改權(quán)限失敗YNNN對(duì)當(dāng)前目錄是否有操作權(quán)限?Y對(duì)當(dāng)前目錄是否存在修改的文件?Y輸入要修改的文件名圖16 修改文件擁有者chown、所屬組chgrp操作流程圖開(kāi)始輸入修改以后的文件所有者/所屬組對(duì)該文件是否有操作權(quán)限?NY修改當(dāng)前目錄i結(jié)點(diǎn)和子目錄i結(jié)點(diǎn)該所有者的用戶(hù)名/所屬組是否合法?修改的文件是否為目錄文件?YN遞歸修改其子文件的擁有者/所屬組修改當(dāng)前目錄i結(jié)點(diǎn)和子目錄i結(jié)

15、點(diǎn)返回YYYYNNN該文件是否為數(shù)據(jù)文件?對(duì)該文件是否有操作權(quán)限?當(dāng)前目錄是否存在該文件? 圖17 寫(xiě)文件vi操作流程圖開(kāi)始開(kāi)始當(dāng)前目錄有權(quán)限否?輸入文件名N寫(xiě)入文件不成功選擇自己輸入還是系統(tǒng)填充手動(dòng)輸入內(nèi)容選擇系統(tǒng)填充的字符個(gè)數(shù)根據(jù)內(nèi)容分配盤(pán)塊內(nèi)容寫(xiě)入結(jié)束3.實(shí)現(xiàn)命令操作cdenter .enter 切換到當(dāng)前目錄cdenter /enter 切換到根目錄cdenter .enter 切換到父目錄cdenter direnter 切換到某一子目錄,dir為子目錄名cdenter stringenter 切換到指定路徑的目錄,string為路徑mkdirenter direnter 當(dāng)前目錄下

16、創(chuàng)建名為dir的子目錄rmdirenter direnter 刪除當(dāng)前目錄下名為dir的子目錄mkenter fileenter 當(dāng)前目錄下創(chuàng)建名為file的文件rmenter fileenter 刪除當(dāng)前目錄下名為file的文件cpenter dirORfileenter stringenter 拷貝當(dāng)前目錄下文件或子目錄到指定路徑下 catenter fileenter 查看當(dāng)前目錄下名為file的文件內(nèi)容vienter fileenter 向當(dāng)前目錄下名為file的文件寫(xiě)入一定內(nèi)容pwdenter 顯示當(dāng)前目錄lsenter 顯示所有子目錄chmodenter fileenter 改變當(dāng)

17、前目錄下名為file文件的權(quán)限chownenter fileenter 改變當(dāng)前目錄下名為file文件的擁有者chgrpenter fileenter 改變當(dāng)前目錄下名為file文件的所屬組MVenter fileenter 改變當(dāng)前目錄下名為file文件的文件名loginenter 用戶(hù)注銷(xiāo),可以重新登陸passwdenter 用戶(hù)改變密碼umaskenter 查看用戶(hù)umask碼Umaskenter codeenter 修改用戶(hù)umask碼為codelnenter file1enter file2enter文件file1與file2建立連結(jié)ls-lenter fileenter 查看文件f

18、ile的類(lèi)別helpenter 提供幫助logoutenter 退出系統(tǒng)四、模塊詳解1.文件操作mk創(chuàng)建文件模塊,輸入mk命令,回車(chē),輸入文件名,回車(chē),即會(huì)在當(dāng)前目錄文件下創(chuàng)建一個(gè)名為剛剛輸入的文件名的數(shù)據(jù)文件。在該創(chuàng)建過(guò)程中首先要判斷該目錄中有沒(méi)有同名的文件,如果有的話(huà)就創(chuàng)建失敗,還要判斷在該目錄下有沒(méi)有創(chuàng)建文件的權(quán)限,有權(quán)限才可以創(chuàng)建。具體流程圖查看第二節(jié),系統(tǒng)流程圖設(shè)計(jì)部分。rm刪除文件模塊,輸入rm命令,回車(chē),輸入文件名,回車(chē),即會(huì)在當(dāng)前目錄文件下刪除一個(gè)名為剛剛輸入的文件名的數(shù)據(jù)文件。在該刪除過(guò)程中要判斷該目錄中是否存在該文件,如果不存在就沒(méi)有必要執(zhí)行該操作了,還要判斷在該目錄下有沒(méi)

19、有刪除文件的權(quán)限,有權(quán)限才可以刪除。具體流程圖查看第二節(jié),系統(tǒng)流程圖設(shè)計(jì)部分。mkdir創(chuàng)建目錄文件模塊,輸入mkdir命令,回車(chē),輸入文件名,回車(chē),即會(huì)在當(dāng)前目錄文件下創(chuàng)建一個(gè)名為剛剛輸入的文件名的目錄文件。在該創(chuàng)建過(guò)程中首先要判斷該目錄中有沒(méi)有同名的文件,如果有的話(huà)就創(chuàng)建失敗,還要判斷在該目錄下有沒(méi)有創(chuàng)建文件的權(quán)限,有權(quán)限才可以創(chuàng)建。具體流程圖查看第二節(jié),系統(tǒng)流程圖設(shè)計(jì)部分。rmdir刪除目錄文件模塊,輸入rmdir命令,回車(chē),輸入文件名,回車(chē),即會(huì)在當(dāng)前目錄文件下刪除一個(gè)名為剛剛輸入的文件名的目錄文件。在該刪除過(guò)程中要判斷該目錄中是否存在該目錄文件,如果不存在就沒(méi)有必要執(zhí)行該操作了,還要

20、判斷在該目錄下有沒(méi)有刪除文件的權(quán)限,有權(quán)限才可以刪除。刪除的時(shí)候要判斷該目錄是否為空,如果里面有內(nèi)容,則要通過(guò)遞歸函數(shù),將他們一并刪除了。具體流程圖查看第二節(jié),系統(tǒng)流程圖設(shè)計(jì)部分。cp拷貝文件模塊,輸入cp命令,回車(chē),輸入要拷貝文件的文件名,回車(chē),輸入要拷貝到哪個(gè)路徑下面,即會(huì)在該路徑下創(chuàng)建一個(gè)名為與被拷貝文件名相同的數(shù)據(jù)文件(目錄文件),并且指向盤(pán)塊里面的內(nèi)容都相同的數(shù)據(jù)文件(目錄文件)。在該拷貝過(guò)程中要判斷該目錄中是否存在該文件,如果不存在就沒(méi)有必要執(zhí)行該操作了,還要判斷在該目錄下有沒(méi)有拷貝文件的權(quán)限,有權(quán)限才可以拷貝。然后要查看該路徑是否存在,存在該路徑才可以在該路徑下創(chuàng)建拷貝過(guò)來(lái)的文件

21、,具體流程圖查看第二節(jié),系統(tǒng)流程圖設(shè)計(jì)部分。cat顯示文件內(nèi)容模塊,輸入cat命令,回車(chē),輸入文件名,回車(chē),即會(huì)在屏幕上顯示該文件的具體內(nèi)容。在該過(guò)程中要判斷該目錄中是否存在該文件,如果不存在就沒(méi)有必要執(zhí)行該操作了。執(zhí)行操作時(shí),要調(diào)用readfile(INode inode)函數(shù),先讀入文件內(nèi)容到content里面,然后直接輸出。具體流程圖查看第二節(jié),系統(tǒng)流程圖設(shè)計(jì)部分。ls顯示當(dāng)前目錄下所有目錄的模塊,輸入ls命令,回車(chē),即會(huì)在屏幕上顯示當(dāng)前目錄下的所有目錄。在該過(guò)程中要判斷該目錄中是否為空,如果為空就沒(méi)有必要執(zhí)行該操作了。執(zhí)行操作時(shí),要調(diào)用readdir(INode inode)函數(shù),先讀

22、入文件內(nèi)容到content里面,然后直接輸出。如果子目錄里面還有子目錄,則通過(guò)遞歸,一并輸出來(lái)。具體流程圖查看第二節(jié),系統(tǒng)流程圖設(shè)計(jì)部分。pwd顯示當(dāng)前目錄的模塊,輸入pwd命令,回車(chē),即會(huì)在屏幕上顯示當(dāng)前所在的目錄。vi寫(xiě)文件操作模塊,輸入vi命令,回車(chē),輸入文件名,回車(chē),既可以選擇自己輸入內(nèi)容還是系統(tǒng)自動(dòng)輸入,選擇自己輸入的話(huà),可以自己主動(dòng)隨便輸入什么內(nèi)容然后回車(chē)。如果選擇系統(tǒng)自動(dòng)輸入,那么還需要輸入要填充的字符個(gè)數(shù),系統(tǒng)就會(huì)自動(dòng)填充。具體流程圖查看第二節(jié),系統(tǒng)流程圖設(shè)計(jì)部分。chmod改變文件權(quán)限模塊,輸入chmod命令,回車(chē),輸入文件名,回車(chē),即會(huì)根據(jù)不同類(lèi)別的用戶(hù)在屏幕上提示要改變哪

23、一類(lèi)用戶(hù)的權(quán)限。如果是文件擁有者執(zhí)行該操作,他可以選擇修改自己、其他用戶(hù)的權(quán)限;如果是文件所屬組成員執(zhí)行該操作,他可以選擇修改自己、其他用戶(hù)的權(quán)限;如果是其他用戶(hù)執(zhí)行該操作,他只能選擇修改自己的權(quán)限;在該過(guò)程中要判斷該目錄中是否存在該文件,如果不存在就沒(méi)有必要執(zhí)行該操作了。執(zhí)行操作時(shí),要判斷對(duì)該文件有沒(méi)有執(zhí)行寫(xiě)操作的權(quán)利,沒(méi)有就不能進(jìn)行。具體流程圖查看第二節(jié),系統(tǒng)流程圖設(shè)計(jì)部分。chown改變文件所有者模塊,輸入chown命令,回車(chē),輸入文件名,回車(chē),就會(huì)判斷執(zhí)行者對(duì)于該文件有沒(méi)有改變的權(quán)限,沒(méi)有的話(huà)就不能執(zhí)行,還有判斷當(dāng)前目錄下有沒(méi)有該文件,沒(méi)有的話(huà)就沒(méi)有必要執(zhí)行該操作。判斷可以執(zhí)行時(shí),就會(huì)

24、提示輸入改變以后的所有者,然后判斷輸入的用戶(hù)名的合法性,判斷合法則修改成功。(如果修改的文件時(shí)目錄文件,則將它下面的文件全部一起改了)具體流程圖查看第二節(jié),系統(tǒng)流程圖設(shè)計(jì)部分。chgrp改變文件所屬組模塊,輸入chgrp命令,回車(chē),輸入文件名,回車(chē),就會(huì)判斷執(zhí)行者對(duì)于該文件有沒(méi)有改變的權(quán)限,沒(méi)有的話(huà)就不能執(zhí)行,還有判斷當(dāng)前目錄下有沒(méi)有該文件,沒(méi)有的話(huà)就沒(méi)有必要執(zhí)行該操作。判斷可以執(zhí)行時(shí),就會(huì)提示輸入改變以后的所屬組,然后判斷輸入的組名的合法性,判斷合法則修改成功。(如果修改的文件時(shí)目錄文件,則將它下面的文件全部一起改了)具體流程圖查看第二節(jié),系統(tǒng)流程圖設(shè)計(jì)部分。MV改變文件名模塊,輸入MV命令

25、,回車(chē),輸入文件名,回車(chē),就會(huì)判斷執(zhí)行者對(duì)于該文件有沒(méi)有改變的權(quán)限,沒(méi)有的話(huà)就不能執(zhí)行,還有判斷當(dāng)前目錄下有沒(méi)有該文件,沒(méi)有的話(huà)就沒(méi)有必要執(zhí)行該操作。判斷可以執(zhí)行時(shí),就會(huì)提示輸入改變以后的文件名,然后判斷輸入文件名是否與當(dāng)前目錄下有重名的,判斷沒(méi)有重名則修改成功。具體流程圖查看第二節(jié),系統(tǒng)流程圖設(shè)計(jì)部分。ln建立文件聯(lián)接模塊,輸入ln命令,回車(chē),輸入要建立聯(lián)接文件的文件名,回車(chē),輸入要連接到哪個(gè)文件的文件名,即會(huì)在該路徑下創(chuàng)建一個(gè)以此命名的數(shù)據(jù)文件,并且該文件名后面的I結(jié)點(diǎn)號(hào)與前面一個(gè)文件的I結(jié)點(diǎn)號(hào)相同,指向相同的盤(pán)塊。在該過(guò)程中要判斷該目錄中是否存在該文件,如果不存在就沒(méi)有必要執(zhí)行該操作了,

26、還要判斷在該目錄下有沒(méi)有拷貝文件的權(quán)限,有權(quán)限才可以拷貝。然后要查看該文件的重名是否存在,存在則建立聯(lián)接失敗,具體流程圖查看第二節(jié),系統(tǒng)流程圖設(shè)計(jì)部分。ls-l顯示文件類(lèi)型模塊,輸入MV命令,回車(chē),輸入文件名,回車(chē),則會(huì)在屏幕上輸出該文件的類(lèi)型是目錄文件還是數(shù)據(jù)文件。cd改變當(dāng)前所在目錄的模塊。輸入cd,回車(chē),相應(yīng)的字符串,回車(chē),則會(huì)根據(jù)輸入字符串的不同跳轉(zhuǎn)到不同的目錄下。如果字符串是.,則到當(dāng)前目錄;如果字符串是.,則到父目錄;如果字符串是/,則到根目錄;如果字符串是當(dāng)前目錄下的子目錄,則到該子目錄;如果字符串是一個(gè)決定路徑,則到該絕對(duì)路徑。當(dāng)然在執(zhí)行的時(shí)候要判斷有沒(méi)有該子目錄或者該絕對(duì)路徑

27、,如果沒(méi)有的話(huà),就不能執(zhí)行。具體流程圖查看第二節(jié),系統(tǒng)流程圖設(shè)計(jì)部分。 2. 用戶(hù)操作login用戶(hù)注銷(xiāo)模塊,輸入login,回車(chē),當(dāng)前用戶(hù)就退出了,需要重新登錄。passwd用戶(hù)修改口令模塊,輸入passwd,回車(chē),則會(huì)提示輸入原始密碼,輸入正確了才可以提示輸入新密碼,并且要求新密碼輸入兩次,兩次一樣了才能通過(guò)修改密碼成功。具體流程圖查看第二節(jié),系統(tǒng)流程圖設(shè)計(jì)部分。umask用戶(hù)查看umask碼模塊,輸入umask,回車(chē),屏幕上就會(huì)顯示當(dāng)前用戶(hù)的用戶(hù)umask碼。Umask用戶(hù)修改umask碼模塊,輸入U(xiǎn)mask,回車(chē),輸入新的umask碼,回車(chē),既可以更新原有的用戶(hù)屏蔽碼。logout用戶(hù)

28、退出系統(tǒng)模塊,輸入logout,回車(chē),系統(tǒng)自動(dòng)退出。help用戶(hù)尋求幫助模塊,當(dāng)用戶(hù)不清楚執(zhí)行命令的時(shí)候,可以輸入help,回車(chē),屏幕上會(huì)顯示出各種命令語(yǔ)句。五、實(shí)驗(yàn)演示 1 .初始化磁盤(pán)塊超級(jí)塊與I結(jié)點(diǎn)初始化結(jié)果截圖:成組連接法每10個(gè)盤(pán)塊一組,最后一組只有7個(gè),空閑盤(pán)塊截圖:2 .用戶(hù)登錄直接登錄:注冊(cè)登錄:注冊(cè)以后用戶(hù)文件里面已經(jīng)有新用戶(hù)的記錄: 3 .目錄操作新建目錄:新建以后可以看到盤(pán)塊中已存在這兩個(gè)目錄:這兩個(gè)目錄的i結(jié)點(diǎn)分配情況:刪除目錄:刪除操作以后目錄中aa目錄項(xiàng)已經(jīng)被刪除:刪除操作以后aa文件的i結(jié)點(diǎn)結(jié)點(diǎn)也被回收:改變當(dāng)前路徑:復(fù)制目錄文件:此時(shí)bb目錄以及它下面的目錄cc

29、,一并拷貝到aa目錄下面了:顯示當(dāng)前目錄:顯示當(dāng)前目錄下的所有文件目錄:改變目錄名:改變目錄名以后可以看到磁盤(pán)中aa已經(jīng)變成了bc:改變目錄權(quán)限:改變目錄擁有者:改變目錄所屬組:查看文件類(lèi)別: 4 .文件操作 新建文件新建文件以后磁盤(pán)中已經(jīng)有這兩個(gè)文件:刪除文件執(zhí)行刪除操作以后磁盤(pán)中文件已經(jīng)刪除:寫(xiě)文件拷貝文件查看文件建立文件聯(lián)接 可以看到此時(shí)存在一個(gè)ce文件與aa雖然文件名不同,但是指向的是同一個(gè)I結(jié)點(diǎn),相當(dāng)于一個(gè)文件有兩個(gè)名稱(chēng)。修改文件權(quán)限、文件擁有者、文件所屬組與前面的目錄操作是相同的,這里不再重復(fù)演示。六、重要函數(shù)及其實(shí)現(xiàn)方法 bool havesame(char *dirname,I

30、Node inode,int &i,int &index2)函數(shù)主要用于判斷文件在當(dāng)前路徑下是否存在,輸入文件名,當(dāng)前路徑目錄文件的節(jié)點(diǎn)號(hào)inode,就可以通過(guò)inode節(jié)點(diǎn)中的addr定位到該目錄文件,然后通過(guò)一個(gè)個(gè)查找,與dirname對(duì)比,找到相等的,就說(shuō)明該目錄文件中有該文件,可以對(duì)它進(jìn)行操作。該函數(shù)在整個(gè)程序的功能實(shí)現(xiàn)中都會(huì)用到,因?yàn)槊窟M(jìn)行一個(gè)文件操作,首先要判斷它是否存在,只有存在該文件才可以對(duì)它進(jìn)行一定的操作。 bool find(char *string)函數(shù)同樣是貫穿于整個(gè)程序,它的主要功能是找到string指明的路徑,并且轉(zhuǎn)換當(dāng)前路徑到該路徑下,查找的過(guò)程主

31、要是按照路徑一個(gè)目錄一個(gè)目錄往下查找,每查找一個(gè)目錄都是通過(guò)調(diào)用havesame函數(shù)實(shí)現(xiàn)的。該函數(shù)在很多功能中都會(huì)用到,比如說(shuō)將一個(gè)指定文件拷貝到指定路徑下,就要通過(guò)該函數(shù)先確定該路徑是否存在,并且轉(zhuǎn)換到該路徑下。 int balloc()函數(shù)用于申請(qǐng)新盤(pán)塊,因?yàn)榇疟P(pán)所有盤(pán)塊都是通過(guò)成組鏈接法管理的,在該函數(shù)中每申請(qǐng)一個(gè)盤(pán)塊的時(shí)候都會(huì)檢查有沒(méi)有到棧底,如果是棧底了,就必須先把棧底盤(pán)塊里面存放的下一組盤(pán)塊號(hào)調(diào)入棧中,然后把該盤(pán)塊分配出去。 void bfree(int index)函數(shù)與申請(qǐng)盤(pán)塊的函數(shù)相對(duì)應(yīng),它是用于指定盤(pán)塊的回收的,同樣的,為了實(shí)現(xiàn)成組鏈接法,當(dāng)一個(gè)盤(pán)塊回收時(shí),必須先檢查盤(pán)塊號(hào)

32、棧是否已滿(mǎn),如果已滿(mǎn),則先把棧里面的盤(pán)塊號(hào)全部都寫(xiě)入要回收的盤(pán)塊中,然后清空棧,把剛剛回收的盤(pán)塊號(hào)寫(xiě)入棧底。 void rmdir(char *dirname,int index)該函數(shù)主要用于刪除指定目錄,刪除目錄時(shí)主要考慮的問(wèn)題是該目錄下面的子目錄是不是也要?jiǎng)h除了?要怎樣實(shí)現(xiàn)?所以該函數(shù)中我要運(yùn)用了遞歸的方法,刪除該目錄的時(shí)候先檢查他下面是否有子目錄,然后對(duì)每一個(gè)子目錄執(zhí)行該函數(shù),如此循環(huán),直到它為空目錄了才將目錄刪除。同樣的在修改目錄擁有者函數(shù)void chown(char *name),目錄所屬組函數(shù)void chgrp(char *name) 中我也運(yùn)用了同樣的方法來(lái)實(shí)現(xiàn)該目錄下面子

33、目錄文件,目錄的擁有者、所屬組修改。 void writefile(INode inode,int in)該函數(shù)為文件寫(xiě)函數(shù),該函數(shù)的實(shí)現(xiàn)也是比較復(fù)雜的,首先要調(diào)用讀文件的函數(shù)void readfile(INode inode)讀入該文件原先的內(nèi)容,將原先的內(nèi)容與新寫(xiě)入的內(nèi)容進(jìn)行比較,如果原先內(nèi)容多,那么先將多余的盤(pán)塊回收了,然后將內(nèi)容寫(xiě)入。如果新寫(xiě)入的內(nèi)容多,那么說(shuō)明盤(pán)塊不夠,需要申請(qǐng)盤(pán)塊,在申請(qǐng)盤(pán)塊的過(guò)程中每申請(qǐng)一個(gè)盤(pán)塊之前都要先判斷原先內(nèi)容有沒(méi)有寫(xiě)到這一塊,如果沒(méi)有則進(jìn)行申請(qǐng),否則不用申請(qǐng)。盤(pán)塊申請(qǐng)完以后就可以將內(nèi)容寫(xiě)入了。其他比較簡(jiǎn)單的功能實(shí)現(xiàn)函數(shù)由于代碼比較多,而且具體功能在模塊詳解

34、以及系統(tǒng)流程設(shè)計(jì)的流程圖中都有很詳細(xì)的說(shuō)明,這里就不再解釋了,而且附上的源代碼文件里面都已經(jīng)寫(xiě)了很詳細(xì)的注釋?zhuān)@里就不占篇幅了。七、實(shí)驗(yàn)心得體會(huì) 1.調(diào)試中遇到的問(wèn)題總結(jié)本次實(shí)驗(yàn)中主要遇到的問(wèn)題及解決方案:寫(xiě)入文件的時(shí)候因?yàn)榉峙浔P(pán)塊用的是成組連接法,當(dāng)讀到一組里面最后一個(gè)盤(pán)塊的時(shí)候需要從該盤(pán)塊中讀入下一組盤(pán)塊號(hào)進(jìn)入棧,每次運(yùn)行到分配盤(pán)塊的時(shí)候總是出錯(cuò),分配前面幾組都是正確的,但是到某一組就是讀不進(jìn)來(lái)下一組的盤(pán)塊號(hào),當(dāng)時(shí)是設(shè)了斷點(diǎn)一步步調(diào)試,還用寫(xiě)入的方法測(cè)試了下位置對(duì)不對(duì),結(jié)果寫(xiě)入的位置是正確的,然后就郁悶了,不知道怎么回事,后來(lái)發(fā)現(xiàn)了一到讀三位數(shù)的就不正確了,因?yàn)樵诒P(pán)塊里面我初始化的時(shí)候,寫(xiě)

35、入的都是每個(gè)盤(pán)塊號(hào)只占了三個(gè)字節(jié),所以三位數(shù)都是黏在一起的,中間沒(méi)有空格,在讀入的時(shí)候就不會(huì)讀入一個(gè)個(gè)數(shù),而是一長(zhǎng)串?dāng)?shù)字,導(dǎo)致出錯(cuò)。調(diào)試過(guò)程中最郁悶的事就是文件的打開(kāi)關(guān)閉了。剛開(kāi)始沒(méi)有注意這些問(wèn)題,根本就沒(méi)有注意文件的重復(fù)打開(kāi)問(wèn)題,導(dǎo)致在這個(gè)函數(shù)里面打開(kāi)了disk.txt文件,還沒(méi)有關(guān)閉,接下需要調(diào)用另外一個(gè)函數(shù),文件又在另外一個(gè)函數(shù)里面被打開(kāi),結(jié)果在另一個(gè)文件里面就根本讀不進(jìn)文件里面的數(shù)據(jù),因?yàn)檫@個(gè)毛病剛開(kāi)始的時(shí)候出現(xiàn)了很多奇怪的現(xiàn)象,比如說(shuō)在創(chuàng)建文件的函數(shù)里面,每創(chuàng)建一個(gè)函數(shù)申請(qǐng)一個(gè)盤(pán)塊,就算申請(qǐng)了好幾十個(gè)盤(pán)塊都沒(méi)有問(wèn)題。但是同樣申請(qǐng)盤(pán)塊在文件的寫(xiě)函數(shù)里就實(shí)現(xiàn)不了,因?yàn)樵趯?xiě)函數(shù)里面我已經(jīng)打

36、開(kāi)了disk.txt文件,而在盤(pán)塊申請(qǐng)函數(shù)里面又打開(kāi)了disk.txt文件。本來(lái)是想每申請(qǐng)一個(gè)盤(pán)塊,就先把內(nèi)容寫(xiě)進(jìn)去,實(shí)現(xiàn)邊申請(qǐng)邊寫(xiě),結(jié)果申請(qǐng)到下一組的盤(pán)塊就會(huì)出錯(cuò),因?yàn)橄乱唤M的盤(pán)塊根本沒(méi)有讀進(jìn)棧。技術(shù)性的問(wèn)題也有,就是剛開(kāi)始很多地方都是打算用string類(lèi)型的數(shù)來(lái)傳遞值的,結(jié)果cout還有很多string類(lèi)型自帶的函數(shù)根本就不支持。查看了頭文件確實(shí)已經(jīng)包括了<string.h>,后來(lái)終于還是百度了這個(gè)問(wèn)題,然后發(fā)現(xiàn)百度上的解答也是要求要包含string類(lèi)型的頭文件,剛開(kāi)始還不得解。然后無(wú)意間發(fā)現(xiàn)好像應(yīng)該是<string>。然后就真的可以了。在遞歸函數(shù)的實(shí)現(xiàn)上也碰到了問(wèn)

37、題,因?yàn)槲沂窍肽夸浳募h除的時(shí)候,如果它包含了子目錄,那么通過(guò)遞歸,把它下面的子目錄先刪除了,等文件為空了再刪除該目錄。結(jié)果我在刪完第一個(gè)子目錄的時(shí)候再返回刪除第二個(gè)子目錄的時(shí)候就出錯(cuò)了,最后發(fā)現(xiàn)還是disk.txt的關(guān)閉問(wèn)題,因?yàn)槲以谶f歸之前并沒(méi)有關(guān)閉disk.txt文件,所以在調(diào)用遞歸的時(shí)候,進(jìn)入了這個(gè)函數(shù)又重復(fù)打開(kāi)了該文件。剛開(kāi)始在設(shè)計(jì)ls()函數(shù)的時(shí)候沒(méi)有考慮到子目錄的問(wèn)題,只是簡(jiǎn)單地想列出當(dāng)前目錄下的所有目錄項(xiàng),而沒(méi)有想把這些子目錄項(xiàng)中的子目錄也一起列出來(lái),最后也是通過(guò)了遞歸讀入目錄項(xiàng),實(shí)現(xiàn)了這個(gè)功能。在寫(xiě)創(chuàng)建用戶(hù)umask碼的時(shí)候理解這個(gè)東西還是挺困難的,剛開(kāi)始真的不理解,于是就直接用w、r來(lái)代替了,雖然說(shuō)用戶(hù)屏蔽碼最后就是用來(lái)計(jì)算權(quán)限的,但是經(jīng)過(guò)讀懂之后,還是不厭其煩的改動(dòng)了整個(gè)程序,增加了一個(gè)用戶(hù)類(lèi)。全局變量里面設(shè)定了系統(tǒng)屏蔽碼,用戶(hù)屏蔽碼就寫(xiě)在了用戶(hù)的類(lèi)里面,每個(gè)用戶(hù)都自帶自己的用戶(hù)umask碼。 2.實(shí)驗(yàn)感悟本次試驗(yàn)最大的體會(huì)就是個(gè)人工作與小組工作的差別,這次實(shí)驗(yàn)我選擇了個(gè)人獨(dú)立來(lái)完成,主要是想體驗(yàn)一下一個(gè)人獨(dú)立完成一個(gè)完整的程序的感受。剛開(kāi)始的時(shí)候我認(rèn)真去看了第六章的上課P

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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)論