操作系統(tǒng)課程設(shè)計(jì)報(bào)告:Linux二級(jí)文件系統(tǒng)設(shè)計(jì)_第1頁(yè)
操作系統(tǒng)課程設(shè)計(jì)報(bào)告:Linux二級(jí)文件系統(tǒng)設(shè)計(jì)_第2頁(yè)
操作系統(tǒng)課程設(shè)計(jì)報(bào)告:Linux二級(jí)文件系統(tǒng)設(shè)計(jì)_第3頁(yè)
操作系統(tǒng)課程設(shè)計(jì)報(bào)告:Linux二級(jí)文件系統(tǒng)設(shè)計(jì)_第4頁(yè)
操作系統(tǒng)課程設(shè)計(jì)報(bào)告:Linux二級(jí)文件系統(tǒng)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、操作系統(tǒng)課程設(shè)計(jì)報(bào)告操作系統(tǒng)課程設(shè)計(jì)報(bào)告專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù)學(xué) 號(hào):*姓 名:* 提交日期:2013-3-8【設(shè)計(jì)目的】(1)本實(shí)驗(yàn)的目的是通過一個(gè)簡(jiǎn)單多用戶文件系統(tǒng)的設(shè)計(jì),加深理解文件系統(tǒng)的內(nèi)部功能和內(nèi)部實(shí)現(xiàn)。(2)結(jié)合數(shù)據(jù)結(jié)構(gòu)、程序設(shè)計(jì)、計(jì)算機(jī)原理等課程的知識(shí),設(shè)計(jì)一個(gè)二級(jí)文件系統(tǒng),進(jìn)一步理解操作系統(tǒng)。(3)通過分對(duì)實(shí)際問題的分析、設(shè)計(jì)、編程實(shí)現(xiàn),提高學(xué)生實(shí)際應(yīng)用、編程的能力【設(shè)計(jì)內(nèi)容】二級(jí)文件系統(tǒng)設(shè)計(jì)【實(shí)驗(yàn)環(huán)境】c+/vc+【相關(guān)知識(shí)綜述】1.背景知識(shí)(1)外存管理文件系統(tǒng)是一個(gè)含有大量的文件及其屬性,對(duì)文件進(jìn)行操作、管理的軟件,以及向用戶提供使用文件的接口的一個(gè)集合。在邏輯上它的層

2、次結(jié)構(gòu)是這樣的:文件系統(tǒng)接口對(duì)對(duì)象的操作和管理的軟件集合邏輯文件系統(tǒng)基本i/o管理程序(文件組織模塊)基本文件系統(tǒng)(物理i/o層)i/o控制層(設(shè)備驅(qū)動(dòng)程序)對(duì)象及其屬性說明作為產(chǎn)品的操作系統(tǒng)有各自的文件系統(tǒng)。比如ms的windows系列使用的是fat16、fat32或ntfs的文件系統(tǒng)、linux使用的是ext2、ext3文件系統(tǒng)等等。(2)linux的ext2文件系統(tǒng)linux使用一個(gè)叫虛擬文件系統(tǒng)的技術(shù)從而可以支持多達(dá)幾十種的不同文件系統(tǒng),而ext2是linux自己的文件系統(tǒng)。它有幾個(gè)重要的數(shù)據(jù)結(jié)構(gòu),一個(gè)是超級(jí)塊,用來描述目錄和文件在磁盤上的物理位置、文件大小和結(jié)構(gòu)等信息。inode也是

3、一個(gè)重要的數(shù)據(jù)結(jié)構(gòu)。文件系統(tǒng)中的每個(gè)目錄和文件均由一個(gè)inode描述。它包含:文件模式(類型和存取權(quán)限)、數(shù)據(jù)塊位置等信息。一個(gè)文件系統(tǒng)除了重要的數(shù)據(jù)結(jié)構(gòu)之外,還必須為用戶提供有效的接口操作。比如ext2提供的open/close接口操作。(3)用內(nèi)存來模擬外存真正的文件系統(tǒng)對(duì)外存進(jìn)行管理,涉及到許多硬件、設(shè)備管理方面的底層技術(shù),一方面這些技術(shù)不屬于操作系統(tǒng)核心內(nèi)容,一方面過多的內(nèi)容不免造成實(shí)驗(yàn)者顧此失彼,所以這里推薦一種使用內(nèi)存來模擬外存的方式,可以跳過這些硬件技術(shù)而直接把精力放在數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)和操作算法設(shè)計(jì)上面。 假定pinode是一個(gè)指向inode結(jié)構(gòu)的指針,而且它已經(jīng)放入的需要放入的數(shù)值

4、了,現(xiàn)在需要將其寫入到特定位置??捎萌缦麓a:fd=fopen(“filesystem”,”w+b”); /fd是file指針類型,w便是寫方式,b表示二進(jìn)制fseek(fd, specific_area,seek_set);/ fd是文件指針;specific_area為整形,/ 為需要入pinode的位置fwrite(pinode, sizeof(inode), 1,fd); / 寫入pinode信息2、原理算法本文件系統(tǒng)采用兩級(jí)目錄,其中第一級(jí)對(duì)應(yīng)于用戶賬號(hào),第二級(jí)對(duì)應(yīng)于用戶帳號(hào)下的文件。另外,為了簡(jiǎn)便文件系統(tǒng)未考慮文件共享,文件系統(tǒng)安全以及管道文件與設(shè)備文件等特殊內(nèi)容。首先應(yīng)確定文件系

5、統(tǒng)的數(shù)據(jù)結(jié)構(gòu):主目錄、子目錄及活動(dòng)文件等。主目錄和子目錄都以文件的形式存放于磁盤,這樣便于查找和修改。用戶創(chuàng)建的文件,可以編號(hào)存儲(chǔ)于磁盤上。如:file0,file1,file2并以編號(hào)作為物理地址,在目錄中進(jìn)行登記。【設(shè)計(jì)思路】1、數(shù)據(jù)結(jié)構(gòu)#define maxname 25 /*mfdname,ufdname,filename的最大長(zhǎng)度*/#define maxchild 50 /*最大的子文件個(gè)數(shù)*/#define max (maxchild*maxchild) /*物理地址計(jì)數(shù)fpaddrno的最大長(zhǎng)度*/typedef struct /*結(jié)構(gòu)體osfile(文件)*/int fpad

6、dr; /*文件的物理地址號(hào)0,1,2.*/int flength; /*文件的長(zhǎng)度*/int fmode; /*文件模式:0-read only;1-write only;2-read and write;3-protrcted;*/char fnamemaxname; /*文件名*/ osfile;typedef struct /*結(jié)構(gòu)體osufd(用戶目錄)*/char ufdnamemaxname; /*ufd的名字*/osfile ufdfilemaxchild; /*ufd自己的文件*/osufd;typedef struct /*結(jié)構(gòu)體osufdlogin(用戶注冊(cè))*/char

7、 ufdnamemaxname; /*ufd的名字*/char ufdpword8; /*ufd的密碼*/ osufd_login;typedef struct /*文件打開模式*/int ifopen; /*打開情況:0-close,1-open*/int openmode; /*讀寫模式0-read only,1-write only,2-read and write*/osufd_openmode;osufd *ufdmaxchild; /*ufd及ufd自己的文件(指針型)*/osufd_login ufd_lp; /*建立了一個(gè)osufd_login型的 ufd_lp*/int uc

8、ount=0; /*mfd的ufd的個(gè)數(shù)*/int fcountmaxchild; /*ufd自己的文件個(gè)數(shù)*/int loginsuc=0; /*是否成功登陸,1成功*/char usernamemaxname; /*記錄注冊(cè)的用戶名*/char dirnamemaxname;/*記錄文件當(dāng)前的目錄*/int fpaddrnomax; /*記錄文件的物理地址num*/osufd_openmode ifopenmaxchildmaxchild; /*創(chuàng)建一個(gè)osufd_openmode型的數(shù)組用于記錄每個(gè)文件的打開情況和讀寫模式*/file *fp_mfd,*fp_ufd,*fp_file_p

9、,*fp_file; /*定義file * 型的文件指針,用于讀文件*/2、主要的函數(shù)說明void loginf() /*用戶注冊(cè)登錄*/void dirf() /*顯示文件系統(tǒng)的所有文件*/void cdf() /*改變路徑*/void createf() /*創(chuàng)建文件*/void deletef() /*刪除文件*/void modifyfm() /*改變文件模式*/void openf() /*打開文件*/void closef() /*關(guān)閉文件*/void readf() /*讀文件*/void writef() /*寫文件*/void quitf() /*退出文件系統(tǒng)*/void c

10、lrscr() /*清屏*/void help(void) /*幫助*/其他重要輔助函數(shù):char *rtrim(char *str) /*移除最右邊的空格*/char *ltrim(char *str) /*移除最左邊的空格*/void setpano(int rorw) /*設(shè)置物理地址號(hào)(表示該地址號(hào)是否被用了0-未用,1-已用),rorw是0-read,1-write*/void inputpw(char *password) /*輸入密碼并使用*代替*/int existd(char *dirname) /*目錄是否存在,存在返回第i個(gè),不存在返回0*/int existf(char

11、 *filename) /*文件是否存在,返回返回第i個(gè),不存在返回0*/int findpano() /*找出要分配的物理地址號(hào)*/int writef1() /*創(chuàng)建文件中的寫文件*/3、程序流程設(shè)計(jì):對(duì)于自己實(shí)現(xiàn)的4個(gè)功能:(1)open():進(jìn)入open()當(dāng)前用戶名和當(dāng)前目錄相同?ny請(qǐng)轉(zhuǎn)到當(dāng)前用戶名目錄下當(dāng)前文件存在?(文件號(hào)0)輸入要打開的文件名,并查找對(duì)應(yīng)的文件號(hào)y該文件不存在n確定當(dāng)前用戶的用戶號(hào)該文件已經(jīng)打開?n該文件已經(jīng)打開,不用再打開y該文件可以被打開?(不是protect型的)y該文件是protect的,不能打開打開文件n返回主函數(shù)(2)close():進(jìn)入close

12、()當(dāng)前用戶名和當(dāng)前目錄相同?ny請(qǐng)轉(zhuǎn)到當(dāng)前用戶名目錄下當(dāng)前文件存在?(文件號(hào)0)輸入要關(guān)閉的文件名,并查找對(duì)應(yīng)的文件號(hào)y該文件不存在n確定當(dāng)前用戶的用戶號(hào)該文件是關(guān)閉的?n該文件未打開,不用關(guān)閉yy關(guān)閉文件返回主函數(shù)(3)write():進(jìn)入write()當(dāng)前用戶名和當(dāng)前目錄相同?ny請(qǐng)轉(zhuǎn)到當(dāng)前用戶名目錄下有打開的文件?輸入要寫入的文件名,并查找對(duì)應(yīng)的文件號(hào)無(wú)已經(jīng)打開的文件提示必須先打開,并顯示出已經(jīng)打開的文件列表ny當(dāng)前文件存在?(文件號(hào)0)該文件不存在ny該文件已經(jīng)打開?該文件未打開,不能寫ny該文件可以被寫入?(是可寫或讀寫模式)該文件是制度模式或保護(hù)模式n確定文件路徑寫入內(nèi)容到文件中

13、記錄文件長(zhǎng)度返回主函數(shù)(4)delete進(jìn)入delete()當(dāng)前用戶名和當(dāng)前目錄相同?ny請(qǐng)轉(zhuǎn)到當(dāng)前用戶名目錄下當(dāng)前文件存在?(文件號(hào)0)輸入要?jiǎng)h除的文件名,并查找對(duì)應(yīng)的文件號(hào)y該文件不存在n確定當(dāng)前用戶的用戶號(hào)該文件可以被刪除?(不是protect型的)該文件是protect的,不能打開ny該文件已經(jīng)打開?該文件已經(jīng)打開,不能刪除yn刪除文件確定文件路徑刪除的后面的文件向前移該用戶的文件總數(shù)-1返回主函數(shù)把刪除后的地址號(hào)置為未用【源程序清單】open,close,write、,delete函數(shù)代碼如下:void openf() /*打開文件*/ char fnamemaxname;int i

14、,k;if (strcmp(strupr(dirname),strupr(username)!=0) /*用戶名和當(dāng)前目錄不同*/printf(nerror! you can only open file in yourself dir.n);else /*用戶名和當(dāng)前目錄相同了*/printf(nplease input filename:);gets(fname);ltrim(rtrim(fname); /*去除空格*/i=existf(fname); /*文件是否存在并返回第幾個(gè)文件號(hào)*/if (i=0) /*文件存在*/ k=existd(username); /*根據(jù)用戶名確定用戶號(hào)

15、*/if(ifopenki.ifopen=1) /*該文件已經(jīng)打開*/printf(nerror. file %s had been opened, it can not be opened again.n,fname);else /*該文件還未打開*/if(ufdk-ufdfilei.fmode=0)|(ufdk-ufdfilei.fmode=1)|(ufdk-ufdfilei.fmode=2) /*該文件的屬性是可以被打開的*/ifopenki.ifopen=1; /*打開,將ifopen設(shè)為1*/ifopenki.openmode=(ufdk-ufdfilei.fmode); /*將if

16、open.openmode設(shè)為該文件的模式*/printf(%s has been opened successfully!,fname);else /*保護(hù)模式的文件不能被打開*/printf(n%s is a protected file, it can not be opened.,fname); else /*文件不存在*/printf(nerror.%s dose not exist.n,fname);void closef() /*關(guān)閉文件*/char fnamemaxname;int i,k;if (strcmp(strupr(dirname),strupr(username)!

17、=0) /*用戶名和當(dāng)前目錄不同*/printf(nerror.you can only modify filemode in yourself dir.n);else /*用戶名和當(dāng)前目錄相同了*/printf(nplease input filename:);gets(fname);ltrim(rtrim(fname); /*去除空格*/i=existf(fname); /*文件是否存在并返回第幾個(gè)文件號(hào)*/if (i=0) /*文件存在*/k=existd(username); /*根據(jù)用戶名確定用戶號(hào)*/if(ifopenki.ifopen=0) /*該文件未打開*/printf(ne

18、rror. %s has been closed. you can not close it again.n,fname);else /*該文件已打開*/ifopenki.ifopen=0; /*關(guān)閉,置為0*/ifopenki.openmode=4; /*修改打開模式為初始的打開模式*/printf(%s has been closed successfully!,fname);else /*文件不存在*/printf(nerror. %s dose not exist.n,fname);void deletef() /*刪除文件*/char fnamemaxname;int i,k,x;c

19、har str255,str1255;if (strcmp(strupr(dirname),strupr(username)!=0) /*用戶名和當(dāng)前目錄不同*/printf(nerror. you can only delete file in yourself dir.n);else /*用戶名和當(dāng)前目錄相同了*/printf(nplease input filename:);gets(fname);ltrim(rtrim(fname); /*去除空格*/i=existf(fname); /*文件是否存在并返回第幾個(gè)文件號(hào)*/if (i=0) /*文件存在*/ k=existd(usern

20、ame); /*根據(jù)用戶名確定用戶號(hào)*/if(ufdk-ufdfilei.fmode=3) /*該文件的屬性是protect的*/printf(n%s is a protected file, it can not be deleted.,fname);else /*該文件的屬性不是protect的可以刪除*/if(ifopenki.ifopen=1) /*該文件已打開不能刪*/printf(n%s has been opened, it can not be deleted.,fname);else /*關(guān)閉的可以刪*/itoa(ufdk-ufdfilei.fpaddr,str,10); /

21、*itoa是將整型轉(zhuǎn)換為字符串,存入str中,10代表10進(jìn)制*/strcpy(str1,file); strcat(str1,str); /*str連到str1后*/strcpy(str,c:osfilefile); /*文件目錄拷到str中*/ strcat(str,str1); /*把str1連入,最后str為c:osfilefilefilex*/x =_unlink(str); /*刪除路徑為str的文件,刪除成功返回0,否則返回-1*/fpaddrnoufdk-ufdfilei.fpaddr=0;/*把刪除后的地址號(hào)置為未用*/ for(i;iufdfilei=ufdk-ufdfil

22、ei+1; /*刪除的文件后面的文件向前移*/fcountk-; /*刪除后第k個(gè)用戶的文件數(shù)減1*/printf(%s has been deleted successfully!,fname); else /*文件不存在*/printf(nerror. %s dose not exist.n,fname); void writef() /*寫文件*/char str50,str150;int i,k,n=0;char fnamemaxname;char *rtrim(char *str); char *ltrim(char *str); /*移除空格*/int existf(char *f

23、ilename); /*文件名是否存在返回文件號(hào),exist-i,not exist-0*/int existd(char *dirname);if (strcmp(strupr(ltrim(rtrim(dirname),)=0) /*如果當(dāng)前目錄為空(主目錄)*/printf(nerror.please convert to ufd dir before write.n); /*必須轉(zhuǎn)到用戶目錄下*/return;elseprintf(ncaution:open file firstn); printf(opened file(s) list:n);k=existd(dirname); /*

24、第幾個(gè)用戶*/for(i=0;iufdfilei.fname); /*輸出這個(gè)已打開的可讀的文件名*/n+;if(n%4=0)&(n!=0) printf(n); /*4個(gè)換行*/printf(n%d files openned.n,n);if (n=0) /*無(wú)打開的文件,返回*/return;if(n!=0) /*有打開的文件*/printf(nplease input filename:);gets(fname);ltrim(rtrim(fname); /*移除空格*/i=existf(fname); /*第幾個(gè)文件號(hào)*/if(i=0) /*文件存在*/if(ifopenki.ifopen=1) /*已打開*/if(ifopenki.openmode=1) |(ifopenki.openmode=2) /*屬性可以寫*/itoa(ufdk-ufdfilei.fpaddr,str,10); /*將文件號(hào)整形轉(zhuǎn)為字符串*/strcpy(str1,file);strcat(str1,str);strcpy(str,c:osfilefile); strcat(str,str1); /*str形成路徑c:osfilefilefilex*/fp_file=fopen(str,wb+); /*以寫二進(jìn)制方式(并且先清除已有

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論