Linux文件系統(tǒng)實驗報告

上傳人:jun****875 文檔編號:17745849 上傳時間:2020-12-04 格式:DOC 頁數:19 大小:376.91KB
收藏 版權申訴 舉報 下載
Linux文件系統(tǒng)實驗報告_第1頁
第1頁 / 共19頁
Linux文件系統(tǒng)實驗報告_第2頁
第2頁 / 共19頁
Linux文件系統(tǒng)實驗報告_第3頁
第3頁 / 共19頁

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

9.9 積分

下載資源

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

資源描述:

《Linux文件系統(tǒng)實驗報告》由會員分享,可在線閱讀,更多相關《Linux文件系統(tǒng)實驗報告(19頁珍藏版)》請在裝配圖網上搜索。

1、 黃岡師范學院 提高型實驗報告 實驗課題 文件系統(tǒng)的設計與實現 (實驗類型:□綜合性 R設計性 □應用性) 實驗課程 操作系統(tǒng)原理 實驗時間 2015-2016 第二學期 學生姓名 何正發(fā) 專業(yè)班級 軟件工程1401 學 號 2014263040107 一、實驗目的和要求 成績: 1、熟悉操作系統(tǒng)設計的過程,鞏固操作系統(tǒng)的基本知識,加深對操作原理、功能及各種不同的存儲管理方法理解與應用; 2、學會運用各種語言、軟件開發(fā)新軟件的基本方法; 3、增強實際應用能力和動手操作能力。 二、實驗條

2、件 Win7 /Windows 8.1/Linux等操作系統(tǒng),裝有java、C、C++、C#等語言工具的環(huán)境。 三、實驗原理分析 可以選擇最佳適應算法,按照從小到大的次序組成空閑區(qū)自由鏈,當用戶作業(yè)或進程申請一個空閑區(qū)時,存儲管理 程序從表頭開始查找,當找到第一個満足要求的空閑區(qū)時,停止查找。如果該空閑區(qū)大于請求表中的請求長 度,將減去請求長度后的剩余空閑區(qū)部分留在可用表中?;厥諘r,從作鏈中刪去要回收的作業(yè)塊,同時在空 閑鏈中插入該作業(yè)大小的空閑區(qū),并按順序排列 四、實驗方案或步驟 1、應用環(huán)境、需求分析 本模擬系統(tǒng)主要針對文件的管理和操作名主要有:創(chuàng)建用戶

3、、文件、文件夾,讀文件,寫文件,執(zhí)行文件,關閉文件,刪除用戶、文件夾、文件的功能。 創(chuàng)建用戶、文件、文件夾:在對系統(tǒng)發(fā)出操作命令之前必須先登錄用戶,然而登錄之前必須創(chuàng)建該用戶。在創(chuàng)建完后,可通過登錄用戶來創(chuàng)建文件和文件夾。在創(chuàng)建文件時可設置文件的屬性和輸入文件的內容。 讀文件:讀取任何已創(chuàng)建的只讀或讀寫文件的內容;如果所要讀的文件不是可讀文件時,系統(tǒng)會顯示該文件不可讀;如果所讀文件不存在,系統(tǒng)會顯示文件不存在。 寫文件用戶可寫或重寫讀寫文件中的內容,并保存文件中的重寫內容,以供下次讀??;當所要寫的文件不是可寫的文件時,系統(tǒng)會顯示該文件不可寫;當所要寫的文件并不存在時,系統(tǒng)會顯示該文件不存

4、在。 執(zhí)行文件:登錄用戶后,用戶可執(zhí)行系統(tǒng)中已創(chuàng)建的執(zhí)行文件;當該文件不是可執(zhí)行文件時,系統(tǒng)會顯示該文件不可執(zhí)行;當該文件不存在時,系統(tǒng)將會顯示該文件不存在。 關閉文件:可通過選擇關閉文件的功能選項,來關閉系統(tǒng)中所有打開的文件,如果沒有文件被打開,則系統(tǒng)會顯示沒有文件打開。 刪除用戶、文件、文件夾:用戶可通過選擇刪除的功能選項來刪除不想再保存的文件和文件夾,刪除后,用戶會自動注銷;當選擇刪除用戶的功能選項時,系統(tǒng)會刪除該用戶,以及該用戶所創(chuàng)建的所有文件和文件夾。 2、概要設計 打開文件流程圖: 寫文件流程圖: 關閉文件流程圖: 3、

5、詳細設計 (1)用戶結構:賬號與密碼結構 typedef struct users { char name[8]; char pwd[10]; }users; 本系統(tǒng)有8個默認的用戶名,前面是用戶名,后面為密碼,用戶登陸時只要輸入正確便可進入系統(tǒng),否則提示失敗要求重新輸入。 users usrarray[8] = { "usr1","usr1", "usr2","usr2", "usr3","usr3", "usr4","usr4", "usr5","usr5", "usr6","usr6", "usr7","usr7", "usr8","usr8",

6、 }; (2)數據結構說明 a)文件結構鏈表 struct fnode { char filename[FILENAME_LENGTH]; int isdir; int isopen; char content[255]; fnode *parent; fnode *child; fnode *prev; fnode *next; }; b)函數介紹 fnode *initfile(char filename[],int isdir);//初始化文件或目錄 void createroot();//建立系統(tǒng)根目錄 int run();系統(tǒng)運行 int fi

7、ndpara(char *topara);對參數進行處理 bool chklogin(char *users, char *pwd);檢查賬號與口令 void help();命令列表 int mkdir();建立目錄 int create();建立文件 int read();讀取文件 int write();寫入文件 int del();刪除文件 int cd();切換目錄 int dir();文件與目錄列表 4、 代碼清單 #include "stdio.h" #include "iostream.h" #include "string.h" #in

8、clude "iomanip.h" #define FILENAME_LENGTH 10 //文件名稱長度 #define COMMAND_LENGTH 10 //命令行長度 #define PARA_LENGTH 30 //參數長度 //賬號結構 typedef struct users { char name[8]; char pwd[10]; }users; //文件結構 struct fnode { char filename[FILENAME_LENGTH]; int isdir; int isopen;

9、 char content[255]; fnode *parent; fnode *child; fnode *prev; fnode *next; }; //賬號 users usrarray[8] = { "usr1","usr1", "usr2","usr2", "usr3","usr3", "usr4","usr4", "usr5","usr5", "usr6","usr6", "usr7","usr7", "usr8","usr8", }; fnode *initfile(char filename[],int i

10、sdir); void createroot(); int run(); int findpara(char *topara); bool chklogin(char *users, char *pwd); void help(); int mkdir(); int create(); int read(); int write(); int del(); int cd(); int dir(); fnode *root,*recent,*temp,*ttemp; char para[PARA_LENGTH],command[COMMAND_

11、LENGTH],temppara[PARA_LENGTH],recentpara[PARA_LENGTH]; //創(chuàng)建文件與目錄結點 fnode* initfile(char filename[],int isdir) { fnode *node=new fnode; strcpy(node->filename,filename); node->isdir=isdir; node->isopen=0; node->parent=NULL; node->child=NULL; node->prev=NULL; node->nex

12、t=NULL; return node; } //創(chuàng)建文件存儲結點 void createroot () { recent=root=initfile("/",1); root->parent=NULL; root->child=NULL; root->prev=root->next=NULL; strcpy(para,"/"); } int mkdir() { temp=initfile(" ",1); cin>>temp->filename; if(recent->child==NULL)

13、{ temp->parent=recent; temp->child=NULL; recent->child=temp; temp->prev=temp->next=NULL; } else { ttemp=recent->child; while(ttemp->next) { ttemp=ttemp->next; if(strcmp(ttemp->filename,temp->filename)==0&&ttemp->isdir==1) { printf("對不

14、起,目錄已存在!"); return 1; } } ttemp->next=temp; temp->parent=NULL; temp->child=NULL; temp->prev=ttemp; temp->next=NULL; } return 1; } int create() { temp=initfile(" ",0); cin>>temp->filename; gets(temp->content); //cin>>temp->content; if(recen

15、t->child==NULL) { temp->parent=recent; temp->child=NULL; recent->child=temp; temp->prev=temp->next=NULL; cout<<"文件建立成功!"<child; while(ttemp->next) { ttemp=ttemp->next; if(strcmp(ttemp->filename,temp->filename)==0&&tt

16、emp->isdir==0) { printf("對不起,文件已存在!"); return 1; } } ttemp->next=temp; temp->parent=NULL; temp->child=NULL; temp->prev=ttemp; temp->next=NULL; cout<<"文件建立成功!"<

17、recent; if(temp!=root) {cout<<"

"<<".."<child==NULL) { cout<<"Total: "<<" directors " <child; while(temp) { if(temp->isdir) {cout<<"

18、

"<filename< "<filename<next; } cout<<"Total: "<<" directors " <

19、name[FILENAME_LENGTH]; cin>>filename; if(recent->child==NULL) { cout<<"文件不存在!"<child->filename,filename)==0) { cout<child->content<child; while(temp->next)

20、 { if(strcmp(temp->next->filename,filename)==0) {cout<next->content<>filename; if(recent->child==NULL) { cout<<"文件不存在!"<

21、 if(strcmp(recent->child->filename,filename)==0) { recent->child->isopen=1;//設置文件標記為打開 cin>>recent->child->content; recent->child->isopen=0;//設置文件標記為關閉 cout<<"文件寫入成功!"<child; while(temp->next) { if(strcmp

22、(temp->next->filename,filename)==0) { recent->child->isopen=1;//設置文件標記為打開 cin>>temp->next->content; recent->child->isopen=0;//設置文件標記為關閉 cout<<"文件寫入成功!"<>topara;

23、 if(strcmp(topara,"..")==0) { int i; while(recent->prev) recent=recent->prev; if(recent->parent) { recent=recent->parent; } i=strlen(para); while(para[i]!=/ && i>0) i--; if(i!=0) para[i]=\0; else para[i+1]=\0; } else { fi

24、ndpara(topara); } return 1; } int findpara(char *topara) { int i=0; int sign=1; if(strcmp(topara,"/")==0) { recent=root; strcpy(para,"/"); return 1; } temp=recent; strcpy(temppara,para); if(topara[0]==/) { recent=root->child; i++;

25、 strcpy(para,"/"); } else { if(recent!=NULL && recent!=root) strcat(para,"/"); if(recent && recent->child) { if(recent->isdir) recent=recent->child; else { printf("路徑錯誤!\n"); return 1; } } } while(i<=strl

26、en(topara) && recent) { int j=0; if(topara[i]==/ && recent->child) { i++; if(recent->isdir) recent=recent->child; else {printf("路徑錯誤\n"); return 0; } strcat(para,"/"); } while(topara[i]!=/ && i<=strlen(topara)) { rec

27、entpara[j]=topara[i]; i++;j++; } recentpara[j]=\0; while((strcmp(recent->filename,recentpara)!=0 || (recent->isdir!=1)) && recent->next!=NULL) { recent=recent->next; } if(strcmp(recent->filename,recentpara)==0) { if(recent->isdir==0) {strcpy(para,temp

28、para); recent=temp; printf("是文件不是目錄。\n"); return 0; } strcat(para,recent->filename); } if(strcmp(recent->filename,recentpara)!=0 || recent==NULL) { strcpy(para,temppara); recent=temp; printf("輸入路徑錯誤\n"); return 0; } } return 1; } int del()

29、 { char filename[FILENAME_LENGTH]; cin>>filename; temp=new fnode; if(recent->child) { temp=recent->child; while(temp->next && (strcmp(temp->filename,filename)!=0 || temp->isdir!=0)) temp=temp->next; if(strcmp(temp->filename,filename)!=0) { cout<<"不

30、存在該文件!"<parent==NULL) { temp->prev->next=temp->next; if(temp->next) temp->next->prev=temp->prev; temp->prev=temp->next=NULL; } else { if(temp->next) temp-

31、>next->parent=temp->parent; temp->parent->child=temp->next; } delete temp; cout<<"文件已刪除!"<

32、 false; } void help(void) { cout<<" 命 令 一 覽 "<

33、: 刪除文件。 "<"; cin>>command; if(strc

34、mp(command,"mkdir")==0) mkdir(); else if(strcmp(command,"dir")==0) dir(); else if(strcmp(command,"cd")==0) cd(); else if(strcmp(command,"create")==0) create(); else if(strcmp(command,"read")==0) read(); else if(strcmp(command,"write")==0) write(); else if(strcmp(c

35、ommand,"del")==0) del(); else if(strcmp(command,"help")==0) help(); else if(strcmp(command,"logout")==0) return 0; else cout<<"請參考help提供的命令列表!"<

36、****************"<

37、 *"<>users; cout<<"Pass:"; cin>>pwd; if(chklogin(users,pwd)) {in=true;break;} i++; } createroot(); while(in) { if(!run()) break; } } 五、實驗結果與分析 能夠很成功的對文件進行讀寫操作,意見保存和刪除 六、討論總結 通過這次提高型實驗,我明白了做一個系統(tǒng)的難度之大,首先要進行需求分析,然后通過ER圖來清晰自己的思路,整個過程雖然很繁瑣,很復雜,但完成任務后,內心的成就感爆棚,給自己的未來增加了滿滿的信心!這次的實驗,我學會了如何用代碼實現操作系統(tǒng)的部分功能,如創(chuàng)建文件,讀文件,寫文件,創(chuàng)建文件夾,以及刪除文件等等,瞬間覺得特別高大上。希望今后能學習到更多到社會上有用的東西,加油!

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

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網版權所有   聯系電話:18123376007

備案號:ICP2024067431-1 川公網安備51140202000466號


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