文件系統(tǒng)實(shí)驗(yàn)?zāi)M設(shè)計(jì)文件操作_第1頁(yè)
文件系統(tǒng)實(shí)驗(yàn)?zāi)M設(shè)計(jì)文件操作_第2頁(yè)
文件系統(tǒng)實(shí)驗(yàn)?zāi)M設(shè)計(jì)文件操作_第3頁(yè)
文件系統(tǒng)實(shí)驗(yàn)?zāi)M設(shè)計(jì)文件操作_第4頁(yè)
文件系統(tǒng)實(shí)驗(yàn)?zāi)M設(shè)計(jì)文件操作_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí)驗(yàn)五 文件系統(tǒng)實(shí)驗(yàn)一 . 目的要求 . 用高級(jí)語(yǔ)言編寫(xiě)和調(diào)試一個(gè)簡(jiǎn)單的文件系統(tǒng),模擬文件管理的工作過(guò)程。從而對(duì)各種文件操作命令的實(shí)質(zhì)內(nèi)容和執(zhí)行過(guò)程有比較深入的了解。 要求設(shè)計(jì)一個(gè) n個(gè)用戶的文件系統(tǒng),每次用戶可保存m個(gè)文件,用戶在一次運(yùn)行中只能打開(kāi)一個(gè)文件,對(duì)文件必須設(shè)置保護(hù)措施,且至少有create、delete、open、close、read、write等命令。 二 . 例題: 設(shè)計(jì)一個(gè)n個(gè)用戶的文件系統(tǒng),每次用戶可保存l個(gè)文件,一次運(yùn)行用戶可以打開(kāi)s個(gè)文件。 程序采用二級(jí)文件目錄(即設(shè)置主目錄mfd)和用戶文件目錄(ufd)。另外,為打開(kāi)文件設(shè)置了運(yùn)行文件目錄,用戶已打開(kāi)文件表uof.

2、。 為了便于實(shí)現(xiàn),對(duì)文件的讀寫(xiě)作了簡(jiǎn)化,在執(zhí)行讀寫(xiě)命令時(shí),只需改讀寫(xiě)指針,并不進(jìn)行實(shí)際的讀寫(xiě)操作 算法與框圖: 開(kāi)始初始化文件目錄表初始化已打開(kāi)文件表輸入用戶名mfd中有該用戶?輸入文件操作命令分析命令讀子程序?qū)懽映绦虺蜂N子程序顯示:命令錯(cuò)結(jié)束關(guān)閉子程程序打開(kāi)子程序建立子程序顯示:無(wú)此用戶 因系統(tǒng)小,文件目錄的檢索使用了簡(jiǎn)單的線性搜索。 文件保護(hù)簡(jiǎn)單使用了保護(hù)碼:允許讀寫(xiě)執(zhí)行、對(duì)應(yīng)位為 1,對(duì)應(yīng)位為2,和對(duì)應(yīng)位為3。 程序中使用的主要設(shè)計(jì)結(jié)構(gòu)如下: 主文件目錄和用戶文件目錄( mfd、ufd) 打開(kāi)文件目錄( uof)(即運(yùn)行文件目錄)主文件目錄mfd:用戶名用戶文件數(shù)用戶已打開(kāi)文件數(shù)用戶文件

3、目錄地址用戶已打開(kāi)文件目錄地址abcd用戶文件目錄ufd文件名文件屬性記錄長(zhǎng)度文件地址標(biāo)志(是否空表目)用戶已打開(kāi)文件表uof文件名文件屬性記錄長(zhǎng)度狀態(tài)(打開(kāi)/建立)讀指針寫(xiě)指針標(biāo)志(是否空表目)二、實(shí)驗(yàn)要求:顯示初始的文件目錄表、輸入的文件操作命令和每條命令執(zhí)行后的uof文件,程序運(yùn)行后打印所有用戶的文件目錄表。假定文件系統(tǒng)提供的文件操作有建立文件(create),打開(kāi)文件(open),關(guān)閉文件(close),讀文件(read),寫(xiě)文件(write)和刪除文件(delete),在模擬程序中可以從鍵盤(pán)上輸入文件操作命令來(lái)模擬各用戶程序中所調(diào)用的各種文件操作,用一個(gè)結(jié)束命令(end)停止程序執(zhí)行

4、。主程序結(jié)構(gòu)流圖如下:用輸入命令來(lái)模擬用戶程序中調(diào)用的文件操作,這些命令的格式和和要求如下:建立文件:create(文件名,文件長(zhǎng)度,文件屬性)寫(xiě)文件:write(文件名,記錄號(hào))有兩種情況,第一種是在執(zhí)行create后要求寫(xiě),第二種是在執(zhí)行open后要求寫(xiě),即對(duì)一個(gè)已存在的文件進(jìn)行修改。關(guān)閉文件:close(文件名),對(duì)某個(gè)文件不需要再讀或?qū)憰r(shí),用戶應(yīng)關(guān)閉文件。打開(kāi)文件:open(文件名,操作類型),其中操作類型指出文件打開(kāi)后,用戶將對(duì)文件進(jìn)行讀或?qū)?。約定操作類型與文件屬性不符合或正處于“建立”狀態(tài)的文件不允許打開(kāi)。讀文件:read(文件名,讀長(zhǎng)度),由于文件采用索引,可順序讀,也可隨機(jī)讀,

5、自行設(shè)計(jì)流圖。刪除文件 delete(文件名),從相應(yīng)的用戶文件目錄ufd中將文件控制塊刪除,收回該文件占用的存儲(chǔ)區(qū)域。自行設(shè)計(jì)流程。#include "string.h"#include "stdio.h"#include "conio.h"#include "stdlib.h"#define l 6 /* 用戶最多保存的文件數(shù) */#define n 5 /* 系統(tǒng)可同時(shí)管理的用戶數(shù)*/int u; typedef int sx;/*文件屬性 1為只讀,2為寫(xiě),3為可讀可寫(xiě)*/typedef int zt;/*

6、文件狀態(tài) 1為建立,2為打開(kāi),3為關(guān)閉*/typedef int flag;/*是否空表目,0為空,1為非空*/static int memo128=10,20,30,40,50,60,70,80,90,100,110,120,130,140,150; /*用戶文件目錄*/ struct fcb char filename20;/*文件名*/sx access;/*文件屬性*/int length;/*記錄長(zhǎng)度*/int address5;/*文件地址*/flag flag;/*是否空表目,0為空*/ ;/*用戶已打開(kāi)文件表*/struct uof1 char filename20;/*文件名

7、*/sx access;/*文件屬性*/int length;/*記錄長(zhǎng)度*/zt flag1;/*狀態(tài)*/int write;/*寫(xiě)指針*/ int read;/*讀指針*/flag flag; int address5;/*文件地址*/;struct fcb ufdnl ="abc",2,3,10,20,30,1,"def",1,3,40,50,60,1,"wj",3,3,70,80,90,1, "xyz",1,1,100,1,"aaa",2,1,110,1, "yyx"

8、,1,1,100,1,"ccb",1,1,120,1, "ddd",1,3,40,50,60,1 ;struct uof1 uofnl="abc",2,3,2,0,0,1,10,20,30,"ccb",1,1,2,0,0,1,120;struct mfd1char username10; int count; int opencont; struct fcb *userfaddr; struct uof1 *openfaddr;struct mfd1 mfdn="a",3,0,ufd0,uof0

9、,"b",2,0,ufd1,uof1,"c",2,0,ufd2,uof2,"d",1,0,ufd3,uof3;/*在ufd中找空白表項(xiàng)*/ selectufd() int i; struct fcb *p=mfdu.userfaddr; for(i=0;i<l;i+) if(pi.flag=0) break; if(i<l) return i;else printf("沒(méi)有空登記項(xiàng),文件已滿!n");/*在uof中找空白表項(xiàng)*/ selectuof() int j; struct uof1 *p=mfd

10、u.openfaddr; for(j=0;j<l;j+) if(pj.flag=0) break; if(j<l) return j;else printf("沒(méi)有空登記項(xiàng),用戶已打開(kāi)文件列表已滿!n");/*建立文件函數(shù)*/ void creat(/*char filename,int l,sx access*/) struct fcb *p=mfdu.userfaddr; int i,j; int j,le,address; char s20;char ac;printf("請(qǐng)輸入文件名n");scanf("%s",s

11、); for(j=0;j<l;j+)if(strcmp(pj.filename,s)=0)printf("有同名文件,不能創(chuàng)建!n");break; if(j=l)printf("文件長(zhǎng)度:n");scanf("%d",&le); getchar(); printf("文件屬性:n"); scanf("%d",&ac); getchar(); i=selectufd(); j=selectuof();/*找空登記項(xiàng),*/ strcpy(ufdui.filename,s);

12、ufdui.length=le; ufdui.access=ac; ufdui.flag=1; strcpy(uofuj.filename,s); uofuj.length=le; uofuj.access=ac; uofuj.flag=1; printf("請(qǐng)輸入第一個(gè)地址n"); scanf("%d",&address); for(j=0;j<128;j+)if(memoj=0) memoj=address;break; ufdui.address0=address;uofuj.flag1=1; uofuj.write=address;

13、mfdu.count+;mfdu.opencont+; printf("n文件創(chuàng)建成功!n"); /*以上已調(diào)試完成!20101115*/*關(guān)閉文件函數(shù)*/ void close() int i; char name20;char noname20="00000000"printf("請(qǐng)輸入文件名:n");scanf("%s",name); for(i=0;i<l;i+) if(strcmp(uofi->filename,name)=0) if(uofi->flag1=1) uofi->fl

14、ag1=3; else if(uofi->flag1=2) strcpy(noname,uofi->filename); uofi->access=0; uofi->length=0; uofi->write=0; uofi->flag=0; printf("文件成功關(guān)閉n");break; else printf("文件已經(jīng)關(guān)閉!n") ; /*close 已經(jīng)調(diào)試完成!*/*打開(kāi)文件函數(shù)*/void open() char na20;int c; int x,m,j,i; printf("請(qǐng)輸入要打開(kāi)的文

15、件名 n");getchar(); gets(na) ; printf("你想對(duì)文件進(jìn)行寫(xiě)還是讀操作?n"); scanf("%d",&c); getchar(); for(i=0;i<l;i+)if(strcmp(ufdui.filename,na)=0) m=i;for(j=0;j<5;j+)if(strcmp(uofuj.filename,na)=0) if(uofuj.flag1=1)printf("文件正在被創(chuàng)建,不能打開(kāi)!n");break; else printf("文件已經(jīng)打開(kāi)n

16、");break; if(j=5) /*uof中沒(méi)有該文件,即:該文件尚未打開(kāi)*/ if(ufdum.access=c) for(x=0;x<5;x+) if(uofux.flag=0) strcpy(uofux.filename,ufdum.filename); uofux.length=ufdum.length; uofux.access=ufdum.access; uofux.flag1=2; uofux.flag=1; uofux.read=ufdum.address0; uofux.write=ufdum.address0; printf("文件打開(kāi)成功n&

17、quot;); break; else printf("操作不合法,不能打開(kāi)!n"); break; if(i=l)printf("文件不存在,不能打開(kāi)!n"); /*open()已調(diào)試完!*/*寫(xiě)文件函數(shù)*/ void write() char nam20;int i,j,n,b,e,k; int m=-1; static int ad5;printf("請(qǐng)輸入要進(jìn)行寫(xiě)操作的文件名 n");getchar();gets(nam);for(i=0;i<5;i+) if(strcmp(uofui.filename,nam)=0)

18、if(uofui.flag1=1)/*文件為建立狀態(tài)*/ m=i; for(e=1;e<uofum->length;e+) printf("輸入地址%dn",e); scanf("%d",&ade); for(k=0;k<20;k+) if(ade=memok) printf("the address%d is wrong and input another onen",e); scanf("%d",&ade); break; for(j=0;j<128;j+) if(mem

19、oj=0) memoj=ade; break; uofum.addresse=ade; uofm->write=ade; printf("寫(xiě)文件成功!n"); break; else /*不是建立狀態(tài)*/ if(uofui.access=1) printf("操作不合法,不能寫(xiě)!n");break; else printf("是順序修改嗎?1為順序,0為非順序 1/0?n"); scanf("%d",&n); if(n=1) for(e=0;e<uofum.length;e+) uofum.wr

20、ite=uofum.addresse ; printf("本記錄%d修改完成!,uofm.addressen"); printf("寫(xiě)文件成功!n"); break; else printf("想修改哪條記錄?n"); scanf("%d",&b); printf("the %d record is %d",b,uofum.addressb); uofum.write=uofum.addressb ; printf("本記錄%d修改完成!,uofm.addressen"

21、;); printf("寫(xiě)文件成功!n"); break; if(i=5) printf("文件尚未建立或打開(kāi),不能寫(xiě)! n"); void read() char nam20;int i,le,m=-1;static int ad5;int ipaddress;printf("請(qǐng)輸入要進(jìn)行讀操作的文件名 n");getchar();gets(nam);printf("請(qǐng)輸入讀長(zhǎng)度n");scanf("%d",&le);for(i=0;i<5;i+)/*檢查文件是否已經(jīng)打開(kāi)*/ i

22、f(strcmp(uofui.filename,nam)=0) m=i;if(i=5) printf("文件尚未打開(kāi),不能讀!n");elseipaddress=uofum.read;for(i=0;i<le;i+) printf("%d",ipaddress+);uofum.read=ipaddress;printf("讀文件成功!n"); delet() char noname20="00" struct fcb *p=mfdu.userfaddr; int i; int j,i; char s20;pr

23、intf("請(qǐng)輸入文件名n");scanf("%s",s); for(j=0;j<l;j+)if(strcmp(pj.filename,s)=0)printf("有該文件!n");i=j; for(i=0;i<20;i+)/*檢查文件是否已經(jīng)打開(kāi)*/ if(strcmp(uofi->filename,s)=0) strcpy(noname,uofi->filename); uofi->access=0; uofi->length =0; uofi->write =0; uofi->fla

24、g=0; strcpy(noname,ufdi->filename); ufdi->access=0; ufdi->length=0; ufdi->address0=0; ufdi->flag=0;printf("文件不存在,或文件已經(jīng)撤銷!n"); /*顯示函數(shù)*/void print_ufd() int i ; printf("num filename access length flag ad1 ad2 ad3 ad4 ad5 n "); for(i=0;i<5;i+)printf("n%dt%st%3

25、dt%3dt%3dt%3dt%3dt%3dt%3dt%3dn",i,ufdui.filename,ufdui.access,ufdui.length,ufdui.flag,ufdui.address0,ufdui.address1,ufdui.address2,ufdui.address3,ufdui.address4);void print_uof() int i; printf("num filename access length flag write read flag1 n "); for(i=0;i<5;i+) printf("n%1dt%st%dt%dt%dt%dt%dt%dn",i,uofui.filename,uofui.access,uofui.length,uofui.flag,uofui.write,uofui.read,uofui.flag);void main() char name20; int i

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論