linux-ls功能實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第1頁
linux-ls功能實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第2頁
linux-ls功能實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第3頁
linux-ls功能實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第4頁
linux-ls功能實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

西安郵電大學(xué)操作系統(tǒng)課程設(shè)計(jì)報(bào)告書院系名稱:計(jì)算機(jī)學(xué)院學(xué)生姓名:**專業(yè)名稱:軟件工程班級:**班學(xué)號:*****時(shí)間:2016年5月9日至2016年5月20日實(shí)驗(yàn)?zāi)康牟僮飨到y(tǒng)是控制和管理計(jì)算機(jī)硬件和軟件資源的虛擬機(jī),其中的文件系統(tǒng)是對軟件和設(shè)備進(jìn)行管理的系統(tǒng),文件系統(tǒng)是操作系統(tǒng)中非常重要的一個(gè)模塊,它的實(shí)現(xiàn)占用了操作系統(tǒng)源碼的最大編碼量,其好壞也直接影響著用戶對操作系統(tǒng)的感受程度。通過對操作系統(tǒng)課程設(shè)計(jì)的實(shí)踐,進(jìn)一步加深對文件系統(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ù),在沒有-a時(shí)候不顯示隱藏文件;顯示記錄總數(shù)。2.高級要求支持對給定的目錄進(jìn)行操作,如ls/tmp;輸出結(jié)果分欄排序,每欄的寬度由這一欄最長的文件名決定,顯示的欄數(shù)還受終端顯示器的寬度影響,每一列盡可能的等寬;正確顯示文件特殊屬性suid、sgid和sticky,參見聯(lián)機(jī)幫助確保程序能處理各種情況;支持標(biāo)準(zhǔn)的ls支持選項(xiàng)-R,它的功能是遞歸地列出目錄中所有的文件包含子目錄中的文件;支持標(biāo)準(zhǔn)的ls支持選項(xiàng)-u,它會(huì)顯示出文件的最后訪問時(shí)間,如果用了-u而不用-l,會(huì)有什么結(jié)果?;當(dāng)關(guān)掉一個(gè)文件的讀權(quán)限,就不能打開這個(gè)文件來讀。如果從一個(gè)終端登錄,打開一個(gè)文件,保持文件的打開狀態(tài),然后從另外的終端登錄,去掉文件的讀權(quán)限,這時(shí)有什么事情會(huì)發(fā)生?編寫一個(gè)程序,先用open()打開一個(gè)文件,用read()讀一些內(nèi)容,調(diào)用sleep()等待20s以后,再讀一些內(nèi)容,從另外的終端,再等待的20s內(nèi)去掉文件的讀權(quán)限,這樣會(huì)有什么結(jié)果?。2.2編寫內(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為絕對路徑;當(dāng)path為目錄時(shí),顯示目錄對應(yīng)的dentrey結(jié)構(gòu)中的相關(guān)信息(可打印的信息);當(dāng)path為文件時(shí),顯示文件對應(yīng)的indoe結(jié)構(gòu)中的相關(guān)信息(可打印的信息);當(dāng)路徑錯(cuò)誤時(shí),有錯(cuò)誤提示信息。開發(fā)環(huán)境設(shè)備名稱設(shè)備類型配置類型參數(shù)LenovoG480PC機(jī)硬件配置RAM4G軟件配置Ubuntu32位測試環(huán)境設(shè)備名稱設(shè)備類型配置類型參數(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)中的超級塊遍歷系統(tǒng)中的超級塊打印文件設(shè)備號打印文件設(shè)備號打印文件系統(tǒng)名打印索引結(jié)點(diǎn)號統(tǒng)計(jì)索引結(jié)點(diǎn)計(jì)數(shù)打印索引結(jié)點(diǎn)號統(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è)備文件、管道文件這幾種類型。但鏈接文件、設(shè)備文件、管道文件都可以當(dāng)做普通文件看待,那實(shí)際也就只要區(qū)分普通文件和目錄文件這兩種了。而目錄文件的內(nèi)容就是它所包含所有文件和子目錄的一個(gè)列表,所以只要打開目錄文件并讀取對應(yīng)目錄塊里的那個(gè)列表數(shù)據(jù),就可以得到些目錄下所有文件和子目錄的名稱了。其實(shí)這個(gè)流程簡單,就是:打開目錄->讀取內(nèi)容->顯示文件名稱->關(guān)閉打開的目錄。

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)提到過,-l就是輸出文件詳細(xì)的信息

ls

-a

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

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

溫馨提示

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

評論

0/150

提交評論