操作系統(tǒng)課程設(shè)計(jì)Linux二級(jí)文件系統(tǒng)設(shè)計(jì)

上傳人:jun****875 文檔編號(hào):17801488 上傳時(shí)間:2020-12-06 格式:DOC 頁數(shù):25 大?。?14.41KB
收藏 版權(quán)申訴 舉報(bào) 下載
操作系統(tǒng)課程設(shè)計(jì)Linux二級(jí)文件系統(tǒng)設(shè)計(jì)_第1頁
第1頁 / 共25頁
操作系統(tǒng)課程設(shè)計(jì)Linux二級(jí)文件系統(tǒng)設(shè)計(jì)_第2頁
第2頁 / 共25頁
操作系統(tǒng)課程設(shè)計(jì)Linux二級(jí)文件系統(tǒng)設(shè)計(jì)_第3頁
第3頁 / 共25頁

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《操作系統(tǒng)課程設(shè)計(jì)Linux二級(jí)文件系統(tǒng)設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《操作系統(tǒng)課程設(shè)計(jì)Linux二級(jí)文件系統(tǒng)設(shè)計(jì)(25頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 專 業(yè):軟件工程 學(xué) 號(hào): 姓 名:馬 提交日期:2017/1/10 【設(shè)計(jì)目的】 1、 通過一個(gè)簡單多用戶文件系統(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、通過對(duì)實(shí)際問題的分析、設(shè)計(jì)、編程實(shí)現(xiàn),提高學(xué)生實(shí)際應(yīng)用、編程的能力 【設(shè)計(jì)內(nèi)容】 為Linux系統(tǒng)設(shè)計(jì)一個(gè)簡單的二級(jí)文件系統(tǒng)。要求做到以下幾點(diǎn): 1.可以實(shí)現(xiàn)下列幾條命令: login

2、 用戶登錄 dir 列目錄 create 創(chuàng)建文件 delete 刪除文件 open 打開文件 close 關(guān)閉文件 read 讀文件 write 寫文件 cd 進(jìn)出目錄 2.列目錄時(shí)要列出文件名,物理地址,保護(hù)碼和文件長度 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)下的文件。另外,為了簡便文件系統(tǒng)未考慮文件共享

3、,文件系統(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 le

4、ngth*/ 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[MAXC

5、HILD]; /*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;

6、 /*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(

7、); /*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(cha

8、r *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 passw

9、ord,use * replace*/ char *ltrim(char *str) /*remove the heading blanks.去除左空白*/ char *rtrim(char *str) /*remove the trailing blanks.去除右空白*/ int WriteF1() /*write file相當(dāng)于置換文件*/ 程序流程說明: 整體流程: 開始 Login(Name/Pw/Cpw) 創(chuàng) 建 文件 打開文件 刪除

10、文件 寫 文件 更改目錄 修改文件屬性 讀文件 關(guān)閉文件 退出系統(tǒng) 清屏 添加 覆蓋 結(jié)束 各部分功能流程: Open: 開始 Open 獲取文件名 文件是否存在? (file>0) 文件名不存在 獲取文件 置為打開狀態(tài) 并獲取文件模式 打開文件成功 結(jié)束

11、 N N Y Delete: 開始 Delete 主目錄是否為空? Y 確認(rèn)刪除文件在用戶目錄下! N 用戶是否在用戶目錄下? N 只能修改用戶目錄下的文件! Y 接收刪除文件名 獲取文件 文件被打開或被保護(hù)? Y 打開或被保護(hù)狀態(tài)不可刪除 N 刪除文件,文件

12、數(shù)減一 刪除文件成功! 結(jié)束 Write: 開始 Write 用戶是否在目錄下? N 文件不存在! Y 獲取文件 文件權(quán)限為只寫或讀寫 N 文件為只讀和保護(hù),不允許寫! Y 獲取路徑 1 0 追加 文件寫入成功! 結(jié)束 Close: 開始 Close N 用戶是否在目錄下? 請(qǐng)確認(rèn)要關(guān)閉的文件是在用戶目錄下!

13、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è)整形

14、變量 char fname[MAXNAME], fmode[25]; //定義兩個(gè)字符串變量 int fmod; //文件模式 printf("\nPlease input FileName:"); gets(fname); //接收打開文件的文件名 ltrim(rtrim(fname)); //去除左右空白 if(ExistF(fname)<0)

15、 //判斷文件是否存在 { //不存在 printf("\nError.文件名 \%s\不存在\n", fname); wgetchar=1; } else { //存在 i=ExistD(username); //獲取用戶物理信息 for(int a=0; a < fcount[i]; a++) //遍歷用戶文件 { if(str

16、cmp(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)

17、:"); //打開文件模式 gets(fmode); //獲取模式 fmod=atoi(fmode); //將字符串轉(zhuǎn)換為整型 ifopen[i][fcoun].openmode=fmod; //將文件的模式置為

18、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;

19、 //記錄文件物理地址塊號(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"); wge

20、tchar=1; } else { printf("\nPlease input FileName:"); gets(fname); //接收刪除的文件名 ltrim(rtrim(fname)); //去除文件名的左右空白 i=ExistF(fname); //用戶文件位置 if(i>=0){ k=ExistD(username); //獲取用戶所在存儲(chǔ)位置

21、 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ù)文件,不可刪除 prin

22、tf("\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

23、 //將文件都向前移動(dòng) { 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

24、(str, str1); strcat(str, ".txt"); //連接 remove(str); //刪除物理文件 fcount[k--]; //文件個(gè)數(shù)減一 printf("\n\%s\is deleted successfully.\n", fname); wgetchar=1;

25、 } } } else { printf("\nError.\%s\文件不存在!\n", fname); //文件不存在 wgetchar=1; } } } Write: void WriteF() /*Write File*/ { printf("\n\nC:\\%s>",strupr(dirname)); //顯示用戶路徑 int i, k, m=0; //

26、定義整形變量 int length; //定義長度整形變量 char fname[MAXNAME]; //定義文件名字符串 char str[255], str1[255]; //定義兩個(gè)字符串變量 if(strcmp(strupr(dirname), strupr(username))!=0) { //判斷用戶是否在用戶目錄下 printf("\nError!請(qǐng)確認(rèn)您要寫的在用戶目錄下!\n"); wgetch

27、ar=1; return; } printf("\n請(qǐng)先打開文件!\n"); printf("Opened File(s) List:\n"); k=ExistD(dirname); //獲取用戶文件信息 for(i=0; i

28、k]->ufdfile[i].fname); m++; } if(m%4 == 0 && m!=0) //每創(chuàng)建4個(gè)文件換一行 printf("\n"); } printf("\n%d 文件已經(jīng)打開啦!\n", m); if(m == 0) wgetchar=1; if(m!=0) //創(chuàng)建文件 { printf("\nPle

29、ase input FileName:"); gets(fname); //接收文件名 ltrim(rtrim(fname)); //去除左右空白 i=ExistF(fname); //獲取文件物理地址 if(i>=0) { //文件存在 if(ifopen[k][i].ifopen==1) { //文件處于打開狀態(tài) if(i

30、fopen[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\\")

31、; strcat(str, str1); strcat(str, ".txt"); //文件路徑 char str2[3]; int choice=3; strcpy(str2,"ab"); printf("You can choise [0-Covered W] [1-Additonal W]:"); //選擇追加還是覆蓋 scanf(" %d", &choice); if(

32、choice == 0) //0-覆蓋 strcpy(str2, "wb"); fp_file=fopen(str, str2); //打開文件 length=WriteF1(); ufd[k]->ufdfile[i].flength=ufd[k]->ufdfile[i].flength+length; //修改文件長度

33、 if(choice == 0) ufd[k]->ufdfile[i].flength=length; printf("\n\nYou have write file successfully!!!"); fclose(fp_file); //關(guān)閉文件 wgetchar=0; } else if(ifopen[k][i].openmode==0) {

34、 //文件處于只讀狀態(tài),不允許寫 printf("\nError.\%s\ 文件以只讀狀態(tài)打開,不允許寫!\n", fname); wgetchar=1; } else { printf("\nError.\%s\ 文件處于關(guān)閉狀態(tài),請(qǐng)先打開!\n", fname); wgetchar=1; } } } else { p

35、rintf("\nError.\%s\ 文件不存在!\n", fname); //文件不存在 wgetchar=1; } } } Close: void CloseF() /*Close File*/ { printf("\n\nC:\\%s>",strupr(dirname)); //顯示路徑 char fname[MAXNAME]; //定義字符串變量 int i, k, n=0; if(strcmp(strupr(

36、dirname), strupr(username))!=0) //關(guān)閉用戶文件需在用戶目錄下 { printf("\nError!請(qǐng)確認(rèn)您要關(guān)閉的是在用戶目錄下!\n"); } else { printf("\n\nOpened File(s) List:\n"); //羅列已處于打開的文件 k=ExistD(dirname); for(i=0;i

37、en[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("\nPlease input FileName:")

38、; gets(fname); //接收關(guān)閉文件的文件名 ltrim(rtrim(fname)); //除去首尾空格 i=ExistF(fname); //獲取文件物理地址 if(i >= 0) { k=ExistD(username); //獲取用戶文件信息 if(ifopen[k][i].ifopen==0) //文件處于關(guān)閉狀態(tài) {

39、 printf("\nError!\%s\文件已經(jīng)被關(guān)閉!\n", fname); } else { //將文件關(guān)閉 ifopen[k][i].ifopen=0; ifopen[k][i].openmode=4; printf("\%s\ has been closed successfully!", fname); } } else { prin

40、tf("\nError.\%s\文件不存在\n", fname); } } } 【測試結(jié)果】 (此部分請(qǐng)同學(xué)們自己動(dòng)手操作) Login: Help: Create: Open: Read: Write: 1—additional 添加后變?yōu)椋? 0—covered 覆蓋后變?yōu)椋? Close: Attrib: Delete: Dir: Cls:(清屏) Exit: 【設(shè)計(jì)總結(jié)】 首先通過這次的操作系統(tǒng)課程設(shè)計(jì),讓我認(rèn)識(shí)到了實(shí)際的編程操作并不難,難的是對(duì)過程的設(shè)

41、計(jì),功能的定義以及最后的程序流程圖的設(shè)計(jì)。 其次說一下我的認(rèn)識(shí),這次的課程設(shè)計(jì)使我對(duì)一些東西有了更加深刻的認(rèn)知和了解,更重要的是鞏固了新學(xué)的知識(shí),以及對(duì)舊的知識(shí)進(jìn)行了復(fù)習(xí)與了解,對(duì)一些細(xì)節(jié)方面的東西也有了更深刻的理解,所以這一次實(shí)踐的機(jī)會(huì),讓我體會(huì)到了自己的不足之處,在以后的學(xué)習(xí)過程中,會(huì)加倍的認(rèn)真努力。讓我對(duì)文件的操作更加熟練了,并且對(duì)Linux有了初步的了解。 其實(shí)這次課程設(shè)計(jì),不能說很困難:老師已經(jīng)把大體的架構(gòu)給我們了,我們需要添加的僅是四個(gè)功能的設(shè)計(jì)(open、write、delete、close)但是它又不是很容易,我們需要把整個(gè)的程序弄清,各個(gè)變量以及語句都要明白記住,這會(huì)關(guān)聯(lián)到我們所定義的四個(gè)功能。 總算是把這次的課程設(shè)計(jì)搞定了,最讓我開心的是課設(shè)完成之后看著自己的作品。程序完整運(yùn)行成功的那一瞬間最令我激動(dòng)。 總之,這次的課設(shè)使我重新認(rèn)識(shí)了不少,以后我會(huì)更加努力! 【參考文獻(xiàn)】 計(jì)算機(jī)操作系統(tǒng)教程(第三版). 張堯?qū)W 史美林 張高 計(jì)算機(jī)操作系統(tǒng),西安電子科技大學(xué)出版社,方敏主編,2004.8

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!