




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
實用標準文案PAGE精彩文檔操作系統(tǒng)課程設(shè)計報告操作系統(tǒng)課程設(shè)計報告專業(yè):軟件工程學號:姓名:馬提交日期:2017/1/10【設(shè)計目的】通過一個簡單多用戶文件系統(tǒng)的設(shè)計,加深理解文件系統(tǒng)的內(nèi)部功能和內(nèi)部實現(xiàn)結(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)體:typedefstruct/*thestructureofOSFILE*/{intfpaddr;/*filephysicaladdress*/intflength;/*filelength*/intfmode;/*filemode:0-ReadOnly;1-WriteOnly;2-ReadandWrite;3-Protect;*/charfname[MAXNAME];/*filename*/}OSFILE;//存放重要信息typedefstruct/*thestructureofOSUFD*/{charufdname[MAXNAME];/*ufdname*/OSFILEufdfile[MAXCHILD];/*ufdownfile*/}OSUFD;//用戶下面的文件typedefstruct/*thestructureofOSUFD'LOGIN*/{charufdname[MAXNAME];/*ufdname*/charufdpword[8];/*ufdpassword*/}OSUFD_LOGIN;typedefstruct/*fileopenmode*/{intifopen;/*ifopen:0-close,1-open*/intopenmode;/*0-readonly,1-writeonly,2-readandwrite,3-initial*/}OSUFD_OPENMODE;主要的函數(shù)說明:voidLoginF();/*LOGINFileSystem用戶登錄*/voidDirF();/*DirFileSystem列目錄*/voidCdF();/*ChangeDir改變目錄*/voidCreateF();/*CreateFile創(chuàng)建文件*/voidDeleteF();/*DeleteFile刪除文件*/ voidModifyFM();/*ModifyFileMode修改*/voidOpenF();/*OpenFile打開文件*/voidCloseF();/*CloseFile關(guān)閉文件*/voidReadF();/*ReadFile讀文件*/voidWriteF();/*WriteFile寫文件*/voidQuitF();/*QuitFileSystem離開文件系統(tǒng)*/voidhelp();其他重要函數(shù):voidclrscr()//清屏intExistD(char*dirname)/*WhetherDirNameExist,Exist-i,NotExist-0*/intExistF(char*filename)/*WhetherFileNameExist,Exist-i,NotExist-0*/intFindPANo()/*findoutphysicaladdressnum*/voidSetPANo(intRorW)/*Setphysicaladdressnum,0-read,1-write*/voidInputPW(char*password)/*inputpassword,use'*'replace*/char*ltrim(char*str)/*removetheheadingblanks.去除左空白*/char*rtrim(char*str)/*removethetrailingblanks.去除右空白*/intWriteF1()/*writefile相當于置換文件*/程序流程說明:整體流程:開始開始LoginLogin(Name/Pw/Cpw)創(chuàng)建文件打開文件刪除文件寫文件更改目錄修改文件屬性讀文件創(chuàng)建文件打開文件刪除文件寫文件更改目錄修改文件屬性讀文件關(guān)閉文件退出系統(tǒng)清屏添加覆蓋添加覆蓋結(jié)束結(jié)束各部分功能流程:Open:開始開始Open獲取文件名文件是否存在?(file>0)文件名不存在獲取文件置為打開狀態(tài)并獲取文件模式打開文件成功結(jié)束N N YDelete:開始開始DeleteDelete主目錄是否為空?主目錄是否為空?Y確認刪除文件在用戶目錄下!確認刪除文件在用戶目錄下!N用戶是否在用戶目錄下用戶是否在用戶目錄下?N只能修改用戶目錄下的文件!只能修改用戶目錄下的文件!Y接收刪除文件名接收刪除文件名獲取文件獲取文件文件被打開或被保護?文件被打開或被保護?Y 打開或被保護狀態(tài)不可刪除打開或被保護狀態(tài)不可刪除N獲取物理塊號獲取物理塊號文件向前移動文件向前移動刪除文件,文件數(shù)減一刪除文件,文件數(shù)減一刪除文件成功!刪除文件成功!結(jié)束結(jié)束Write:開始開始WriteWrite用戶是否在目錄下?用戶是否在目錄下?N文件不存在!Y文件不存在!獲取文件 獲取文件確認該文件被打開確認該文件被打開文件權(quán)限為只寫或讀寫文件權(quán)限為只寫或讀寫N文件為只讀和保護,不允許寫!文件為只讀和保護,不允許寫!Y獲取路徑獲取路徑00—追加,1—覆蓋?1覆蓋覆蓋0追加追加文件寫入成功!文件寫入成功!結(jié)束結(jié)束Close:開始開始CloseCloseN用戶是否在目錄下? 用戶是否在目錄下?請確認要關(guān)閉的文件是在用戶目錄下!Y請確認要關(guān)閉的文件是在用戶目錄下!羅列已經(jīng)打開的文件羅列已經(jīng)打開的文件獲取文件名獲取文件名獲取物理地址獲取物理地址文件是否處于關(guān)閉狀態(tài)?文件是否處于關(guān)閉狀態(tài)?Y該文件已被關(guān)閉該文件已被關(guān)閉N關(guān)閉文件關(guān)閉文件文件成功關(guān)閉文件成功關(guān)閉結(jié)束結(jié)束【源程序清單】Open:voidOpenF()/*OpenFile*/{printf("\n\nC:\\%s>",strupr(dirname)); //顯示當前路徑intfcoun,i; //定義兩個整形變量charfname[MAXNAME],fmode[25]; //定義兩個字符串變量intfmod; //文件模式printf("\nPleaseinputFileName:");gets(fname); //接收打開文件的文件名ltrim(rtrim(fname)); //去除左右空白if(ExistF(fname)<0) //判斷文件是否存在{ //不存在printf("\nError.文件名\'%s\'不存在\n",fname);wgetchar=1; }else{ //存在i=ExistD(username); //獲取用戶物理信息for(inta=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("PleaseinputOpenMode(0-ReadOnly,1-WriteOnly,2-ReadandWrite,3-Protect):"); //打開文件模式gets(fmode); //獲取模式fmod=atoi(fmode); //將字符串轉(zhuǎn)換為整型ifopen[i][fcoun].openmode=fmod; //將文件的模式置為OpenModeprintf("\nOpenSuccessed");wgetchar=1;}}Delete:voidDeleteF()/*DeleteFile*/{printf("\n\nC:\\%s>",strupr(dirname)); //顯示路徑charfname[MAXNAME],str[50],str1[50]; //定義三個字符串變量inti,k,j;intfpaddrno1; //記錄文件物理地址塊號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("\nPleaseinputFileName:");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("\nError.\'%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<fcount[k];j++)//將文件都向前移動{ufd[k]->ufdfile[j]=ufd[k]->ufdfile[j+1];//將j+1位置為j}strcpy(str,"c:\\osfile\\file\\");itoa(fpaddrno1,str1,10); //將整數(shù)轉(zhuǎn)化為字符串strcat(str,str1);strcat(str,".txt"); //連接remove(str); //刪除物理文件fcount[k--]; //文件個數(shù)減一printf("\n\'%s\'isdeletedsuccessfully.\n",fname);wgetchar=1;}}}else{printf("\nError.\'%s\'文件不存在!\n",fname); //文件不存在wgetchar=1;}}}Write:voidWriteF()/*WriteFile*/{printf("\n\nC:\\%s>",strupr(dirname)); //顯示用戶路徑inti,k,m=0; //定義整形變量intlength; //定義長度整形變量charfname[MAXNAME]; //定義文件名字符串charstr[255],str1[255]; //定義兩個字符串變量if(strcmp(strupr(dirname),strupr(username))!=0){//判斷用戶是否在用戶目錄下printf("\nError!請確認您要寫的在用戶目錄下!\n");wgetchar=1;return;}printf("\n請先打開文件!\n");printf("OpenedFile(s)List:\n");k=ExistD(dirname); //獲取用戶文件信息for(i=0;i<fcount[k];i++) //遍歷用戶下的文件{if(ifopen[k][i].ifopen==1){ //文件處于打開狀態(tài)printf("%15s",ufd[k]->ufdfile[i].fname);m++;}if(m%4==0&&m!=0) //每創(chuàng)建4個文件換一行printf("\n"); }printf("\n%d文件已經(jīng)打開啦!\n",m);if(m==0)wgetchar=1;if(m!=0) //創(chuàng)建文件{printf("\nPleaseinputFileName:");gets(fname); //接收文件名ltrim(rtrim(fname)); //去除左右空白i=ExistF(fname); //獲取文件物理地址if(i>=0){ //文件存在if(ifopen[k][i].ifopen==1){ //文件處于打開狀態(tài)if(ifopen[k][i].openmode==1||ifopen[k][i].openmode==2){ //文件權(quán)限是只寫或讀寫itoa(ufd[k]->ufdfile[i].fpaddr,str,10); //獲取文件路徑strcpy(str1,"file");strcat(str1,str);strcpy(str,"c:\\osfile\\file\\");strcat(str,str1);strcat(str,".txt"); //文件路徑 charstr2[3]; intchoice=3; strcpy(str2,"ab"); printf("Youcanchoise[0-CoveredW][1-AdditonalW]:"); //選擇追加還是覆蓋 scanf("%d",&choice); if(choice==0)//0-覆蓋 strcpy(str2,"wb");fp_file=fopen(str,str2); //打開文件length=WriteF1();ufd[k]->ufdfile[i].flength=ufd[k]->ufdfile[i].flength+length; //修改文件長度 if(choice==0) ufd[k]->ufdfile[i].flength=length;printf("\n\nYouhavewritefilesuccessfully!!!"); fclose(fp_file);//關(guān)閉文件wgetchar=0;}elseif(ifopen[k][i].openmode==0){ //文件處于只讀狀態(tài),不允許寫printf("\nError.\'%s\'文件以只讀狀態(tài)打開,不允許寫!\n",fname);wgetchar=1;}else{ printf("\nError.\'%s\'文件處于關(guān)閉狀態(tài),請先打開!\n",fname);wgetchar=1;} }}else{printf("\nError.\'%s\'文件不存在!\n",fname); //文件不存在wgetchar=1;}}}Close:voidCloseF()/*CloseFile*/{printf("\n\nC:\\%s>",strupr(dirname)); //顯示路徑charfname[MAXNAME]; //定義字符串變量inti,k,n=0;if(strcmp(strupr(dirname),strupr(username))!=0) //關(guān)閉用戶文件需在用戶目錄下{printf("\nError!請確認您要關(guān)閉的是在用戶目錄下!\n");}else{ printf("\n\nOpenedFile(s)List:\n"); //羅列已處于打開的文件 k=ExistD(dirname); for(i=0;i<fcount[k];i++) { if(ifopen[k][i].ifopen==1) //文件處于開啟狀態(tài) if((ifopen[k][i].openmode==0)||(ifopen[k][i].openmode==2)) //只讀或者讀寫狀態(tài) { printf("%15s",ufd[k]->ufdfile[i].fname); n++; } if((n%4==0)&&(n!=0))printf("\n"); } printf("\n%d文件已被打開!\n",n); if(n==0)wgetchar=1;printf("\nPleaseinputFileName:");gets(fname); //接收關(guān)閉文件的文件名ltrim(rtrim(fname)); //除去首尾空格i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度教育機構(gòu)講師團隊合作協(xié)議
- 公司文員勞動協(xié)議
- 全球環(huán)境治理項目資金捐贈協(xié)議
- 中國地理讀后感
- 《數(shù)學競賽題庫設(shè)計與復(fù)習教學教案》
- 大宗商品貿(mào)易管理流程手冊
- 委托貸款借款合同
- 農(nóng)產(chǎn)品質(zhì)量安全追溯手冊
- 互聯(lián)網(wǎng)軟件開發(fā)合同協(xié)議
- 綠化工程承包合同協(xié)議
- 2024年江蘇食品藥品職業(yè)技術(shù)學院單招職業(yè)技能測試題庫有完整答案
- 區(qū)塊鏈與人工智能的融合
- 員工服務(wù)意識提升提高服務(wù)意識培訓課件
- 2024年黑龍江農(nóng)業(yè)工程職業(yè)學院單招職業(yè)適應(yīng)性測試題庫1套
- 學前兒童游戲智慧樹知到期末考試答案章節(jié)答案2024年麗水學院
- 2023-2024學年高中政治統(tǒng)編版必修三第四課 人民民主專政的社會主義國家 同步練習
- ERP原理及應(yīng)用教程(第四版)全套教學課件
- 湖州市第七屆“期望杯”小學數(shù)學競賽試題(六年級)附參考答案
- 壓力容器作業(yè)人員培訓課件下
- 【初中數(shù)學】你有多少種畫平行線的方法課件 2023-2024學年人教版數(shù)學七年級下冊
- 第三單元簡易方程(二)(知識精講+典題精練)-2023-2024學年五年級下冊數(shù)學高頻考點重難點講義(滬教版)
評論
0/150
提交評論