操作系統(tǒng)課程設(shè)計(jì)Linux二級(jí)文件系統(tǒng)設(shè)計(jì)
《操作系統(tǒng)課程設(shè)計(jì)Linux二級(jí)文件系統(tǒng)設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《操作系統(tǒng)課程設(shè)計(jì)Linux二級(jí)文件系統(tǒng)設(shè)計(jì)(25頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 操作系統(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
2、 用戶登錄 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)未考慮文件共享
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ù)說(shuō)明: 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)于置換文件*/ 程序流程說(shuō)明: 整體流程: 開始 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; //定義長(zhǎng)度整形變量
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; //修改文件長(zhǎng)度
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);
}
}
}
【測(cè)試結(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é)】
首先通過(guò)這次的操作系統(tǒng)課程設(shè)計(jì),讓我認(rèn)識(shí)到了實(shí)際的編程操作并不難,難的是對(duì)過(guò)程的設(shè) 41、計(jì),功能的定義以及最后的程序流程圖的設(shè)計(jì)。
其次說(shuō)一下我的認(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í)過(guò)程中,會(huì)加倍的認(rèn)真努力。讓我對(duì)文件的操作更加熟練了,并且對(duì)Linux有了初步的了解。
其實(shí)這次課程設(shè)計(jì),不能說(shuō)很困難:老師已經(jīng)把大體的架構(gòu)給我們了,我們需要添加的僅是四個(gè)功能的設(shè)計(jì)(open、write、delete、close)但是它又不是很容易,我們需要把整個(gè)的程序弄清,各個(gè)變量以及語(yǔ)句都要明白記住,這會(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: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中生物對(duì)照實(shí)驗(yàn)專題復(fù)習(xí)課件
- 初中物理資源九年級(jí)第十五單元課件串并聯(lián)識(shí)別
- 咯血與嘔血課件
- What's_your_number_課件
- 外研版七下Module3Unit1(教育精品)
- 浙美版三年級(jí)上冊(cè)美術(shù)第15課-剪雪花教學(xué)ppt課件
- 蘇教版六年級(jí)下冊(cè)數(shù)學(xué)正比例和反比例的意義課件
- 蘇教版五下《單式折線統(tǒng)計(jì)圖》教研課件
- 固態(tài)相變概論
- 三角形全等的判定復(fù)習(xí)-課件2
- 太陽(yáng)能發(fā)展趨勢(shì)課件
- 道路工程監(jiān)理最新規(guī)劃范本課件
- SPC及CPK教程(理論篇)課件
- Travel-Plan旅行計(jì)劃-PPT
- 新冠肺炎疫情期間醫(yī)務(wù)人員防護(hù)技術(shù)指南