實驗六模擬系統(tǒng).doc_第1頁
實驗六模擬系統(tǒng).doc_第2頁
實驗六模擬系統(tǒng).doc_第3頁
實驗六模擬系統(tǒng).doc_第4頁
實驗六模擬系統(tǒng).doc_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

操作系統(tǒng)試驗班級:計科0801 姓名:韓偉偉 學(xué)號:08407106 日期:2011/6/15實驗六 模擬實現(xiàn)文件系統(tǒng)一實驗?zāi)康耐ㄟ^模擬程序?qū)崿F(xiàn)文件的建立、打開、刪除、關(guān)閉、復(fù)制、讀、寫、查詢等功能,了解文件系統(tǒng)實現(xiàn)的特點,掌握文件系統(tǒng)的各種功能實現(xiàn)方法。二實驗屬性設(shè)計三實驗內(nèi)容模擬實現(xiàn)文件系統(tǒng)問題是一個經(jīng)典的關(guān)于文件的處理問題,包括:實現(xiàn)文件的建立、打開、刪除、關(guān)閉、復(fù)制、讀、寫、查詢等功能。設(shè)計思想如下:1 在內(nèi)存中開辟一個虛擬磁盤空間作為文件存儲器,在其上實現(xiàn)一個多用戶多目錄的文件系統(tǒng)。2 文件物理結(jié)構(gòu)可采用顯式鏈接或其他方法。3 磁盤空閑空間的管理可選擇位示圖或其他方法。如果采用位示圖來管理文件存儲空間,并采用顯式鏈接分配方式,則可以將位示圖合并到FAT中。4 文件目錄結(jié)構(gòu)采用多用戶多級目錄結(jié)構(gòu),每個目錄項包含文件名、物理地址、長度等信息,還可以通過目錄項實現(xiàn)對文件的讀和寫的保護(hù)。目錄組織方式可以不使用索引結(jié)點的方式,但使用索引結(jié)點,則難度系數(shù)為1.2。5 設(shè)計一個較實用的用戶界面,方便用戶使用。要求提供以下相關(guān)文件操作:(1)具有l(wèi)ogin (用戶登錄)(2)系統(tǒng)初始化(建文件卷、提供登錄模塊)(3)文件的創(chuàng)建: create(4)文件的打開:open(5)文件的讀:read(6)文件的寫:write(7)文件關(guān)閉:close(8)刪除文件:delete (9)列出文件目錄:dir(10)退出:logout四設(shè)計思路 1本系統(tǒng)初始化了十個用戶,每個用戶初始化五個文件,最多可擁有十個文件,所以每個用戶在此基礎(chǔ)上可為自己再創(chuàng)建五個文件,也可以在刪除文件后再創(chuàng)建。2系統(tǒng)使用create,open,read,write,close,delete,dir和exit來創(chuàng)建文件,打開文件,讀文件,寫文件,關(guān)閉文件,刪除文件和顯示文件。3程序采用二級文件目錄(即設(shè)置主目錄MFD)和用戶文件目錄(UED)。另外,為打開文件設(shè)置了運行文件目錄(AFD)。4為了便于實現(xiàn),對文件的讀寫作了簡化,在執(zhí)行讀寫命令時,只需改讀寫指針,并不進(jìn)行實際的讀寫操作。模擬實現(xiàn)文件系統(tǒng)的主要流程圖如下:五實驗報告1寫出你編寫的C+程序。#include stdio.h#include #include #include #define getpch(type) (type*)malloc(sizeof(type) #define NULL 0 #define UserNumber 10#define UserFNumber 10#define UserOFNumber 5struct fname char fnamea1; int flag; fnameA26=a,0,b,0,c,0,d,0,e,0,f,0,g,0,h,0,i,0,j,0,k,0,l,0, m,0,n,0,o,0,p,0,q,0,r,0,s,0,t,0,u,0,v,0,w,0,x,0,y,0,z,0;struct afd char opname10;/* 打開文件名 */ int flag; char opfprotect3;/* 打開保護(hù)碼 */ int rwpoint;/* 讀寫指針 */ AFDUserOFNumber;/* 用戶打開的文件 */typedef struct char fname10;/* 用戶文件名 */ int flag;/* 文件存在標(biāo)志 */ int fprotect3;/* 文件保護(hù)碼rwt */ int flength; ufd,UFUserFNumber;/* 用戶文件 */struct mdf char uname10;/* 用戶名 */ UF Udir;/* 用戶文件目錄 */ UFDUserNumber;/* 用戶 */void intFSystem() int i,j,k,l; strcpy(UFD0.uname,a); strcpy(UFD1.uname,b); strcpy(UFD2.uname,c); strcpy(UFD3.uname,d); strcpy(UFD4.uname,e); strcpy(UFD5.uname,f); strcpy(UFD6.uname,g); strcpy(UFD7.uname,h); strcpy(UFD8.uname,i); strcpy(UFD9.uname,j); for(i=0;i10;i+) for(k=0;k5;k+) do j=rand()%26; while(fnameAj.flag); strcpy(UFDi.Udirk.fname,fnameAj.fnamea); fnameAj.flag=1; UFDi.Udirk.flength=rand()%2048+1; UFDi.Udirk.flag=1; UFDi.Udirk.fprotect0=rand()%2; UFDi.Udirk.fprotect1=rand()%2; UFDi.Udirk.fprotect2=rand()%2; for(j=0;j26;j+) fnameAj.flag=0; for(l=0;l5;l+) strcpy(AFDi.opname,); AFDl.flag=0; AFDl.opfprotect0=0; AFDl.opfprotect1=0; AFDl.opfprotect2=0; AFDl.rwpoint=0; void Open(int i) int l,k,n; char file10; for(l=0;l5;l+) if(!AFDl.flag) break; printf(請輸入你想打開的文件名:); scanf(%s,file); for(n=0;n5;n+) if(!strcmp(AFDn.opname,file)&AFDn.flag) printf(he file had opened!n,file);return; for(k=0;k10;k+) if(!strcmp(UFDi.Udirk.fname,file)&UFDi.Udirk.flag) strcpy(AFDl.opname,UFDi.Udirk.fname); AFDl.opfprotect0=UFDi.Udirk.fprotect0; AFDl.opfprotect1=UFDi.Udirk.fprotect1; AFDl.opfprotect2=UFDi.Udirk.fprotect2; AFDl.flag=1; printf(文件已打開!n); return; printf(文件不存在!n); return; void Create(int i) int k; for(k=0;k=10) printf(一個用戶不能擁有超過10個文件nn);return; printf(請輸入你想創(chuàng)建的文件名:); scanf(%s,UFDi.Udirk.fname); printf(請輸入文件長度:); scanf(%d,&UFDi.Udirk.flength); printf(只讀?(1 yes,0 no):); scanf(%d,&UFDi.Udirk.fprotect0); printf(可寫?(1 yes,0 no):); scanf(%d,&UFDi.Udirk.fprotect1); printf(可執(zhí)行?(1 yes,0 no):); scanf(%d,&UFDi.Udirk.fprotect2); UFDi.Udirk.flag=1; return;void Delete(int i)char file10; int k; printf(請輸入你想刪除的文件名:); scanf(%s,file); for(k=0;k10;k+) if(UFDi.Udirk.flag&!strcmp(UFDi.Udirk.fname,file) printf(文件已刪除!n); UFDi.Udirk.flag=0;break; else if(!UFDi.Udirk.flag&!strcmp(UFDi.Udirk.fname,file) printf(文件不存在!n); return;void Read() int l;char file10; printf(請輸入你想讀的文件:); scanf(%s,file); for(l=0;l=5) printf(文件尚未打開,請先打開文件n); return;void Write() int l;char file10; printf(請輸入你想寫的文件:); scanf(%s,file); for(l=0;l=5) printf(文件尚未打開,請先打開文件n); return;void printUFD(int i)int k; printf(主文件目錄:n,UFDi.uname); printf(用戶名t文件名t可讀 可寫 可執(zhí)行t文件長度n); for(k=0;k10;k+) if(UFDi.Udirk.flag) printf(%st%st%d %d %dtt%dBn,UFDi.uname,UFDi.Udirk.fname,UFDi.Udirk.fprotect0, UFDi.Udirk.fprotect1,UFDi.Udirk.fprotect2,UFDi.Udirk.flength); void printAFD(int i) int l,k; if (!AFD0.flag&!AFD1.flag&!AFD2.flag&!AFD3.flag&!AFD4.flag) printf(當(dāng)前沒有運行的文件!n); return; else printf(運行文件目錄:n); printf(文件名t可讀 可寫 可執(zhí)行n); for(l=0;l5;l+) for(k=0;k10;k+) if(!strcmp(UFDi.Udirk.fname,AFDl.opname)&UFDi.Udirk.flag&AFDl.flag) break; else continue; if(!strcmp(UFDi.Udirk.fname,AFDl.opname)&UFDi.Udirk.flag&AFDl.flag) printf(%st%d %d %dn,AFDl.opname,AFDl.opfprotect0,AFDl.opfprotect1,AFDl.opfprotect2); void Close() int l; char file10; printf(請選擇文件:); scanf(%s,file); for(l=0;l=5) printf(文件打開失敗!n); return;void main() int i,n=0; char m10; char login10; intFSystem(); printf( 歡迎使用n); printf(1.本系統(tǒng)模擬文件管理2.系統(tǒng)已初始化10個用戶,n用戶名分別是aj,每個用戶已分配五個文件n); printf(*本系統(tǒng)的命令包括如下:n); printf(*創(chuàng)建文件(create)n); printf(*刪除文件(delete)n); printf(*打開文件(open)n); printf(*關(guān)閉文件(close)n); printf(*讀取文件(read)n); printf(*編寫文件(write)n); printf(*顯示文件目錄(printufd)n); printf(*顯示打開文件目錄(dir)n); printf(*退出(exit)n); lgin: printf(請輸入用戶名(aj):); scanf(%s,login); if(!strcmp(login,exit) return; for(i=0;i=10) printf(該用戶名不存在!); goto lgin; printUFD(i); for(;n!=1;) printf(請輸入命令:); scanf(%s,&m); if(strcmp(m,create)=0) Create(i); else if(strcmp(m,delete)=0) Delete(i); else if(strcmp(m,open)=0) Open(i); else if(strcmp(m,close)=0) Close(); else if(strcmp(m,read)=0) Read(); else if(strcmp(m,write)=0) Write(); else if(strcmp(m,printufd)=0) printUFD(i); else if(strcmp(m,dir)=0) printAFD(i); else if(strcmp(m,exit)=0) n=1; else printf(出錯n); printf(Saving.n); printUFD(i); getch(); return;用戶登錄時的界面如下:用戶對此模擬系統(tǒng)進(jìn)行各項操作的界面如下:2

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論