操作系統(tǒng)課程設(shè)計Linux二級文件系統(tǒng)設(shè)計.doc
《操作系統(tǒng)課程設(shè)計Linux二級文件系統(tǒng)設(shè)計.doc》由會員分享,可在線閱讀,更多相關(guān)《操作系統(tǒng)課程設(shè)計Linux二級文件系統(tǒng)設(shè)計.doc(15頁珍藏版)》請在裝配圖網(wǎng)上搜索。
操作系統(tǒng)課程設(shè)計報告 專 業(yè):軟件工程 學 號: 姓 名:馬 提交日期:2017/1/10 【設(shè)計目的】 1、 通過一個簡單多用戶文件系統(tǒng)的設(shè)計,加深理解文件系統(tǒng)的內(nèi)部功能和內(nèi)部實現(xiàn) 2、 結(jié)合數(shù)據(jù)結(jié)構(gòu)、程序設(shè)計、計算機原理等課程的知識,設(shè)計一個二級文件系統(tǒng),進一步理解操作系統(tǒng) 3、通過對實際問題的分析、設(shè)計、編程實現(xiàn),提高學生實際應(yīng)用、編程的能力 【設(shè)計內(nèi)容】 為Linux系統(tǒng)設(shè)計一個簡單的二級文件系統(tǒng)。要求做到以下幾點: 1.可以實現(xiàn)下列幾條命令: login 用戶登錄 dir 列目錄 create 創(chuàng)建文件 delete 刪除文件 open 打開文件 close 關(guān)閉文件 read 讀文件 write 寫文件 cd 進出目錄 2.列目錄時要列出文件名,物理地址,保護碼和文件長度 3.源文件可以進行讀寫保護 【實驗環(huán)境】 C++ DevCpp 【設(shè)計思路】 本文件系統(tǒng)采用兩級目錄,其中第一級對應(yīng)于用戶賬號,第二級對應(yīng)于用戶帳號下的文件。另外,為了簡便文件系統(tǒng)未考慮文件共享,文件系統(tǒng)安全以及管道文件與設(shè)備文件等特殊內(nèi)容。 首先應(yīng)確定文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu):主目錄、子目錄及活動文件等。主目錄和子目錄都以文件的形式存放于磁盤,這樣便于查找和修改。用戶創(chuàng)建的文件,可以編號存儲于磁盤上。如:file0,file1,file2…并以編號作為物理地址,在目錄中進行登記。 結(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ù)說明: 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相當于置換文件*/ 程序流程說明: 整體流程: 開始 Login(Name/Pw/Cpw) 創(chuàng) 建 文件 打開文件 刪除文件 寫 文件 更改目錄 修改文件屬性 讀文件 關(guān)閉文件 退出系統(tǒng) 清屏 添加 覆蓋 結(jié)束 各部分功能流程: Open: N N Y Delete: 開始 Delete 主目錄是否為空? Y 確認刪除文件在用戶目錄下! N 用戶是否在用戶目錄下? N 只能修改用戶目錄下的文件! Y 接收刪除文件名 獲取文件 文件被打開或被保護? Y 打開或被保護狀態(tài)不可刪除 N 獲取物理塊號 文件向前移動 刪除文件,文件數(shù)減一 刪除文件成功! 結(jié)束 Write: 開始 Write 用戶是否在目錄下? N 文件不存在! Y 獲取文件 確認該文件被打開 文件權(quán)限為只寫或讀寫 N 文件為只讀和保護,不允許寫! Y 獲取路徑 0—追加,1—覆蓋? 1 覆蓋 0 追加 文件寫入成功! 結(jié)束 Close: 開始 Close 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)); //顯示當前路徑 int fcoun, i; //定義兩個整形變量 char fname[MAXNAME], fmode[25]; //定義兩個字符串變量 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]; //定義三個字符串變量 int i, k, j; int fpaddrno1; //記錄文件物理地址塊號 if(strcmp(strupr(ltrim(rtrim(dirname))), "")==0){ //判斷主目錄是否為空 printf("\nError.請確認您要刪除的是否在用戶目錄下!\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); //獲取用戶所在存儲位置 if(ifopen[k][i].ifopen==1){ //文件狀態(tài)處于打開狀態(tài),不許刪除 printf("\n Error.\%s\ 處于打開狀態(tài)!請先關(guān)閉喲!\n", fname); wgetchar=1; } else { if(ufd[k]->ufdfile[i].fmode==3){ //保護文件,不可刪除 printf("\nError.\%s\處于被保護狀態(tài)!請先關(guān)閉喲!\n", fname); wgetchar=1; } else { fpaddrno1=ufd[k]->ufdfile[i].fpaddr; //獲取文件的物理地址塊號 fpaddrno[fpaddrno1]=0; //回收物理地址塊號 for(j=i; j- 1.請仔細閱讀文檔,確保文檔完整性,對于不預覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 操作系統(tǒng) 課程設(shè)計 Linux 二級 文件系統(tǒng) 設(shè)計
鏈接地址:http://m.hcyjhs8.com/p-8789747.html