




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng)課程設(shè)計報告專 業(yè):軟件工程0 / 26學(xué) 號:姓 名:馬提交日期: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),提高學(xué)生實際應(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 寫文件c
2、d 進出目錄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
3、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 fnameMAXNAME; /*file name*/ OSFILE; /存放重要信息 typedef struct /*the structure of OSUFD*/ char ufdnameMAXNAME; /*ufd name*/ OSFILE ufdfileMAXCHI
4、LD; /*ufd own file*/OSUFD; /用戶下面的文件 typedef struct /*the structure of OSUFDLOGIN*/ char ufdnameMAXNAME; /*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-initia
5、l*/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)閉文件*
6、/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() /*
7、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 fi
8、le相當(dāng)于置換文件*/程序流程說明:整體流程:開始Login(Name/Pw/Cpw)創(chuàng)建文件打開文件刪除文件寫文件更改目錄修改文件屬性讀文件關(guān)閉文件退出系統(tǒng)清屏添加覆蓋結(jié)束各部分功能流程:Open:開始 Open獲取文件名文件是否存在?(file0)文件名不存在獲取文件置為打開狀態(tài)并獲取文件模式打開文件成功結(jié)束 N N YDelete:開始Delete主目錄是否為空?Y確認(rèn)刪除文件在用戶目錄下!N用戶是否在用戶目錄下? N只能修改用戶目錄下的文件!Y接收刪除文件名獲取文件文件被打開或被保護?Y打開或被保護狀態(tài)不可刪除N獲取物理塊號文件向前移動刪除文件,文件數(shù)減一刪除文件成功!結(jié)束Write:
9、開始Write用戶是否在目錄下?N文件不存在! Y獲取文件 確認(rèn)該文件被打開文件權(quán)限為只寫或讀寫 N文件為只讀和保護,不允許寫! Y獲取路徑0追加,1覆蓋?1覆蓋0追加文件寫入成功!結(jié)束Close:開始CloseN用戶是否在目錄下?請確認(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(nnC:%s,strupr(dirname); /顯示當(dāng)前路徑 int fcoun, i; /定義兩個整形變量 char fname
10、MAXNAME, fmode25; /定義兩個字符串變量 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 ufdfilea.fname)=0) /找到文件 fcoun=a; b
11、reak; ifopenifcoun.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)換為整型 ifopenifcoun.openmode=fmod; /將文件的模式置為OpenMode printf(nOpen Successed); wgetchar=1; Delete:void DeleteF() /*Delete
12、File*/ printf(nnC:%s,strupr(dirname); /顯示路徑 char fnameMAXNAME, str50, str150; /定義三個字符串變量 int i, k, j; int fpaddrno1; /記錄文件物理地址塊號 if(strcmp(strupr(ltrim(rtrim(dirname), )=0) /判斷主目錄是否為空 printf(nError.請確認(rèn)您要刪除的是否在用戶目錄下!n); wgetchar=1; if(strcmp(strupr(dirname), strupr(username)!=0) /判斷用戶是否在用戶目錄下 printf(
13、nError.您只能刪除修改自己用戶目錄下的文件哦!n); wgetchar=1; else printf(nPlease input FileName:); gets(fname); /接收刪除的文件名 ltrim(rtrim(fname); /去除文件名的左右空白 i=ExistF(fname); /用戶文件位置 if(i=0) k=ExistD(username); /獲取用戶所在存儲位置 if(ifopenki.ifopen=1) /文件狀態(tài)處于打開狀態(tài),不許刪除 printf(n Error.%s 處于打開狀態(tài)!請先關(guān)閉喲!n, fname); wgetchar=1; else if
14、(ufdk-ufdfilei.fmode=3) /保護文件,不可刪除 printf(nError.%s處于被保護狀態(tài)!請先關(guān)閉喲!n, fname); wgetchar=1; else fpaddrno1=ufdk-ufdfilei.fpaddr; /獲取文件的物理地址塊號 fpaddrnofpaddrno1=0; /回收物理地址塊號 for(j=i; jufdfilej=ufdk-ufdfilej+1; /將j+1位置為j strcpy(str , c:osfilefile); itoa(fpaddrno1, str1, 10); /將整數(shù)轉(zhuǎn)化為字符串 strcat(str, str1);
15、strcat(str, .txt);/連接 remove(str); /刪除物理文件 fcountk-; /文件個數(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); /顯示用戶路徑 int i, k, m=0; /定義整形變量 int length; /定義長度整形變量 char f
16、nameMAXNAME; /定義文件名字符串 char str255, str1255; /定義兩個字符串變量 if(strcmp(strupr(dirname), strupr(username)!=0) /判斷用戶是否在用戶目錄下 printf(nError!請確認(rèn)您要寫的在用戶目錄下!n); wgetchar=1; return; printf(n請先打開文件!n); printf(Opened File(s) List:n); k=ExistD(dirname); /獲取用戶文件信息 for(i=0; iufdfilei.fname); m+; if(m%4 = 0 & m!=0) /
17、每創(chuàng)建4個文件換一行 printf(n); printf(n%d 文件已經(jīng)打開啦!n, m); if(m = 0) wgetchar=1; if(m!=0) /創(chuàng)建文件 printf(nPlease input FileName:); gets(fname); /接收文件名 ltrim(rtrim(fname); /去除左右空白 i=ExistF(fname); /獲取文件物理地址 if(i=0) /文件存在 if(ifopenki.ifopen=1) /文件處于打開狀態(tài) if(ifopenki.openmode=1 | ifopenki.openmode=2) /文件權(quán)限是只寫或讀寫 ito
18、a(ufdk-ufdfilei.fpaddr, str, 10); /獲取文件路徑 strcpy(str1, file); strcat(str1, str); strcpy(str, c:osfilefile); strcat(str, str1); strcat(str, .txt); /文件路徑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(s
19、tr2, wb); fp_file=fopen(str, str2); /打開文件 length=WriteF1(); ufdk-ufdfilei.flength=ufdk-ufdfilei.flength+length; /修改文件長度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),不允許寫 printf(nError.
20、%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:void CloseF() /*Close File*/ printf(nnC:%s,strupr(dirname); /顯示路徑 char fnameMAXNAME; /定義字符串變量 int i, k, n=0; if(strcmp(strupr(dirname),
21、strupr(username)!=0) /關(guān)閉用戶文件需在用戶目錄下 printf(nError!請確認(rèn)您要關(guān)閉的是在用戶目錄下!n); else printf(nnOpened File(s) List:n); /羅列已處于打開的文件k=ExistD(dirname);for(i=0;iufdfilei.fname);n+;if(n%4=0)&(n!=0) printf(n);printf(n%d 文件已被打開!n,n);if (n=0) wgetchar=1; printf(nPlease input FileName:); gets(fname); /接收關(guān)閉文件的文件名 ltrim(rtrim(fname); /除去首尾空格 i=ExistF(fname); /獲取文件物理地址 if(i = 0) k=ExistD(username); /獲取用戶文件信息 if(ifopenki.ifopen=0) /文件處于關(guān)閉狀態(tài) printf(nError!%s文件已經(jīng)被關(guān)閉!n, fname); else /將文件關(guān)閉 ifopenki.ifopen=0; ifopenki.
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 黑龍江省哈爾濱工大附中2024-2025學(xué)年九年級下學(xué)期化學(xué)寒假調(diào)研測試題(含答案)
- 2025年軍隊文職人員招聘之軍隊文職政治學(xué)練習(xí)題(一)及答案
- 2019-2025年消防設(shè)施操作員之消防設(shè)備中級技能通關(guān)提分題庫及完整答案
- 產(chǎn)品采購協(xié)議細節(jié)
- 房地產(chǎn)公司涉及的設(shè)計方面協(xié)議年
- 促銷活動效果分析統(tǒng)計表
- 慢病相關(guān)知識培訓(xùn)課件
- 人力資源招聘與員工離職統(tǒng)計表
- 河南省駐馬店上蔡縣2024-2025學(xué)年七年級上學(xué)期期末生物學(xué)試題(含答案)
- 鄉(xiāng)村醫(yī)生技能提升作業(yè)指導(dǎo)書
- 土地整治項目工程量計算規(guī)則(2013-8-1實施)
- 儲罐基礎(chǔ)允許偏差項目復(fù)測記錄
- 5G基站建設(shè)審批事項清單、流程
- 綠色金融簡介及廣東綠色金融發(fā)展分析
- 四年級下冊語文試題 期中復(fù)習(xí)專題 閱讀理解部編版(含解析)
- 鋼塑復(fù)合管理論重量表
- 華彩中國舞蹈考級教材第七級
- 高空作業(yè)免責(zé)協(xié)議書例文
- 亞低溫治療儀的使用與護理
- 正副班主任工作職責(zé)
- [理學(xué)]《復(fù)變函數(shù)與積分變換》蘇變萍_陳東立答案
評論
0/150
提交評論