操作系統(tǒng)課程設(shè)計(jì)Linux二級(jí)文件系統(tǒng)設(shè)計(jì).doc
《操作系統(tǒng)課程設(shè)計(jì)Linux二級(jí)文件系統(tǒng)設(shè)計(jì).doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《操作系統(tǒng)課程設(shè)計(jì)Linux二級(jí)文件系統(tǒng)設(shè)計(jì).doc(15頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
操作系統(tǒng)課程設(shè)計(jì)報(bào)告 專 業(yè):軟件工程 學(xué) 號(hào): 姓 名:馬 提交日期:2017/1/10 【設(shè)計(jì)目的】 1、 通過(guò)一個(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、通過(guò)對(duì)實(shí)際問(wèn)題的分析、設(shè)計(jì)、編程實(shí)現(xiàn),提高學(xué)生實(shí)際應(yīng)用、編程的能力 【設(shè)計(jì)內(nèi)容】 為L(zhǎng)inux系統(tǒng)設(shè)計(jì)一個(gè)簡(jiǎn)單的二級(jí)文件系統(tǒng)。要求做到以下幾點(diǎn): 1.可以實(shí)現(xiàn)下列幾條命令: login 用戶登錄 dir 列目錄 create 創(chuàng)建文件 delete 刪除文件 open 打開文件 close 關(guān)閉文件 read 讀文件 write 寫文件 cd 進(jìn)出目錄 2.列目錄時(shí)要列出文件名,物理地址,保護(hù)碼和文件長(zhǎng)度 3.源文件可以進(jìn)行讀寫保護(hù) 【實(shí)驗(yàn)環(huán)境】 C++ DevCpp 【設(shè)計(jì)思路】 本文件系統(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)確定文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu):主目錄、子目錄及活動(dòng)文件等。主目錄和子目錄都以文件的形式存放于磁盤,這樣便于查找和修改。用戶創(chuàng)建的文件,可以編號(hào)存儲(chǔ)于磁盤上。如:file0,file1,file2…并以編號(hào)作為物理地址,在目錄中進(jìn)行登記。 結(jié)構(gòu)體: typedef struct /*the structure of OSFILE*/ { 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 fname[MAXNAME]; /*file name*/ } OSFILE; //存放重要信息 typedef struct /*the structure of OSUFD*/ { char ufdname[MAXNAME]; /*ufd name*/ OSFILE ufdfile[MAXCHILD]; /*ufd own file*/ }OSUFD; //用戶下面的文件 typedef struct /*the structure of OSUFDLOGIN*/ { char ufdname[MAXNAME]; /*ufd name*/ char ufdpword[8]; /*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_OPENMODE; 主要的函數(shù)說(shuō)明: void LoginF(); /*LOGIN FileSystem用戶登錄*/ 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打開文件*/ void CloseF(); /*Close File關(guān)閉文件*/ void ReadF(); /*Read File讀文件*/ void WriteF(); /*Write File寫文件*/ void QuitF(); /*Quit FileSystem離開文件系統(tǒng)*/ void help(); 其他重要函數(shù): void clrscr() //清屏 int ExistD(char *dirname) /*Whether DirName Exist,Exist-i,Not Exist-0*/ int ExistF(char *filename) /*Whether FileName Exist,Exist-i,Not Exist-0*/ int FindPANo() /*find out 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)于置換文件*/ 程序流程說(shuō)明: 整體流程: 開始 Login(Name/Pw/Cpw) 創(chuàng) 建 文件 打開文件 刪除文件 寫 文件 更改目錄 修改文件屬性 讀文件 關(guān)閉文件 退出系統(tǒng) 清屏 添加 覆蓋 結(jié)束 各部分功能流程: Open: N N Y Delete: 開始 Delete 主目錄是否為空? Y 確認(rèn)刪除文件在用戶目錄下! N 用戶是否在用戶目錄下? N 只能修改用戶目錄下的文件! Y 接收刪除文件名 獲取文件 文件被打開或被保護(hù)? Y 打開或被保護(hù)狀態(tài)不可刪除 N 獲取物理塊號(hào) 文件向前移動(dòng) 刪除文件,文件數(shù)減一 刪除文件成功! 結(jié)束 Write: 開始 Write 用戶是否在目錄下? N 文件不存在! Y 獲取文件 確認(rèn)該文件被打開 文件權(quán)限為只寫或讀寫 N 文件為只讀和保護(hù),不允許寫! Y 獲取路徑 0—追加,1—覆蓋? 1 覆蓋 0 追加 文件寫入成功! 結(jié)束 Close: 開始 Close N 用戶是否在目錄下? 請(qǐng)確認(rèn)要關(guān)閉的文件是在用戶目錄下! Y 羅列已經(jīng)打開的文件 獲取文件名 獲取物理地址 文件是否處于關(guān)閉狀態(tài)? Y 該文件已被關(guān)閉 N 關(guān)閉文件 文件成功關(guān)閉 結(jié)束 【源程序清單】 Open: void OpenF() /*Open File*/ { printf("\n\nC:\\%s>",strupr(dirname)); //顯示當(dāng)前路徑 int fcoun, i; //定義兩個(gè)整形變量 char fname[MAXNAME], fmode[25]; //定義兩個(gè)字符串變量 int fmod; //文件模式 printf("\nPlease input FileName:"); gets(fname); //接收打開文件的文件名 ltrim(rtrim(fname)); //去除左右空白 if(ExistF(fname)<0) //判斷文件是否存在 { //不存在 printf("\nError.文件名 \%s\不存在\n", fname); wgetchar=1; } else { //存在 i=ExistD(username); //獲取用戶物理信息 for(int a=0; a < fcount[i]; a++) //遍歷用戶文件 { if(strcmp(fname, ufd[i]->ufdfile[a].fname)==0) //找到文件 { fcoun=a; break; } } ifopen[i][fcoun].ifopen=1; //將文件狀態(tài)置為打開狀態(tài) printf("Please input OpenMode(0-Read Only, 1-Write Only, 2-Read and Write, 3-Protect):"); //打開文件模式 gets(fmode); //獲取模式 fmod=atoi(fmode); //將字符串轉(zhuǎn)換為整型 ifopen[i][fcoun].openmode=fmod; //將文件的模式置為OpenMode printf("\nOpen Successed"); wgetchar=1; } } Delete: void DeleteF() /*Delete File*/ { printf("\n\nC:\\%s>",strupr(dirname)); //顯示路徑 char fname[MAXNAME], str[50], str1[50]; //定義三個(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除的是否在用戶目錄下!\n"); wgetchar=1; } if(strcmp(strupr(dirname), strupr(username))!=0){ //判斷用戶是否在用戶目錄下 printf("\nError.您只能刪除修改自己用戶目錄下的文件哦!\n"); wgetchar=1; } else { printf("\nPlease input FileName:"); gets(fname); //接收刪除的文件名 ltrim(rtrim(fname)); //去除文件名的左右空白 i=ExistF(fname); //用戶文件位置 if(i>=0){ k=ExistD(username); //獲取用戶所在存儲(chǔ)位置 if(ifopen[k][i].ifopen==1){ //文件狀態(tài)處于打開狀態(tài),不許刪除 printf("\n Error.\%s\ 處于打開狀態(tài)!請(qǐng)先關(guān)閉喲!\n", fname); wgetchar=1; } else { if(ufd[k]->ufdfile[i].fmode==3){ //保護(hù)文件,不可刪除 printf("\nError.\%s\處于被保護(hù)狀態(tài)!請(qǐng)先關(guān)閉喲!\n", fname); wgetchar=1; } else { fpaddrno1=ufd[k]->ufdfile[i].fpaddr; //獲取文件的物理地址塊號(hào) fpaddrno[fpaddrno1]=0; //回收物理地址塊號(hào) for(j=i; j- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 操作系統(tǒng) 課程設(shè)計(jì) Linux 二級(jí) 文件系統(tǒng) 設(shè)計(jì)
鏈接地址:http://m.hcyjhs8.com/p-8789747.html