操作系統(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è),還剩5頁(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、-. z . I . . r . .操作系統(tǒng)課程設(shè)計(jì)報(bào)告專(zhuān)業(yè):軟件工程*:*:馬提交日期:2017/1/10【設(shè)計(jì)目的】通過(guò)一個(gè)簡(jiǎn)單多用戶(hù)文件系統(tǒng)的設(shè)計(jì),加深理解文件系統(tǒng)的部功能和部實(shí)現(xiàn)結(jié)合數(shù)據(jù)構(gòu)造、程序設(shè)計(jì)、計(jì)算機(jī)原理等課程的知識(shí),設(shè)計(jì)一個(gè)二級(jí)文件系統(tǒng),進(jìn)一步理解操作系統(tǒng)3、通過(guò)對(duì)實(shí)際問(wèn)題的分析、設(shè)計(jì)、編程實(shí)現(xiàn),提高學(xué)生實(shí)際應(yīng)用、編程的能力【設(shè)計(jì)容】為L(zhǎng)inu*系統(tǒng)設(shè)計(jì)一個(gè)簡(jiǎn)單的二級(jí)文件系統(tǒng)。要求做到以下幾點(diǎn):1.可以實(shí)現(xiàn)以下幾條命令:login 用戶(hù)登錄dir 列目錄create 創(chuàng)立文件delete 刪除文件open 翻開(kāi)文件close 關(guān)閉文件read 讀文件write 寫(xiě)文件cd 進(jìn)

2、出目錄2列目錄時(shí)要列出文件名,物理地址,保護(hù)碼和文件長(zhǎng)度3源文件可以進(jìn)展讀寫(xiě)保護(hù)【實(shí)驗(yàn)環(huán)境】C+DevCpp【設(shè)計(jì)思路】本文件系統(tǒng)采用兩級(jí)目錄,其中第一級(jí)對(duì)應(yīng)于用戶(hù)賬號(hào),第二級(jí)對(duì)應(yīng)于用戶(hù)下的文件。另外,為了簡(jiǎn)便文件系統(tǒng)未考慮文件共享,文件系統(tǒng)平安以及管道文件與設(shè)備文件等特殊容。首先應(yīng)確定文件系統(tǒng)的數(shù)據(jù)構(gòu)造:主目錄、子目錄及活動(dòng)文件等。主目錄和子目錄都以文件的形式存放于磁盤(pán),這樣便于查找和修改。用戶(hù)創(chuàng)立的文件,可以編號(hào)存儲(chǔ)于磁盤(pán)上。如:file0,file1,file2并以編號(hào)作為物理地址,在目錄中進(jìn)展登記。構(gòu)造體:typedef struct /*the structure of OSFILE

3、*/ int fpaddr; /*file physical address*/ int flength; /*file length*/ int fmode; /*file mode:0-Read Only;1-Write Only;2-Read and Write; 3-Protect;*/ char fnameMA*NAME; /*file name*/ OSFILE; /存放重要信息typedef struct /*the structure of OSUFD*/ char ufdnameMA*NAME; /*ufd name*/ OSFILE ufdfileMA*CHILD; /*u

4、fd own file*/OSUFD; /用戶(hù)下面的文件typedef struct /*the structure of OSUFDLOGIN*/ char ufdnameMA*NAME; /*ufd name*/ char ufdpword8; /*ufd password*/ OSUFD_LOGIN;typedef struct /*file open mode*/ int ifopen; /*ifopen:0-close,1-open*/ int openmode; /*0-read only,1-write only,2-read and write,3-initial*/OSUFD

5、_OPENMODE;主要的函數(shù)說(shuō)明:void LoginF(); /*LOGIN FileSystem用戶(hù)登錄*/void DirF(); /*Dir FileSystem列目錄*/void CdF(); /*Change Dir改變目錄*/void CreateF(); /*Create File創(chuàng)立文件*/void DeleteF(); /*Delete File刪除文件*/void ModifyFM(); /*Modify FileMode修改*/void OpenF(); /*Open File翻開(kāi)文件*/void CloseF(); /*Close File關(guān)閉文件*/void Re

6、adF(); /*Read File讀文件*/void WriteF(); /*Write File寫(xiě)文件*/void QuitF(); /*Quit FileSystem離開(kāi)文件系統(tǒng)*/void help();其他重要函數(shù):void clrscr() /清屏int E*istD(char *dirname) /*Whether DirName E*ist,E*ist-i,Not E*ist-0*/ int E*istF(char *filename) /*Whether FileName E*ist,E*ist-i,Not E*ist-0*/int FindPANo() /*find out

7、 physical address num*/void SetPANo(int RorW) /*Set physical address num,0-read,1-write*/void InputPW(char *password) /*input password,use * replace*/ char *ltrim(char *str) /*remove the heading blanks.去除左空白*/char *rtrim(char *str) /*remove the trailing blanks.去除右空白*/int WriteF1() /*write file相當(dāng)于置換文

8、件*/程序流程說(shuō)明:整體流程:開(kāi)場(chǎng)LoginName/Pw/Cpw創(chuàng)建文件翻開(kāi)文件刪除文件寫(xiě)文件更改目錄修改文件屬性讀文件關(guān)閉文件退出系統(tǒng)清屏添加覆蓋完畢各局部功能流程:Open:開(kāi)場(chǎng) Open獲取文件名文件是否存在?(file0)文件名不存在獲取文件置為翻開(kāi)狀態(tài)并獲取文件模式翻開(kāi)文件成功完畢 N N YDelete:開(kāi)場(chǎng)Delete主目錄是否為空?Y確認(rèn)刪除文件在用戶(hù)目錄下!N用戶(hù)是否在用戶(hù)目錄下 N只能修改用戶(hù)目錄下的文件!Y接收刪除文件名獲取文件文件被翻開(kāi)或被保護(hù)?Y翻開(kāi)或被保護(hù)狀態(tài)不可刪除N獲取物理塊號(hào)文件向前移動(dòng)刪除文件,文件數(shù)減一刪除文件成功!完畢Write:開(kāi)場(chǎng)Write用戶(hù)是否

9、在目錄下?N文件不存在! Y獲取文件確認(rèn)該文件被翻開(kāi)文件權(quán)限為只寫(xiě)或讀寫(xiě) N文件為只讀和保護(hù),不允許寫(xiě)! Y獲取路徑0追加,1覆蓋1覆蓋0追加文件寫(xiě)入成功!完畢Close:開(kāi)場(chǎng)CloseN用戶(hù)是否在目錄下?請(qǐng)確認(rèn)要關(guān)閉的文件是在用戶(hù)目錄下! Y羅列已經(jīng)翻開(kāi)的文件獲取文件名獲取物理地址文件是否處于關(guān)閉狀態(tài)?Y該文件已被關(guān)閉 N關(guān)閉文件文件成功關(guān)閉完畢【源程序清單】Open:void OpenF() /*Open File*/ printf(nnC:%s,strupr(dirname); /顯示當(dāng)前路徑 int fcoun, i; /定義兩個(gè)整形變量 char fnameMA*NAME, fmod

10、e25; /定義兩個(gè)字符串變量 int fmod; /文件模式 printf(nPlease input FileName:); gets(fname); /接收翻開(kāi)文件的文件名 ltrim(rtrim(fname); /去除左右空白 if(E*istF(fname)0) /判斷文件是否存在 /不存在 printf(nError.文件名 %s不存在n, fname); wgetchar=1; else /存在 i=E*istD(username); /獲取用戶(hù)物理信息 for(int a=0; a ufdfilea.fname)=0) /找到文件 fcoun=a; break; ifopeni

11、fcoun.ifopen=1; /將文件狀態(tài)置為翻開(kāi)狀態(tài) printf(Please input OpenMode(0-Read Only, 1-Write Only, 2-Read and Write, 3-Protect):); /翻開(kāi)文件模式 gets(fmode); /獲取模式 fmod=atoi(fmode); /將字符串轉(zhuǎn)換為整型 ifopenifcoun.openmode=fmod; /將文件的模式置為OpenMode printf(nOpen Successed); wgetchar=1; Delete:void DeleteF() /*Delete File*/ printf

12、(nnC:%s,strupr(dirname); /顯示路徑 char fnameMA*NAME, str50, str150; /定義三個(gè)字符串變量 int i, k, j; int fpaddrno1; /記錄文件物理地址塊號(hào) if(strcmp(strupr(ltrim(rtrim(dirname), )=0) /判斷主目錄是否為空 printf(nError.請(qǐng)確認(rèn)您要?jiǎng)h除的是否在用戶(hù)目錄下!n); wgetchar=1; if(strcmp(strupr(dirname), strupr(username)!=0) /判斷用戶(hù)是否在用戶(hù)目錄下 printf(nError.您只能刪除修

13、改自己用戶(hù)目錄下的文件哦!n); wgetchar=1; else printf(nPlease input FileName:); gets(fname); /接收刪除的文件名 ltrim(rtrim(fname); /去除文件名的左右空白 i=E*istF(fname); /用戶(hù)文件位置 if(i=0) k=E*istD(username); /獲取用戶(hù)所在存儲(chǔ)位置 if(ifopenki.ifopen=1) /文件狀態(tài)處于翻開(kāi)狀態(tài),不許刪除 printf(n Error.%s 處于翻開(kāi)狀態(tài)!請(qǐng)先關(guān)閉喲!n, fname); wgetchar=1; else if(ufdk-ufdfile

14、i.fmode=3) /保護(hù)文件,不可刪除 printf(nError.%s處于被保護(hù)狀態(tài)!請(qǐng)先關(guān)閉喲!n, fname); wgetchar=1; else fpaddrno1=ufdk-ufdfilei.fpaddr; /獲取文件的物理地址塊號(hào) fpaddrnofpaddrno1=0; /回收物理地址塊號(hào) for(j=i; jufdfilej=ufdk-ufdfilej+1; /將j+1位置為j strcpy(str , c:osfilefile); itoa(fpaddrno1, str1, 10); /將整數(shù)轉(zhuǎn)化為字符串 strcat(str, str1); strcat(str, .

15、t*t);/連接 remove(str); /刪除物理文件 fcountk-; /文件個(gè)數(shù)減一 printf(n%sis deleted successfully.n, fname); wgetchar=1; else printf(nError.%s文件不存在!n, fname); /文件不存在 wgetchar=1; Write:void WriteF() /*Write File*/ printf(nnC:%s,strupr(dirname); /顯示用戶(hù)路徑 int i, k, m=0; /定義整形變量 int length; /定義長(zhǎng)度整形變量 char fnameMA*NAME;

16、/定義文件名字符串 char str255, str1255; /定義兩個(gè)字符串變量 if(strcmp(strupr(dirname), strupr(username)!=0) /判斷用戶(hù)是否在用戶(hù)目錄下 printf(nError!請(qǐng)確認(rèn)您要寫(xiě)的在用戶(hù)目錄下!n); wgetchar=1; return; printf(n請(qǐng)先翻開(kāi)文件!n); printf(Opened File(s) List:n); k=E*istD(dirname); /獲取用戶(hù)文件信息 for(i=0; iufdfilei.fname); m+; if(m%4 = 0 & m!=0) /每創(chuàng)立4個(gè)文件換一行 pr

17、intf(n); printf(n%d 文件已經(jīng)翻開(kāi)啦!n, m); if(m = 0) wgetchar=1; if(m!=0) /創(chuàng)立文件 printf(nPlease input FileName:); gets(fname); /接收文件名 ltrim(rtrim(fname); /去除左右空白 i=E*istF(fname); /獲取文件物理地址 if(i=0) /文件存在 if(ifopenki.ifopen=1) /文件處于翻開(kāi)狀態(tài) if(ifopenki.openmode=1 | ifopenki.openmode=2) /文件權(quán)限是只寫(xiě)或讀寫(xiě) itoa(ufdk-ufdfil

18、ei.fpaddr, str, 10); /獲取文件路徑 strcpy(str1, file); strcat(str1, str); strcpy(str, c:osfilefile); strcat(str, str1); strcat(str, .t*t); /文件路徑char str23;int choice=3;strcpy(str2,ab);printf(You can choise 0-Covered W 1-Additonal W:); /選擇追加還是覆蓋scanf( %d, &choice);if(choice = 0) /0-覆蓋strcpy(str2, wb); fp_f

19、ile=fopen(str, str2); /翻開(kāi)文件 length=WriteF1(); ufdk-ufdfilei.flength=ufdk-ufdfilei.flength+length; /修改文件長(zhǎng)度if(choice = 0)ufdk-ufdfilei.flength=length; printf(nnYou have write file successfully!);fclose(fp_file); /關(guān)閉文件 wgetchar=0; else if(ifopenki.openmode=0) /文件處于只讀狀態(tài),不允許寫(xiě) printf(nError.%s 文件以只讀狀態(tài)翻開(kāi),不

20、允許寫(xiě)!n, fname); wgetchar=1; else printf(nError.%s 文件處于關(guān)閉狀態(tài),請(qǐng)先翻開(kāi)!n, fname); wgetchar=1; else printf(nError.%s 文件不存在!n, fname); /文件不存在 wgetchar=1; Close:void CloseF() /*Close File*/ printf(nnC:%s,strupr(dirname); /顯示路徑 char fnameMA*NAME; /定義字符串變量 int i, k, n=0; if(strcmp(strupr(dirname), strupr(usernam

21、e)!=0) /關(guān)閉用戶(hù)文件需在用戶(hù)目錄下 printf(nError!請(qǐng)確認(rèn)您要關(guān)閉的是在用戶(hù)目錄下!n); else printf(nnOpened File(s) List:n); /羅列已處于翻開(kāi)的文件k=E*istD(dirname);for(i=0;iufdfilei.fname);n+;if(n%4=0)&(n!=0) printf(n);printf(n%d 文件已被翻開(kāi)!n,n);if (n=0) wgetchar=1; printf(nPlease input FileName:); gets(fname); /接收關(guān)閉文件的文件名 ltrim(rtrim(fname); /除去首尾空格 i=E*istF(fname); /獲取文件物理地址 if(i = 0) k=E*istD(username); /獲取用戶(hù)文件信息 if(ifopenki.ifopen=0) /文件處于關(guān)閉狀態(tài) printf(nError!%s文件已經(jīng)被關(guān)閉!n, fname); else /將文件關(guān)閉 ifopenki.ifopen=

溫馨提示

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