




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
/操作系統大型實驗班級:學號:姓名:一實驗介紹……………………1.實驗名稱2.實驗目的3.實驗內容及要求二實驗環境……………………三實驗設計……………………1.數據結構設計2.系統流程設計3.實現命令操作四模塊詳解……………………1.文件操作2.用戶操作五實驗演示……………………1.初始化磁盤塊2.用戶登錄3.目錄操作4.文件操作六源代碼………………………七實驗心得體會……………………1.調試中遇到的問題總結2.實驗感悟一、實驗介紹1.實驗名稱操作系統大型實驗2.實驗目的完成一個UNIX/Linux文件系統的子集的模擬實現,了解Unix文件系統的實現機制。3.實驗內容及要求文件卷結構設計0#塊可省略I節點棧及空間為20項塊大小為512字節卷盤塊數大于100I節點盤塊數大于10塊I節點結構設計文件大小文件聯接計數文件地址文件擁有者文件所屬組文件權限及類別文件最后修改時間其中文件地址為六項:四個直接塊號.一個一次間址.一個兩次間址目錄結構用16字節表示.其中14字節為文件名.2字節為I節點號用戶及組結構用戶信息中包括用戶名、口令.所屬組.用戶打開文件表文件樹結構除〔4要求外.適當考慮UNIX本身文件樹結構實現功能Ls 顯示文件目錄Chmod 改變文件權限Chown 改變文件擁有者Chgrp 改變文件所屬組Pwd 顯示當前目錄Cd 改變當前目錄Mkdir 創建子目錄Rmdir 刪除子目錄Mv 改變文件名Cp 文件拷貝Rm 文件刪除Ln 建立文件聯接Cat 連接顯示文件內容Vi文件寫入Mk創建文件umask查看用戶屏蔽碼Umask 文件創建屏蔽碼Passwd 修改用戶口令Ls-l查看文件類型Login用戶注銷Logout退出系統Help顯示幫助信息二、實驗環境實驗設備:MicrosoftVisualStudio2010開發語言:c++三、實驗設計1.數據結構設計磁盤文件結構設計:用一個名為disk.txt的文件模擬Unix系統磁盤.總共分為200塊.每塊514個字節〔實際可用512個字節.還有2個字節是磁盤分割符‘\n’.使第一塊〔0#盤塊做為超級塊.記錄該系統磁盤的使用情況;第二塊〔1#盤塊——第十三塊〔12#盤塊作為存儲I結點使用.每個I結點74個字節.所以每個盤塊可以存放6個I結點.總共有72個I結點.記錄在超級塊中;十三塊〔12#以后的盤塊作為存儲文件內容使用.總共187個盤塊.用成組連接法記錄在超級塊中。對于I結點的具體設計如下:classINode//<74B>{public:intfsize;//文件大小setw<6>intfbnum;//文件盤塊數setw<6>intaddr[4];//四個直接盤塊號文件最大為4*512=2048=2KB setw<4>*4intaddr1;//一個一次間址<>文件大于2KB.小于2KB+16*512=10KBsetw<4>intaddr2;//一個兩次間址<> 文件大于10KB.小于10KB+16*16*512B=138KBsetw<4>charowner[6];//文件擁有者setw<6>chargroup[6];//文件所屬組setw<6>charmode[12];//文件類別及存儲權限setw<12>charctime[10];//最近修改時間setw<10>intconnect;//文件聯接計數};對于超級塊的具體設計如下:classsuperBlock{public:intFIStack[72];//空閑結點號棧setw<3>*72intFICount;//空閑i結點總數setw<3>intFIPtr;//空閑結點棧指針setw<3>intFBStack[10];//空閑盤塊號棧setw<4>*10intFBCount;//空閑盤塊總數setw<4>intFBPtr;//空閑盤塊棧指針setw<3>};初始化磁盤示意圖:14#13#120#塊14#13#120#塊。。。。。。。。。。。。。。1#塊12#塊13#塊14#塊16#塊15#塊。。。。。。。。。。。。。。。空閑節點號棧空閑盤塊號棧空閑節點總數71空閑節點指針1空閑盤塊總數186空閑節點指針172。。。。。。。。22#。。。。22#。。。。1272用于文件具體內容存放除了超級塊、I結點、磁盤文件的數據結構設計以外.為了系統操作方便.我還設計了用戶類、文件目錄類。用戶類具體設計:classUSER//用戶<24B>{public:charname[6];//用戶名setw<6>charpass[6];//密碼setw<6>chargroup[6];//所屬組setw<6>intumask[3];//用戶umask碼setw<6>};用戶信息全部存放在一個user.txt的文件里面.所以對于user.txt文件也有一個設計.文件最開始是存放用戶總數〔setw<6>.隨后跟著的是每一位用戶名、密碼、所屬組、用戶umask碼。文件目錄類具體設計:classCatalog//目錄項<18B>{public:charfname[14];//文件名setw<14>intindex;//i結點號setw<4>};目錄信息全部都存放在disk磁盤里面.所以具體數據結構設計都在上面的磁盤文件設計中提及。2.程序流程設計◆系統主體流程圖設計見圖1◆用戶注冊流程圖見圖2◆登陸功能流程圖見圖3◆用戶修改口令流程圖見圖4◆用戶umask碼修改流程圖見圖5◆顯示所有子目錄ls操作流程圖見圖6◆創建文件mk、目錄mkdir流程圖見圖7◆刪除文件rm流程圖見圖8◆刪除目錄文件rmdir流程圖見圖9◆改變當前路徑cd操作流程圖見圖10◆查看文件內容cat操作流程圖見圖11◆拷貝文件、目錄cp操作流程圖見圖12◆建立文件聯接ln操作流程圖見圖13◆修改文件名稱MV操作流程圖見圖14◆修改文件權限chmod操作流程圖見圖15◆修改文件擁有者chown、所屬組chgrp操作流程圖見圖16◆寫流程圖vi見圖17開始N文件系統初始化開始N文件系統初始化分析命令修改用戶口令顯示目錄系統退出改變文件擁有者改變文件所屬組顯示當前目錄改變當前目錄創建子目錄刪除子目錄改變文件名文件拷貝文件刪除改變文件權限Y用戶注銷文件系統初始化?是否為新用戶?Y注冊并登陸直接登陸N讀入超級塊中信息顯示文件內容建立文件聯接文件寫入創建文件查看用戶屏蔽碼文件創建屏蔽碼查看文件類型幫助信息顯示結束圖1系統主體流程圖輸入命令圖2注冊功能流程圖開始返回輸入用戶名是否被使用?YN再次輸入口令輸入口令兩次輸入是否匹配?YN用戶名密碼寫入文件圖3登陸功能流程圖圖3登陸功能流程圖開始返回輸入用戶名密碼用戶名密碼是否都匹配?YN登陸成功圖4用戶修改口令流程圖開始圖4用戶修改口令流程圖開始返回輸入原始密碼密碼是否輸入正確?YN新密碼寫入文件輸入新密碼兩次兩次輸入是否匹配?YN圖5用戶umask碼修改流程圖開始返回是否找到?輸入新的用戶umask碼用戶文件中查找該用戶YN新的umask碼寫入文件開始開始返回當前文件是否為空?YN遍歷當前目錄中文件項讀入判斷文件是否為目錄文件?N當前目錄為空遞歸讀入該目錄內容Y輸出所有剛剛讀入的文件項圖6顯示所有子目錄ls操作流程圖圖圖7創建文件mk、目錄mkdir流程圖開始返回輸入文件名文件中是否有重名?NY申請I結點和盤塊是否都申請成功?N文件創建失敗Y當前目錄文件i結點修改新建文件名、結點寫入當前目錄新建文件i結點初始化新建文件成功圖圖8刪除文件rm流程圖開始輸入文件名返回對當前目錄是否有操作權限?文件刪除失敗對當前文件夾是否存在該文件?對該文件是否有操作權限?該文件是否為數據文件?該文件是否為聯接文件?回收文件的盤塊、結點當前目錄中刪除該文件名當前目錄中i結點的修改文件刪除成功NNNNNYYYYY圖圖9刪除目錄文件rmdir流程圖開始輸入文件名返回對當前目錄是否有操作權限?目錄刪除失敗對當前目錄是否存在該子目錄?對該子目錄是否有操作權限?該文件是否為目錄文件?該目錄文件是否為空?回收目錄的盤塊、結點當前目錄中刪除該目錄名當前目錄中i結點的修改目錄刪除成功遞歸刪除YYYYYNNNNN圖圖10改變當前路徑cd操作流程圖開始輸入修改路徑分析路徑路徑為'.’路徑為'..’路徑為'/’路徑為子目錄名路徑為絕對路徑切換到當前目錄切換到根目錄切換到父目錄切換到指定的子目錄切換到指定的任意目錄返回圖圖11查看文件內容cat操作流程圖開始輸入文件名該文件是否為數據文件?NY讀取文件內容當前目錄下是否存在該文件?YN讀取文件失敗返回圖圖12拷貝文件、目錄cp操作流程圖開始輸入需要拷貝的文件名,拷貝的指定路徑返回對當前目錄是否存在該文件?分析文件類型要拷貝文件為目錄文件要拷貝文件為數據文件保存當前路徑保存當前路徑指定路徑下新建目錄文件指定路徑下新建數據文件讀入目錄文件內容讀入數據文件內容讀入的內容寫入新建目錄文件讀入的內容寫入新建數據文件路徑還原圖圖13建立文件聯接ln操作流程圖開始輸入建立聯接的兩個文件名Y對該文件是否有操作權限?Y對當前目錄是否存在建立聯接的文件?Y對當前目錄是否有操作權限?NNN新建一個文件名不同,結點號相同的文件返回建立聯接文件不成功圖圖14修改文件名稱MV操作流程圖開始輸入要修改的文件名Y對該文件是否有操作權限?Y對當前目錄是否存在修改的文件?Y對當前目錄是否有操作權限?NNN將新的文件名替換舊的寫入文件返回修改文件名不成功輸入修改以后的文件名Y該目錄中是否有同名的文件?N修改當前文件i結點NNN對當前目錄是否有操作權限?Y對當前目錄是否存在修改的文件?Y對該文件是否有操作權限?Y輸入要修改的文件名開始圖15修改文件權限chmod操作流程圖NNN對當前目錄是否有操作權限?Y對當前目錄是否存在修改的文件?Y對該文件是否有操作權限?Y輸入要修改的文件名開始圖15修改文件權限chmod操作流程圖分析當前用戶文件擁有這文件所屬組內成員其他用戶選擇修改哪類用戶的權限選擇修改模式返回修改權限失敗YNNN對當前目錄是否有操作權限?Y對當前目錄是否存在修改的文件?Y輸入要修改的文件名圖16修改文件擁有者chown、所屬組chgrp操作流程圖開始輸入修改以后的文件所有者/所屬組對該文件是否有操作權限?NYNNN對當前目錄是否有操作權限?Y對當前目錄是否存在修改的文件?Y輸入要修改的文件名圖16修改文件擁有者chown、所屬組chgrp操作流程圖開始輸入修改以后的文件所有者/所屬組對該文件是否有操作權限?NY修改當前目錄i結點和子目錄i結點該所有者的用戶名/所屬組是否合法?修改的文件是否為目錄文件?YN遞歸修改其子文件的擁有者/所屬組修改當前目錄i結點和子目錄i結點返回YYYYNNN該文件是否為數據文件?對該文件是否有操作權限?當前目錄是否存在該文件?圖17寫文件vi操作流程圖開始開始當前目錄有權限否?輸入文件名YYYYNNN該文件是否為數據文件?對該文件是否有操作權限?當前目錄是否存在該文件?圖17寫文件vi操作流程圖開始開始當前目錄有權限否?輸入文件名N寫入文件不成功選擇自己輸入還是系統填充手動輸入內容選擇系統填充的字符個數根據內容分配盤塊內容寫入結束3.實現命令操作cd[enter].[enter]切換到當前目錄cd[enter]/[enter]切換到根目錄cd[enter]..[enter]切換到父目錄cd[enter]dir[enter]切換到某一子目錄,dir為子目錄名cd[enter]string[enter]切換到指定路徑的目錄.string為路徑mkdir[enter]dir[enter]當前目錄下創建名為dir的子目錄rmdir[enter]dir[enter]刪除當前目錄下名為dir的子目錄mk[enter]file[enter]當前目錄下創建名為file的文件rm[enter]file[enter]刪除當前目錄下名為file的文件cp[enter]dirORfile[enter]string[enter]拷貝當前目錄下文件或子目錄到指定路徑下cat[enter]file[enter]查看當前目錄下名為file的文件內容vi[enter]file[enter]向當前目錄下名為file的文件寫入一定內容pwd[enter]顯示當前目錄ls[enter]顯示所有子目錄chmod[enter]file[enter]改變當前目錄下名為file文件的權限chown[enter]file[enter]改變當前目錄下名為file文件的擁有者chgrp[enter]file[enter]改變當前目錄下名為file文件的所屬組MV[enter]file[enter]改變當前目錄下名為file文件的文件名login[enter]用戶注銷.可以重新登陸passwd[enter]用戶改變密碼umask[enter]查看用戶umask碼Umask[enter]code[enter]修改用戶umask碼為codeln[enter]file1[enter]file2[enter]文件file1與file2建立連結ls-l[enter]file[enter]查看文件file的類別help[enter]提供幫助logout[enter]退出系統四、模塊詳解1.文件操作◆mk創建文件模塊.輸入mk命令.回車.輸入文件名.回車.即會在當前目錄文件下創建一個名為剛剛輸入的文件名的數據文件。在該創建過程中首先要判斷該目錄中有沒有同名的文件.如果有的話就創建失敗.還要判斷在該目錄下有沒有創建文件的權限.有權限才可以創建。具體流程圖查看第二節.系統流程圖設計部分。◆rm刪除文件模塊.輸入rm命令.回車.輸入文件名.回車.即會在當前目錄文件下刪除一個名為剛剛輸入的文件名的數據文件。在該刪除過程中要判斷該目錄中是否存在該文件.如果不存在就沒有必要執行該操作了.還要判斷在該目錄下有沒有刪除文件的權限.有權限才可以刪除。具體流程圖查看第二節.系統流程圖設計部分。◆mkdir創建目錄文件模塊.輸入mkdir命令.回車.輸入文件名.回車.即會在當前目錄文件下創建一個名為剛剛輸入的文件名的目錄文件。在該創建過程中首先要判斷該目錄中有沒有同名的文件.如果有的話就創建失敗.還要判斷在該目錄下有沒有創建文件的權限.有權限才可以創建。具體流程圖查看第二節.系統流程圖設計部分。◆rmdir刪除目錄文件模塊.輸入rmdir命令.回車.輸入文件名.回車.即會在當前目錄文件下刪除一個名為剛剛輸入的文件名的目錄文件。在該刪除過程中要判斷該目錄中是否存在該目錄文件.如果不存在就沒有必要執行該操作了.還要判斷在該目錄下有沒有刪除文件的權限.有權限才可以刪除。刪除的時候要判斷該目錄是否為空.如果里面有內容.則要通過遞歸函數.將他們一并刪除了。具體流程圖查看第二節.系統流程圖設計部分。◆cp拷貝文件模塊.輸入cp命令.回車.輸入要拷貝文件的文件名.回車.輸入要拷貝到哪個路徑下面.即會在該路徑下創建一個名為與被拷貝文件名相同的數據文件〔目錄文件.并且指向盤塊里面的內容都相同的數據文件〔目錄文件。在該拷貝過程中要判斷該目錄中是否存在該文件.如果不存在就沒有必要執行該操作了.還要判斷在該目錄下有沒有拷貝文件的權限.有權限才可以拷貝。然后要查看該路徑是否存在.存在該路徑才可以在該路徑下創建拷貝過來的文件.具體流程圖查看第二節.系統流程圖設計部分。◆cat顯示文件內容模塊.輸入cat命令.回車.輸入文件名.回車.即會在屏幕上顯示該文件的具體內容。在該過程中要判斷該目錄中是否存在該文件.如果不存在就沒有必要執行該操作了。執行操作時.要調用readfile〔INodeinode函數,先讀入文件內容到content里面.然后直接輸出。具體流程圖查看第二節.系統流程圖設計部分。◆ls顯示當前目錄下所有目錄的模塊.輸入ls命令.回車,即會在屏幕上顯示當前目錄下的所有目錄。在該過程中要判斷該目錄中是否為空.如果為空就沒有必要執行該操作了。執行操作時.要調用readdir〔INodeinode函數,先讀入文件內容到content里面.然后直接輸出。如果子目錄里面還有子目錄.則通過遞歸.一并輸出來。具體流程圖查看第二節.系統流程圖設計部分。◆pwd顯示當前目錄的模塊.輸入pwd命令.回車,即會在屏幕上顯示當前所在的目錄。◆vi寫文件操作模塊.輸入vi命令.回車.輸入文件名.回車.既可以選擇自己輸入內容還是系統自動輸入.選擇自己輸入的話.可以自己主動隨便輸入什么內容然后回車。如果選擇系統自動輸入.那么還需要輸入要填充的字符個數.系統就會自動填充。具體流程圖查看第二節.系統流程圖設計部分。◆chmod改變文件權限模塊.輸入chmod命令.回車.輸入文件名.回車.即會根據不同類別的用戶在屏幕上提示要改變哪一類用戶的權限。如果是文件擁有者執行該操作.他可以選擇修改自己、其他用戶的權限;如果是文件所屬組成員執行該操作.他可以選擇修改自己、其他用戶的權限;如果是其他用戶執行該操作.他只能選擇修改自己的權限;在該過程中要判斷該目錄中是否存在該文件.如果不存在就沒有必要執行該操作了。執行操作時.要判斷對該文件有沒有執行寫操作的權利.沒有就不能進行。具體流程圖查看第二節.系統流程圖設計部分。◆chown改變文件所有者模塊.輸入chown命令.回車.輸入文件名.回車.就會判斷執行者對于該文件有沒有改變的權限.沒有的話就不能執行.還有判斷當前目錄下有沒有該文件.沒有的話就沒有必要執行該操作。判斷可以執行時.就會提示輸入改變以后的所有者.然后判斷輸入的用戶名的合法性.判斷合法則修改成功。〔如果修改的文件時目錄文件.則將它下面的文件全部一起改了具體流程圖查看第二節.系統流程圖設計部分。◆chgrp改變文件所屬組模塊.輸入chgrp命令.回車.輸入文件名.回車.就會判斷執行者對于該文件有沒有改變的權限.沒有的話就不能執行.還有判斷當前目錄下有沒有該文件.沒有的話就沒有必要執行該操作。判斷可以執行時.就會提示輸入改變以后的所屬組.然后判斷輸入的組名的合法性.判斷合法則修改成功。〔如果修改的文件時目錄文件.則將它下面的文件全部一起改了具體流程圖查看第二節.系統流程圖設計部分。◆MV改變文件名模塊.輸入MV命令.回車.輸入文件名.回車.就會判斷執行者對于該文件有沒有改變的權限.沒有的話就不能執行.還有判斷當前目錄下有沒有該文件.沒有的話就沒有必要執行該操作。判斷可以執行時.就會提示輸入改變以后的文件名.然后判斷輸入文件名是否與當前目錄下有重名的.判斷沒有重名則修改成功。具體流程圖查看第二節.系統流程圖設計部分。◆ln建立文件聯接模塊.輸入ln命令.回車.輸入要建立聯接文件的文件名.回車.輸入要連接到哪個文件的文件名.即會在該路徑下創建一個以此命名的數據文件.并且該文件名后面的I結點號與前面一個文件的I結點號相同.指向相同的盤塊。在該過程中要判斷該目錄中是否存在該文件.如果不存在就沒有必要執行該操作了.還要判斷在該目錄下有沒有拷貝文件的權限.有權限才可以拷貝。然后要查看該文件的重名是否存在.存在則建立聯接失敗.具體流程圖查看第二節.系統流程圖設計部分。◆ls-l顯示文件類型模塊.輸入MV命令.回車.輸入文件名.回車.則會在屏幕上輸出該文件的類型是目錄文件還是數據文件。◆cd改變當前所在目錄的模塊。輸入cd,回車.相應的字符串.回車.則會根據輸入字符串的不同跳轉到不同的目錄下。如果字符串是‘.’.則到當前目錄;如果字符串是‘..’.則到父目錄;如果字符串是‘/’.則到根目錄;如果字符串是當前目錄下的子目錄.則到該子目錄;如果字符串是一個決定路徑.則到該絕對路徑。當然在執行的時候要判斷有沒有該子目錄或者該絕對路徑.如果沒有的話.就不能執行。具體流程圖查看第二節.系統流程圖設計部分。2.用戶操作◆login用戶注銷模塊.輸入login.回車.當前用戶就退出了.需要重新登錄。◆passwd用戶修改口令模塊.輸入passwd.回車.則會提示輸入原始密碼.輸入正確了才可以提示輸入新密碼.并且要求新密碼輸入兩次.兩次一樣了才能通過修改密碼成功。具體流程圖查看第二節.系統流程圖設計部分。◆umask用戶查看umask碼模塊.輸入umask.回車.屏幕上就會顯示當前用戶的用戶umask碼。◆Umask用戶修改umask碼模塊.輸入Umask.回車.輸入新的umask碼.回車.既可以更新原有的用戶屏蔽碼。◆logout用戶退出系統模塊.輸入logout.回車.系統自動退出。◆help用戶尋求幫助模塊.當用戶不清楚執行命令的時候.可以輸入help.回車.屏幕上會顯示出各種命令語句。五、實驗演示1.初始化磁盤塊超級塊與I結點初始化結果截圖:成組連接法每10個盤塊一組.最后一組只有7個.空閑盤塊截圖:2.用戶登錄直接登錄:注冊登錄:注冊以后用戶文件里面已經有新用戶的記錄:3.目錄操作新建目錄:新建以后可以看到盤塊中已存在這兩個目錄:這兩個目錄的i結點分配情況:刪除目錄:刪除操作以后目錄中aa目錄項已經被刪除:刪除操作以后aa文件的i結點結點也被回收:改變當前路徑:復制目錄文件:此時bb目錄以及它下面的目錄cc.一并拷貝到aa目錄下面了:顯示當前目錄:顯示當前目錄下的所有文件目錄:改變目錄名:改變目錄名以后可以看到磁盤中aa已經變成了bc:改變目錄權限:改變目錄擁有者:改變目錄所屬組:查看文件類別:4.文件操作新建文件新建文件以后磁盤中已經有這兩個文件:刪除文件執行刪除操作以后磁盤中文件已經刪除:寫文件拷貝文件查看文件建立文件聯接可以看到此時存在一個ce文件與aa雖然文件名不同.但是指向的是同一個I結點.相當于一個文件有兩個名稱。修改文件權限、文件擁有者、文件所屬組與前面的目錄操作是相同的.這里不再重復演示。六、重要函數及其實現方法boolhavesame<char*dirname,INodeinode,int&i,int&index2>函數主要用于判斷文件在當前路徑下是否存在.輸入文件名.當前路徑目錄文件的節點號inode.就可以通過inode節點中的addr定位到該目錄文件.然后通過一個個查找.與dirname對比.找到相等的.就說明該目錄文件中有該文件.可以對它進行操作。該函數在整個程序的功能實現中都會用到.因為每進行一個文件操作.首先要判斷它是否存在.只有存在該文件才可以對它進行一定的操作。boolfind<char*string>函數同樣是貫穿于整個程序.它的主要功能是找到string指明的路徑.并且轉換當前路徑到該路徑下.查找的過程主要是按照路徑一個目錄一個目錄往下查找.每查找一個目錄都是通過調用havesame函數實現的。該函數在很多功能中都會用到.比如說將一個指定文件拷貝到指定路徑下.就要通過該函數先確定該路徑是否存在.并且轉換到該路徑下。intballoc<>函數用于申請新盤塊.因為磁盤所有盤塊都是通過成組鏈接法管理的.在該函數中每申請一個盤塊的時候都會檢查有沒有到棧底.如果是棧底了.就必須先把棧底盤塊里面存放的下一組盤塊號調入棧中.然后把該盤塊分配出去。voidbfree<intindex>函數與申請盤塊的函數相對應.它是用于指定盤塊的回收的.同樣的.為了實現成組鏈接法.當一個盤塊回收時.必須先檢查盤塊號棧是否已滿.如果已滿.則先把棧里面的盤塊號全部都寫入要回收的盤塊中.然后清空棧.把剛剛回收的盤塊號寫入棧底。voidrmdir<char*dirname,intindex>該函數主要用于刪除指定目錄.刪除目錄時主要考慮的問題是該目錄下面的子目錄是不是也要刪除了?要怎樣實現?所以該函數中我要運用了遞歸的方法.刪除該目錄的時候先檢查他下面是否有子目錄.然后對每一個子目錄執行該函數.如此循環.直到它為空目錄了才將目錄刪除。同樣的在修改目錄擁有者函數voidchown<char*name>.目錄所屬組函數voidchgrp<char*name>中我也運用了同樣的方法來實現該目錄下面子目錄文件.目錄的擁有者、所屬組修改。voidwritefile<INodeinode,intin>該函數為文件寫函數.該函數的實現也是比較復雜的.首先要調用讀文件的函數voidreadfile<INodeinode>讀入該文件原先的內容.將原先的內容與新寫入的內容進行比較.如果原先內容多.那么先將多余的盤塊回收了.然后將內容寫入。如果新寫入的內容多.那么說明盤塊不夠.需要申請盤塊.在申請盤塊的過程中每申請一個盤塊之前都要先判斷原先內容有沒有寫到這一塊.如果沒有則進行申請.否則不用申請。盤塊申請完以后就可以將內容寫入了。其他比較簡單的功能實現函數由于代碼比較多.而且具體功能在模塊詳解以及系統流程設計的流程圖中都有很詳細的說明.這里就不再解釋了.而且附上的源代碼文件里面都已經寫了很詳細的注釋.這里就不占篇幅了。七、實驗心得體會1.調試中遇到的問題總結本次實驗中主要遇到的問題及解決方案:◆寫入文件的時候因為分配盤塊用的是成組連接法.當讀到一組里面最后一個盤塊的時候需要從該盤塊中讀入下一組盤塊號進入棧.每次運行到分配盤塊的時候總是出錯.分配前面幾組都是正確的.但是到某一組就是讀不進來下一組的盤塊號.當時是設了斷點一步步調試.還用寫入的方法測試了下位置對不對.結果寫入的位置是正確的.然后就郁悶了.不知道怎么回事.后來發現了一到讀三位數的就不正確了.因為在盤塊里面我初始化的時候.寫入的都是每個盤塊號只占了三個字節.所以三位數都是黏在一起的.中間沒有空格.在讀入的時候就不會讀入一個個數.而是一長串數字.導致出錯。◆調試過程中最郁悶的事就是文件的打開關閉了。剛開始沒有注意這些問題.根本就沒有注意文件的重復打開問題.導致在這個函數里面打開了disk.txt文件.還沒有關閉.接下需要調用另外一個函數.文件又在另外一個函數里面被打開.結果在另一個文件里面就根本讀不進文件里面的數據.因為這個毛病剛開始的時候出現了很多奇怪的現象.比如說在創建文件的函數里面.每創建一個函數申請一個盤塊.就算申請了好幾十個盤塊都沒有問題。但是同樣申請盤塊在文件的寫函數里就實現不了.因為在寫函數里面我已經打開了disk.txt文件.而在盤塊申請函數里面又打開了disk.txt文件。本來是想每申請一個盤塊.就先把內容寫進去.實現邊申請邊寫.結果申請到下一組的盤塊就會出錯.因為下一組的盤塊根本沒有讀進棧。◆技術性的問題也有.就是剛開始很多地方都是打算用string類型的數來傳遞值的.結果cout還有很多string類型自帶的函數根本就不支持。查看了頭文件確實已經包括了<string.h>.后來終于還是百度了這個問題.然后發現百度上的解答也是要求要包含string類型的頭文件.剛開始還不得解。然后無意間發現好像應該是<string>。然后就真的可以了。◆在遞歸函數的實現上也碰到了問題.因為我是想目錄文件刪除的時候.如果它包含了子目錄.那么通過遞歸.把它下面的子目錄先刪除了.等文件為空了再刪除該目錄。結果我在刪完第一個子目錄的時候再返回刪除第二個子目錄的時候就出錯了.最后發現還是disk.txt的關閉問題.因為我在遞歸之前并沒有關閉disk.txt文件.所以在調用遞歸的時候.進入了這個函數又重復打開了該文件。◆剛開始在設計ls<>函數的時候沒有考慮到子目錄的問題.只是簡單地想列出當前目錄下的所有目錄項.而沒有想把這些子目錄項中的子目錄也一起列出來.最后也是通過了遞歸讀入目錄項.實現了這個功能。◆在寫創建用戶umask碼的時候理解這個東西還是挺困難的.剛開始真的不理解.于是就直接用w、r來代替了.雖然說用戶屏蔽碼最后就是用來計算權限的.但是經過讀懂之后.還是不厭其煩的改動了整個程序.增加了一個用戶類。全局變量里面設定了系統屏蔽碼.用戶屏蔽碼就寫在了用戶的類里面.每個用戶都自
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年廂式貨車項目投資申請報告代可行性研究報告
- 跨國礦產開采安全風險評估與委托管理協議
- 2025年中國筆記本電腦行業市場現狀及未來發展前景預測分析報告
- 2025年中國保安服務行業市場規模調研及投資前景研究分析報告
- 2025年中國半導體功率器件行業市場投資可行性調研報告
- 2025年中國辦公桌升降柱行業市場前景預測及投資價值評估分析報告
- 2025年中國百貨零售行業市場規模調研及投資前景研究分析報告
- 環保基金會資金托管與綠色能源項目合作協議
- 智能家居產品直播銷售及用戶隱私保護協議
- 海外學術大會組織及配套服務全面協議
- 乙炔安全技術說明書(msds)
- 什么是數學:對思想和方法的基本研究
- 家長會課件:初三迎接中考家長會課件
- JS-004竣工驗收報告
- 金屬非金屬地下礦山安全避險“六大系統”課件
- TCSAE 97-2019 汽車緊固件鋅鋁涂層技術條件
- 會計原始憑證說課公開課一等獎市優質課賽課獲獎課件
- 伍德密封強度計算
- 產婦可以吃蛹蟲草嗎:哺乳期婦女可以吃蛹蟲草嗎
- 《化工原理》課程思政教學案例(一等獎)
- 以助產士為主導的連續護理模式的發展現狀
評論
0/150
提交評論