linux-ls功能實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第1頁(yè)
linux-ls功能實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第2頁(yè)
linux-ls功能實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第3頁(yè)
linux-ls功能實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第4頁(yè)
linux-ls功能實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩9頁(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)介

西安郵電大學(xué)操作系統(tǒng)課程設(shè)計(jì)報(bào)告書(shū)院系名稱(chēng):計(jì)算機(jī)學(xué)院學(xué)生姓名:**專(zhuān)業(yè)名稱(chēng):軟件工程班級(jí):**班學(xué)號(hào):*****時(shí)間:2016年5月9日至2016年5月20日實(shí)驗(yàn)?zāi)康牟僮飨到y(tǒng)是控制和管理計(jì)算機(jī)硬件和軟件資源的虛擬機(jī),其中的文件系統(tǒng)是對(duì)軟件和設(shè)備進(jìn)行管理的系統(tǒng),文件系統(tǒng)是操作系統(tǒng)中非常重要的一個(gè)模塊,它的實(shí)現(xiàn)占用了操作系統(tǒng)源碼的最大編碼量,其好壞也直接影響著用戶對(duì)操作系統(tǒng)的感受程度。通過(guò)對(duì)操作系統(tǒng)課程設(shè)計(jì)的實(shí)踐,進(jìn)一步加深對(duì)文件系統(tǒng)的認(rèn)識(shí)和理解,并在此基礎(chǔ)上培養(yǎng)學(xué)生的工程應(yīng)用能力。實(shí)驗(yàn)分別從用戶態(tài)和內(nèi)核態(tài)兩個(gè)層次實(shí)踐文件系統(tǒng)的部分功能。實(shí)驗(yàn)任務(wù)2.1ls實(shí)現(xiàn)在linux下編程實(shí)現(xiàn)帶參數(shù)的shell命令ls,ls命令必須支持如下功能。1.基本要求支持-l參數(shù);輸出結(jié)果按字典排序;列出“.”文件,支持-a參數(shù),在沒(méi)有-a時(shí)候不顯示隱藏文件;顯示記錄總數(shù)。2.高級(jí)要求支持對(duì)給定的目錄進(jìn)行操作,如ls/tmp;輸出結(jié)果分欄排序,每欄的寬度由這一欄最長(zhǎng)的文件名決定,顯示的欄數(shù)還受終端顯示器的寬度影響,每一列盡可能的等寬;正確顯示文件特殊屬性suid、sgid和sticky,參見(jiàn)聯(lián)機(jī)幫助確保程序能處理各種情況;支持標(biāo)準(zhǔn)的ls支持選項(xiàng)-R,它的功能是遞歸地列出目錄中所有的文件包含子目錄中的文件;支持標(biāo)準(zhǔn)的ls支持選項(xiàng)-u,它會(huì)顯示出文件的最后訪問(wèn)時(shí)間,如果用了-u而不用-l,會(huì)有什么結(jié)果?;當(dāng)關(guān)掉一個(gè)文件的讀權(quán)限,就不能打開(kāi)這個(gè)文件來(lái)讀。如果從一個(gè)終端登錄,打開(kāi)一個(gè)文件,保持文件的打開(kāi)狀態(tài),然后從另外的終端登錄,去掉文件的讀權(quán)限,這時(shí)有什么事情會(huì)發(fā)生?編寫(xiě)一個(gè)程序,先用open()打開(kāi)一個(gè)文件,用read()讀一些內(nèi)容,調(diào)用sleep()等待20s以后,再讀一些內(nèi)容,從另外的終端,再等待的20s內(nèi)去掉文件的讀權(quán)限,這樣會(huì)有什么結(jié)果?。2.2編寫(xiě)內(nèi)核模塊顯示目錄或文件的信息。使用內(nèi)核模塊編程;調(diào)試《Linux操作系統(tǒng)原理與應(yīng)用》第8章文件系統(tǒng)P215的例子;練習(xí)給內(nèi)核模塊傳入?yún)?shù),參考關(guān)于帶參數(shù)的模塊編程/uid-796091-id-3206153.html;給內(nèi)核模塊傳入?yún)?shù)path,其中path為絕對(duì)路徑;當(dāng)path為目錄時(shí),顯示目錄對(duì)應(yīng)的dentrey結(jié)構(gòu)中的相關(guān)信息(可打印的信息);當(dāng)path為文件時(shí),顯示文件對(duì)應(yīng)的indoe結(jié)構(gòu)中的相關(guān)信息(可打印的信息);當(dāng)路徑錯(cuò)誤時(shí),有錯(cuò)誤提示信息。開(kāi)發(fā)環(huán)境設(shè)備名稱(chēng)設(shè)備類(lèi)型配置類(lèi)型參數(shù)LenovoG480PC機(jī)硬件配置RAM4G軟件配置Ubuntu32位測(cè)試環(huán)境設(shè)備名稱(chēng)設(shè)備類(lèi)型配置類(lèi)型參數(shù)LenovoG480PC機(jī)硬件配置RAM4G軟件配置Ubuntu32位總體設(shè)計(jì)5.1功能組織圖ls功能圖:運(yùn)行命令運(yùn)行命令Ls-uLsLs-uLs-RLs-aLsLs-l輸出所有文件輸出所有文件屬性輸出隱藏文件輸出文件屬性按字典順序排序輸出所有文件輸出所有文件屬性輸出隱藏文件輸出文件屬性按字典順序排序文件權(quán)限:運(yùn)行命令運(yùn)行命令chmod修改權(quán)限chmod修改權(quán)限讀文件,ls顯示權(quán)限信息讀文件,ls顯示權(quán)限信息內(nèi)核模塊:super_blocks:運(yùn)行命令運(yùn)行命令加載模塊加載模塊加鎖加鎖遍歷系統(tǒng)中的超級(jí)塊遍歷系統(tǒng)中的超級(jí)塊打印文件設(shè)備號(hào)打印文件設(shè)備號(hào)打印文件系統(tǒng)名打印索引結(jié)點(diǎn)號(hào)統(tǒng)計(jì)索引結(jié)點(diǎn)計(jì)數(shù)打印索引結(jié)點(diǎn)號(hào)統(tǒng)計(jì)索引結(jié)點(diǎn)計(jì)數(shù)卸載模塊卸載模塊path:運(yùn)行命令運(yùn)行命令路徑錯(cuò)誤Path=文件路徑錯(cuò)誤Path=文件Path=目錄顯示目錄信息顯示錯(cuò)誤信息顯示文件信息顯示目錄信息顯示錯(cuò)誤信息顯示文件信息5.2原理linux

文件系統(tǒng)

:linux下有普通文件、目錄文件、鏈接文件、設(shè)備文件、管道文件這幾種類(lèi)型。但鏈接文件、設(shè)備文件、管道文件都可以當(dāng)做普通文件看待,那實(shí)際也就只要區(qū)分普通文件和目錄文件這兩種了。而目錄文件的內(nèi)容就是它所包含所有文件和子目錄的一個(gè)列表,所以只要打開(kāi)目錄文件并讀取對(duì)應(yīng)目錄塊里的那個(gè)列表數(shù)據(jù),就可以得到些目錄下所有文件和子目錄的名稱(chēng)了。其實(shí)這個(gè)流程簡(jiǎn)單,就是:打開(kāi)目錄->讀取內(nèi)容->顯示文件名稱(chēng)->關(guān)閉打開(kāi)的目錄。

Linux系統(tǒng)中會(huì)有很多目錄。每個(gè)目錄中又會(huì)有很多文件。如果要列出一個(gè)非當(dāng)前目錄的內(nèi)容或者是一個(gè)特定文件的信息,則需要在參數(shù)中給出目錄名或文件名。如:

ls

/tmp

//列出/tmp目錄中各文件的文件名

ls

docs

//列出docs目錄中各文件的屬性

ls

*.c

//列出當(dāng)前目錄下與*.c匹配的文件,即當(dāng)前目錄下所有以.c為后綴的

經(jīng)常用到的命令行選項(xiàng)

ls

-l

在前面已經(jīng)提到過(guò),-l就是輸出文件詳細(xì)的信息

ls

-a

列出的內(nèi)容包含以“.“開(kāi)頭的文件,即所謂有隱藏文件

Linux的文件訪問(wèn)權(quán)限:Linux是一個(gè)安全的操作系統(tǒng),說(shuō)他安全,最重要的一個(gè)原因是對(duì)用戶訪問(wèn)權(quán)限的控制。在shell下我們可以通過(guò)命令ls-lfilename來(lái)查看一文件的屬性。其中第一項(xiàng)文件屬性總共由10位構(gòu)成,第一位是文件類(lèi)型,剩下9位都是表示文件的訪問(wèn)權(quán)限,每3個(gè)一組,第一組:文件所有者對(duì)該文件的操作權(quán)限,第二組表示與文件所有者同組的用戶對(duì)該文件的操作權(quán)限,第三組表示其他用戶對(duì)該文件的操作權(quán)限,權(quán)限由三種字母組成:r:可讀w:可寫(xiě)x:可執(zhí)行。編寫(xiě)內(nèi)核模塊寫(xiě)內(nèi)核模塊,打印super_block結(jié)構(gòu)中一些域的值。(課本上的例子)遍歷系統(tǒng)中的超級(jí)塊:list_head結(jié)構(gòu)類(lèi)型的字段名稱(chēng)為s_list。list_entry宏通過(guò)指向list_head節(jié)點(diǎn)的地址來(lái)得到外部超級(jí)塊的首地址。獲取系統(tǒng)中個(gè)超級(jí)塊的地址,獲得某個(gè)子進(jìn)程的地址,打印文件系統(tǒng)所在的主設(shè)備號(hào)和次設(shè)備號(hào)和文件系統(tǒng)名。遍歷打印每個(gè)超級(jí)塊中的所有索引節(jié)點(diǎn)號(hào),打印索引結(jié)點(diǎn)。內(nèi)核模塊傳入?yún)?shù)path,其中path為絕對(duì)路徑path=路徑時(shí),顯示如下信息:目錄項(xiàng)標(biāo)志、哈希表、短目錄名、目錄項(xiàng)長(zhǎng)度、目錄項(xiàng)名、目錄項(xiàng)計(jì)數(shù)器的引用path=文件時(shí),顯示如下信息:文件索引節(jié)點(diǎn)的數(shù)量、文件類(lèi)型和權(quán)限、用戶ID、用戶組ID、指定文件系統(tǒng)的讀寫(xiě)訪問(wèn)標(biāo)志、文件大小、索引節(jié)點(diǎn)的狀態(tài)、硬鏈接數(shù)、引用記數(shù)、文件的塊、版本號(hào)、以位為單位的塊大小詳細(xì)設(shè)計(jì)模塊一ls1.功能(1)ls支持-l參數(shù);(2)輸出結(jié)果按字典排序;(3)列出“.”文件,支持-a參數(shù),在沒(méi)有-a時(shí)候不顯示隱藏文件支持–u參數(shù)。支持–R參數(shù);(4)顯示記錄總數(shù)。(5)支持對(duì)給定的目錄進(jìn)行操作,如ls/tmp;(6)輸出結(jié)果分欄排序,每欄的寬度由這一欄最長(zhǎng)的文件名決定,顯示的欄數(shù)還受終端顯示器的寬度影響,每一列盡可能的等寬;(7)修改文件權(quán)限2.算法/流程圖ls算法描述: 根據(jù)輸入命令所帶的參數(shù)判斷并調(diào)用函數(shù)do_ls();把隱藏文件屬性寫(xiě)入結(jié)構(gòu)體數(shù)組Outputpoint[]中并統(tǒng)計(jì)文件數(shù)。非隱藏文件屬性寫(xiě)入結(jié)構(gòu)體數(shù)組Output[]中并統(tǒng)計(jì)文件數(shù)。按參數(shù)要求對(duì)文件名進(jìn)行排序。根據(jù)要求輸出。流程圖:main()函數(shù):開(kāi)始開(kāi)始判斷輸入的命令判斷輸入的命令 調(diào)用do_ls() 調(diào)用do_ls()判斷是否是/tmp-l判斷是否是/tmp-l 是 打開(kāi)當(dāng)前目錄把隱藏文件記錄在數(shù)組Outputpoint[],非隱藏文件記錄在數(shù)組Output[]命令名字后加. 否 打開(kāi)當(dāng)前目錄把隱藏文件記錄在數(shù)組Outputpoint[],非隱藏文件記錄在數(shù)組Output[]命令名字后加. 判斷命令是否是-t判斷命令是否是-t 是 否調(diào)用qsort()調(diào)用qsort();按最后訪問(wèn)時(shí)間排序調(diào)用qsort();按最后修改時(shí)間排序 否 判斷命令是否是ls判斷命令是否是ls 否 是判斷命令是否是-Rdisplay_Ls(cntOutput);判斷命令是否是-Rdisplay_Ls(cntOutput);調(diào)用qsort();按最后修改時(shí)間排序 是調(diào)用qsort();按最后修改時(shí)間排序判斷命令是否是ls判斷命令是否是ls調(diào)用qsort();按最后修改時(shí)間排序調(diào)用qsort();按最后修改時(shí)間排序調(diào)用qsort();按最后修改時(shí)間排序調(diào)用qsort();按最后修改時(shí)間排序判斷命令是否是ls判斷命令是否是ls調(diào)用qsort();按最后修改時(shí)間排序調(diào)用qsort();按最后修改時(shí)間排序調(diào)用qsort();按最后修改時(shí)間排序調(diào)用qsort();按最后修改時(shí)間排序調(diào)用qsort();按最后修改時(shí)間排序調(diào)用qsort();按最后修改時(shí)間排序 否調(diào)用qsort();按最后修改時(shí)間排序調(diào)用qsort();按最后修改時(shí)間排序display_ls_R(cntOutp);display_ls_R(cntOutp);判斷命令是否是ls-l判斷命令是否是ls-l 是結(jié)束循環(huán)調(diào)用dostat(Output[i].FileName);結(jié)束循環(huán)調(diào)用dostat(Output[i].FileName);3.運(yùn)行結(jié)果4.模塊使用的主要函數(shù)、數(shù)據(jù)類(lèi)型和宏(1)主要函數(shù)說(shuō)明1)函數(shù)一do_ls();原型:voiddo_ls(intmyJudge,charmyOrder[])功能:根據(jù)命令輸出對(duì)應(yīng)的文件屬性參數(shù):myJudge,myOrder[]返回值:void2)函數(shù)二recursion原型:voidrecursion(char*name)功能:遞歸輸出文件名參數(shù):name返回值:void3)函數(shù)三display_ls_a原型:voiddisplay_Ls_a(intcntPoint,intcnt)功能:ls–a的功能,輸出非隱藏文件參數(shù):cntPoint,cnt返回值:void4)函數(shù)四show_file_info原型:voidshow_file_info(char*filename,structstat*info_p)功能:ls–l文件屬性分欄輸出參數(shù):filename,info_p返回值:void(2)數(shù)據(jù)類(lèi)型1)數(shù)據(jù)類(lèi)型1名稱(chēng):Output[maxN]類(lèi)型:structOutfile*含義:非隱藏文件的保存2)數(shù)據(jù)類(lèi)型2名稱(chēng):,OutputPoint[maxM];類(lèi)型:structOutfile*含義:隱藏文件的保存(3)宏1名稱(chēng):#defineLS0//ls含義:命令行無(wú)參數(shù)宏2名稱(chēng):#defineLS_A1//ls-a含義:命令行參數(shù)只有-a宏3名稱(chēng):#defineLS_L2//ls-l含義:命令行參數(shù)只有-l宏4名稱(chēng):#defineLS_TMP3//ls/tmp含義:命令行參數(shù)有/tmp宏5名稱(chēng):#defineLS_R7 //ls-R含義:命令行參數(shù)有-R6.2模塊二super_block1.功能通過(guò)加載內(nèi)核的方式,打印出超級(jí)塊super_blocks數(shù)據(jù)結(jié)構(gòu)中文件系統(tǒng)所在的主設(shè)備號(hào)和次設(shè)備號(hào)以及文件系統(tǒng)名2.算法/流程圖開(kāi)始開(kāi)始加載模塊加載模塊加鎖加鎖遍歷系統(tǒng)中的超級(jí)塊遍歷系統(tǒng)中的超級(jí)塊打印文件設(shè)備號(hào)打印文件設(shè)備號(hào)打印文件系統(tǒng)名打印文件系統(tǒng)名打印索引結(jié)點(diǎn)號(hào)打印索引結(jié)點(diǎn)號(hào)索引結(jié)點(diǎn)計(jì)數(shù)索引結(jié)點(diǎn)計(jì)數(shù)卸載模塊卸載模塊結(jié)束結(jié)束3.運(yùn)行結(jié)果4.模塊使用的主要函數(shù)、數(shù)據(jù)類(lèi)型和宏(1)主要函數(shù)說(shuō)明1)函數(shù)一原型:staticint__initmy_init(void)功能:模塊加載參數(shù):無(wú)返回值:int2)函數(shù)二原型:staticvoid__exitmy_exit(void)功能:模塊卸載參數(shù):void返回值:void(2)數(shù)據(jù)類(lèi)型1)數(shù)據(jù)類(lèi)型1名稱(chēng):sb類(lèi)型:structsuper_block*含義:定義一個(gè)超級(jí)塊2)數(shù)據(jù)類(lèi)型2名稱(chēng):pos類(lèi)型:structlist_head*含義:定義一個(gè)鏈表3)數(shù)據(jù)類(lèi)型3名稱(chēng):linode類(lèi)型:structlist_head*含義:定義一個(gè)鏈表4)數(shù)據(jù)類(lèi)型4名稱(chēng):pinode類(lèi)型:structinode*含義:定義一個(gè)索引結(jié)點(diǎn)5)數(shù)據(jù)類(lèi)型5名稱(chēng):count類(lèi)型:int含義:存儲(chǔ)總數(shù)(3)宏一名稱(chēng):#defineSUPER_BLOCKS_ADDRESS0xc1778bc0含義:超級(jí)塊的變量地址宏二名稱(chēng):#defineSB_LOCK_ADDRESS 0xc1932aa0含義:sb_lock超級(jí)塊對(duì)應(yīng)的自旋鎖測(cè)試方法與測(cè)試結(jié)果7.1測(cè)試方法編號(hào)輸入用例期望結(jié)果1./a.out按字典排序,輸出當(dāng)前目錄下的所有文件名(不含隱藏文件)2./a.ou

溫馨提示

  • 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)論