版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)成績姓名任倩倩 倪晨學(xué)號20112105902011210542華中師范大學(xué)計(jì)算機(jī)科學(xué)系實(shí)驗(yàn)報(bào)告書實(shí)驗(yàn)題目: 基于兩級目錄結(jié)構(gòu)的簡單文件系統(tǒng)的管理與操作課程名稱:操作系統(tǒng)主講教師:葉俊民教授輔導(dǎo)教師:葉俊民教授班 級:l_j實(shí)驗(yàn)時(shí)間:2013年12月10日目錄CDIO性質(zhì)的實(shí)踐步驟:2構(gòu)思性實(shí)踐(C)(做什么)2設(shè)計(jì)性實(shí)踐(D)(準(zhǔn)備怎么做)2實(shí)現(xiàn)性實(shí)踐(1)(做的結(jié)果)2運(yùn)行性實(shí)踐(0)(做的方式)3一、實(shí)驗(yàn)?zāi)康?二、實(shí)驗(yàn)內(nèi)容3三、實(shí)驗(yàn)壞境3四、實(shí)驗(yàn)詳細(xì)實(shí)現(xiàn)過程與算法流程3五、源程序(加注釋)5六、實(shí)驗(yàn)結(jié)果19CDIO性質(zhì)的實(shí)踐步驟:構(gòu)思性實(shí)踐(C)采用兩級目錄,即設(shè)置主文件目錄MFD和
2、用戶文件目錄UED o在主文件目 錄中,每個(gè)用戶目錄都占有一個(gè)目錄項(xiàng),其目錄項(xiàng)中包含文件名和指向該文件目 錄文件。在用戶文件目錄UFD中,這些文件目錄具有相似的結(jié)構(gòu)。具體測試時(shí)可 考慮:設(shè)計(jì)一個(gè)10個(gè)用戶的文件系統(tǒng),每次用戶可保存10個(gè)文件,一次運(yùn)行用 戶可以打開5個(gè)文件,并需要對文件設(shè)置保護(hù)措施。(2)設(shè)計(jì)并實(shí)現(xiàn) Create Open、Read Write、Close、Delete 等文件命令的 算法,用戶可通過菜單方式或者API方式實(shí)現(xiàn)對自己文件的管理。設(shè)計(jì)性實(shí)踐(D)1、確定基本數(shù)據(jù)結(jié)構(gòu),MFD, UFD. , Userinf, Fileinf, File,以及每個(gè)數(shù) 據(jù)結(jié)構(gòu)可以進(jìn)行的
3、對應(yīng)操作。2、確定每個(gè)函數(shù)的參數(shù)、返回對象,并且完成每個(gè)函數(shù),沒完成一個(gè)函數(shù), 需要進(jìn)行一次測試。3、確定用戶菜單,并將用戶菜單與對應(yīng)的函數(shù)操作進(jìn)行關(guān)聯(lián)。4、完整測試每個(gè)功能,找出存在的缺陷,并對用戶界面做適當(dāng)調(diào)整。具體 可參見本實(shí)驗(yàn)報(bào)告的“三、實(shí)驗(yàn)環(huán)境”和“四、實(shí)驗(yàn)設(shè)計(jì)原理”。實(shí)現(xiàn)性實(shí)踐1、完成代碼編寫,形成.c源文件與.exe可執(zhí)行文件;2、進(jìn)行演示,演示應(yīng)包含所有功能點(diǎn),將演示結(jié)果截圖保存;完成實(shí)驗(yàn)報(bào)告說明,具體可參見本實(shí)驗(yàn)報(bào)告的“五、實(shí)驗(yàn)詳細(xì)實(shí)現(xiàn)過程與算 法流程”、“六、實(shí)驗(yàn)調(diào)試”和“七、源程序”。運(yùn)行性實(shí)踐(O)1、小組成員確定程序需要完成的功能,并詳細(xì)列出功能點(diǎn)為后期檢查程序是否滿
4、足需求做準(zhǔn)備。2、確定編碼人員,由編碼人員完成基本編碼工作,另一人負(fù)責(zé)對完成的程 序進(jìn)行測試,檢查是否滿足所有的功能點(diǎn)。3、對不滿足的功能點(diǎn)或缺少的功能點(diǎn)進(jìn)行修改或增加,重復(fù)第2步,直至 符合要求。4、完成上機(jī)驗(yàn)收。具體可參見本實(shí)驗(yàn)報(bào)告的和“九、實(shí)驗(yàn)結(jié)果分析”和“十一、實(shí)驗(yàn)總結(jié)”。一、實(shí)驗(yàn)?zāi)康模簽榱四M文件系統(tǒng)實(shí)現(xiàn)的基本功能,了解文件系統(tǒng)的基本結(jié)構(gòu)和文件的各種 管理方法,加深理解文件系統(tǒng)的內(nèi)部功能及內(nèi)部實(shí)現(xiàn),理解文件管理的工作過程, 加深各種文件操作命令的實(shí)質(zhì)內(nèi)容和執(zhí)行過程的了解,現(xiàn)要求編程模擬一個(gè)簡單 的文件系統(tǒng),以實(shí)現(xiàn)對文件系統(tǒng)的管理和控制功能,支持用戶對自己文件的管理 與操作。二、實(shí)驗(yàn)內(nèi)
5、容:(1) 要求本文件系統(tǒng)采用兩級目錄,即設(shè)置主文件目錄MFD和用戶文件目錄 UED o在主文件目錄中,每個(gè)用戶目錄都占有一個(gè)目錄項(xiàng),其目錄項(xiàng)中 包含文件名和指向該文件目錄文件。在用戶文件目錄UFD中,這些文件目 錄具有相似的結(jié)構(gòu)。具體測試時(shí)可考慮:設(shè)計(jì)一個(gè)10個(gè)用戶的文件系統(tǒng), 每次用戶可保存10個(gè)文件,一次運(yùn)行用戶可以打開5個(gè)文件,并需要對 文件設(shè)置保護(hù)措施。(2) 設(shè)計(jì)并實(shí)現(xiàn) Create Open、Read Write、Close、Delete 等文件命令的 算法,用戶可通過菜單方式或者API方式實(shí)現(xiàn)對自己文件的管理。三、實(shí)驗(yàn)環(huán)境:Windows操作系統(tǒng)、VC+6. 0、C語言四、實(shí)驗(yàn)
6、詳細(xì)實(shí)現(xiàn)過程與算法流程my_foimat:對文件存儲器進(jìn)行格式化,即按照文件系統(tǒng)的結(jié)構(gòu)對虛擬磁盤空間進(jìn)行布局, 并在其上創(chuàng)建根目錄以及用于管理文件存儲空間等的數(shù)據(jù)結(jié)構(gòu)。my_mkdir:用于創(chuàng)建子目錄。my_imdk:用于刪除子目錄。my_ls:用于顯示目錄中的內(nèi)容。my_cd:用于更改當(dāng)前目錄。my_create:用于創(chuàng)建文件。my_open:用于打開文件。 my_close:用于關(guān)閉文件。my_write:用于寫文件。my_read:用于讀文件。my_im:用于刪除文件。my_exitsys:用于退出文件系統(tǒng)。1. 打開文件函數(shù)fopen()(1)格式:FILE *fbpen(const
7、char * filename,const char *mode)(2)功能:按照指定打開方式打開指定文件。(3)輸入?yún)?shù)說明:filename :待打開的文件名,如果不存在就創(chuàng)建該文件。mode:文件打開方式,常用的有:V:為讀而打開文本文件(不存在則出錯(cuò))?!眞”:為寫而打開文本文件(若不存在則創(chuàng)建該文件;反之,則從文件起始位置寫,原內(nèi)容將 被覆蓋)?!盿”:為在文件末尾添加數(shù)據(jù)而打開文本文件。(若不存在則創(chuàng)建該文件;反之,在原文件末尾 追加)。為讀和寫而打開文本文件。(讀時(shí),從頭開始:在寫數(shù)據(jù)時(shí),新數(shù)據(jù)只覆蓋所占的空間, 其后不變)?!?W+”:首先建立一個(gè)新文件,進(jìn)行寫操作,隨后可以從
8、頭開始讀。(若文件存在,原內(nèi)容將 全部消失)?!盿+“:功能與”聲相同;只是在文件末尾添加新的數(shù)據(jù)后,可以從頭開始讀。另外,上述模式字符串中都可以加一個(gè)b”字符,如rb、wb、ab、rb+、wb+、ab+等組合, 字符“b”表示fopen()函數(shù)打開的文件為二進(jìn)制文件,而非純文字文件。(4)輸出:一個(gè)指向FILE類型的指針。2. 關(guān)閉文件函數(shù)fcloseQ(1)格式:mt fclose(FILE * stream);(2)功能:用來關(guān)閉先前fopen()打開的一個(gè)文件。此動(dòng)作會(huì)讓緩沖區(qū)內(nèi)的數(shù)據(jù)寫入文件中, 并釋放系統(tǒng)所提供的文件資源。(3)輸入?yún)?shù)說明:stream:指向要關(guān)閉文件的指針,它是
9、先前執(zhí)行fopen()函數(shù)的返回值。(4)輸出:若關(guān)閉文件成功則返回0;有錯(cuò)誤發(fā)生時(shí)則返回EOF并把錯(cuò)誤代碼存到em】o。3. 讀文件函數(shù)fieadQ(1)格式:size_t fread( void *buffer, size_t size, size_t count, FILE * stream):(2)功能:讀二進(jìn)制文件到內(nèi)存。(3)輸入?yún)?shù)說明:buffer:用于存放輸入數(shù)據(jù)的緩沖區(qū)的首地址;stream:使用fopen()打開的文件的指針,用于指示要讀取的文件; size:每個(gè)數(shù)據(jù)塊的字節(jié)數(shù):count:要讀入的數(shù)據(jù)塊的個(gè)數(shù);size*count:表示要求讀取的字節(jié)數(shù)。(4)輸出:實(shí)際
10、讀取的數(shù)據(jù)塊的個(gè)數(shù)。4. 寫文件函數(shù)fwiiteQ(1)格式:size_t fvite(const void *bufier,size_t size,size_t count,FILE *stream);(2)功能:將數(shù)據(jù)寫到二進(jìn)制文件中。(3)輸入?yún)?shù)說明:buffer:用于存放輸出數(shù)據(jù)的緩沖區(qū)的首地址;stream:使用fopen()打開的文件的指針,用于指示要寫出的文件;size:每個(gè)數(shù)據(jù)塊的字節(jié)數(shù);count:要寫出的數(shù)據(jù)塊的個(gè)數(shù);size*count:表示要求寫出的字符數(shù)。(4)輸出:實(shí)際寫出的數(shù)據(jù)塊的個(gè)數(shù)。5.判斷文件結(jié)束函數(shù)feofO(1) 格式:mt feof(FILE * s
11、tream)(2) 功能:用來判斷是否已讀取到文件末尾。(3) 輸入?yún)?shù)說明:stream:使用fopen()打開的文件的指針,用于指示要判斷的文件。(4) 輸出:如果已讀到文件尾則返回非零值,其他情況返回0。6主要函數(shù)功能實(shí)現(xiàn):int forniatQ; /格式化磁盤mt mkdn(cliaf *sonfiiame); / 創(chuàng)建子目錄mt rmdir(char *sonfiiame); / 刪除子目錄iiit create(char *name); / 創(chuàng)建文件int listshowQ;/顯示子文件信息mt delfile(chai *name); 刪除文件mt changePath(ch
12、ai- *soiifname);/ 更改當(dāng)前路徑iiit write(char *naine); / 寫入文件int exit。;/退出系統(tǒng)mt open(chai- *file);打開文件mt close(char *file);/ 關(guān)閉文件mt read(char *file);/讀取文件五、源程序:#include #include #include #include using namespace std;define GENERAL 1/1代表普通文件2代表目錄文件0表示空文件define DIRECTORY 2frdefine Zero 0 stmct FCBchai fhame1
13、6; /文件名chai- type; 0空文件1目錄文件2空文件 int size; 文件大小int fatheiBlockNum; 當(dāng)前的父目錄盤塊號int currentB lockNum; 當(dāng)前的盤塊void uiitializeQstrcpv(fiiame,OH);type = Zero;size =0; fatlierBlockNum = cunentBlockNum = 0;const char* FilePath = HC:niyfilesM;/*常量設(shè)置*7const mt BlockSize = 512;盤塊人小const mt OPEN_MAX = 5;能打開最多的文件數(shù)c
14、onst iiit BlockCount = 128;/盤塊數(shù)const iiit DiskSize = BlockSize * BlockCount; 磁盤人小const mt BlockFcbCount = BlockSize/sizeof(FCB)/目錄文件的最多 FCB 數(shù)mt OpeiiFileCount = 0; /統(tǒng)計(jì)當(dāng)前打開文件數(shù)目stiuct OPENLIST 用戶文件打開表int files; 當(dāng)前打開文件數(shù)FCB fOPEN_MAX; /TCB 拷貝OPENLISTQfiles=O;for(mt i=0:iOPEN_MAX;i+)fi .fatherB lockNum =
15、 -1 ; 為分配打開fi. type=GENERAL;stmct duFile/*目錄文件結(jié)構(gòu)*/stmct FCB fcbBlockFcbCount;void uiit(int _FatherBlockNum,iiit _CunentBlockNum,char *name)/父塊號,當(dāng)前塊號,目 錄名strcpv(fcb0.fiiame4iame); /本身的 FCB fcb0.fatherBlockNum=_FatlieiBlockNuni; fcb0.cuiTentBlockNum=_CuiTentBlockNum; fcbO .type=DIRECTORY; 標(biāo)記目錄文件 fbr(i
16、nt i= 1 ;iforniat();/打開文件列表初始化delete openlist;opeiilist=new OPENLIST;/*保存到磁盤上myfiles*/fp = fopen(FilePath/w+H);fwrite(BaseAddr,sizeof(char),DiskSize,fp);fclose(fp);pnntf(”格式化成功! ! n”);return 1;iiit nikdii(chai *sonfiiame)/*倉J建子 目 錄*/判斷是否有重名尋找空白子目錄項(xiàng)尋找空白盤塊號當(dāng)前目錄卞增加該子目錄項(xiàng)分配子目 錄盤塊,并且初始化修改fat表int itempjFAT
17、;stmct dirFile *dn; 當(dāng)前目錄的指針incurrent = 2) II 根目錄di尸&(osPoint-root);elsedir=(stmct dirFile *)(osPoiiit-data cunent-3);/*為了避免該目錄下同名文件夾*/fbr(i = 1 ;ifcbi.tvpe=DIRECTORY & sticnip(du-fcbi.fhame,sonfhame)=0) pnntf(”該文件夾下已經(jīng)有同名的文件夾存在了 !n”); return 0;for(i = l;i fcbi .type=Zero)break;if(i = BlockFcbCount)pn
18、mf(”該目錄已滿!請選擇新的目錄下創(chuàng)建!n”);return 0;temp = i;fbr(i = 3;i FAT 1 i = 0)break;if(i = BlockCount)磁盤己滿!n);return 0;1FAT=1;/*接下來進(jìn)行分配*/osPoint-FAT 1 iFAT=osPomt-FAT2iFAT = 2;/2 表示分配給下級目錄文件填寫該分派新的盤塊的參數(shù)strcpv(dif-fcbtemp.fhame,sonfiiame);du-fcbtemp.type=DIRECTORY;du-fcbtemp.fatheiBlockNiim=cunent; du-fcbtemp.c
19、urrentBlockNum=iFAT;初始化子目錄文件盤塊dii-(stmct dirFile*)(osPomt-data 1FAT-3);定位到子目錄盤塊號du-iiut (current,iFAT.sonfhame)y/iFAT是要分配的塊號,這里的current用來指要分配的 塊的父塊號printf(倉9建子目錄成功! n);return 1;mt imdir(char *sonfiiame)/*刪除當(dāng)前目錄下的文件夾*/int i,temp,j;/確保當(dāng)前目錄F有該文件,并記錄下該FCB K標(biāo)stmct dirFile *dn;當(dāng)前目錄的指針if(current=2)di尸&(osP
20、oint-root);elsedir=(stmct dirFile *)(osPoiiit-data cunent-3);for(i=l ;ifcbi.tvpe=DIRECTORY & sticmp(dir-fcbi.fname,sonfhame)=0) break;temp=i:if(i=BlockFcbCount)prmtf(當(dāng)前目錄卜-不存在該子目錄!n”);return 0;pnntf(”己經(jīng)達(dá)到目錄項(xiàng)容納上限,無法創(chuàng)建新目錄!5”); return 0;for(i = 3;iFAT 1 i=0)break;if(i=BlockCount) pnntf(磁盤己滿!n);return 0
21、;1FAT=1;/*進(jìn)入分配階段*/分配磁盤塊osPoint-FATliFAT = osPomt-FAT2iFAT = 1;/*接卞來進(jìn)行分配*/填寫該分派新的盤塊的參數(shù)strcpv(dir-fcbemptyNum fham 匕 ikhm);du-fcbemptyNum .type=GENERAL;du-fcbemptyNum. fatherB lockNum=cunent; du-fcbemptyNum.cunentBlockNum=iFAT;du-fcbemptyNum .size =0;chai* p = osPoint-dataiFAT -3;meniset(p,4,Blocksize
22、);pnntf(在當(dāng)前目錄卜創(chuàng)建文本文件成功! 5”);return 1;/*查詢子目錄*/mt listshowQint i,DirCount=0,FileCount=0;搜索當(dāng)前目錄stmct dirFile *dn;當(dāng)前目錄的指針if(current=2)di尸&(osPoint-root);elsedir=(stmct dirFile *)(osPoiiit-data cunent-3);fbr(i= 1 ;ifcbi.tvpe=GENERAL)/查找普通文件FileCount+;priiitf(n%s 文本文件.nu,dir-fcbi.fhame); if(du-fcbi.type=
23、DIRECTORY) 查找目錄文件DirCouiit+;prmtf(H%s文件夾.irdu-fcbi.fhame);piintf(Mn該目錄卜共有%d個(gè)文本文件,d個(gè)文件夾XnXnFileCount.DirCouiit); return 1;/*在當(dāng)前目錄下刪除文件*/mt delfile(chai- *name)int ijempj;確保當(dāng)前目錄下有該文件,并且記錄卞它的FCB卞標(biāo)stmct dirFile *dir;當(dāng)前目錄的指針incurrent = 2)di尸&(osPoint-root);elsedir=(stmct dirFile *)(osPoiiit-data cunent-3
24、);for(i=l;i fcbi.tvpe=GENERAL & strcmp(du-fcbi.fiiainejiame尸=0) break;if(i = BlockFcbCount)pnntf(”當(dāng)前目錄卜不存在該文件!n);return 0;int k;foi(k=0;kf kJ. type = GENERAL)&(sticmp(opeiilist-f k fiiame jiame)=0) if(openlist-flk .fatherBlockNum = current) break;elsepnntf(”該文件未在當(dāng)前目錄下!n”);return 0;以k!=OPEN_MAX) clos
25、e(name);從打開列表中刪除/*開始刪除文件操作*/temp=i:j = dir-fcb temp.cuirentBlockNum ;查找盤塊號 josPoint-FAT 1 (j=osPomt-FAT2j=0; /fatl,fat2 表標(biāo)記為空白 char *p=osPomt-dataj -習(xí);meniset(p,O,Blocksize); 清除原文本文件的內(nèi)容 dii-fcbtemp .initializeQ; /type=O;標(biāo)記該目錄項(xiàng)為空文件pmitf(在當(dāng)前目錄卜刪除文件成功! n);return 1;/*進(jìn)入當(dāng)前目錄下的子目錄*/mt changePath(chai- *so
26、iifiiame)stmct dirFile *dk;當(dāng)前目錄的指針if(current=2)di尸&(osPoint-root);elsedir=(stmct dirFile *)(osPoiiit-data cunent-3);/*回到父目錄*/if(strcmp(soiifiiame,n. ”)=0) if(cunent=2)pimtfC你現(xiàn)已經(jīng)在根目錄下!n);return 0;current = du-fcb0.fatherBlockNum;curientPath = curientPatli.substr(05cunentPath.size() strlen(dir-fcb0.fi
27、iame )-1); return 1;/*進(jìn)入子目錄*/確保當(dāng)前目錄下有該目錄,并且記錄下它的FCB卜標(biāo)int i,temp;for(i = 1; i fcbi.tvpe=DIRECTORY&strcmp(du-fcbi .fiiame,sonfiiame)=0) temp=i;break;if(i=BlockFcbCount)prmtf(不存在該目錄!n“);return 0;修改當(dāng)前文件信息current=dir-fcb temp .cunentBlockNum;currentPatli = cunentPath+dk-fcb temp.fiiame +”;pmitf(進(jìn)入當(dāng)前目錄卞的子
28、目錄成功! n”);return 1;mt exitQ/保存到磁盤上 C:niyfiles將所有文件都關(guān)閉/*System exit*/Q)=fbpen(FilePath;,w+H);fwrite(BaseAddr,sizeof(char),DiskSize,Q);fclose(fp);釋放內(nèi)存上的虛擬磁盤free(osPoint);釋放用戶打開文件表delete opeiilist;pnntf(”退出文件系統(tǒng)成功! iin”);return 1;iiit write(char *name)/*在指定的文件里記錄信息*/int i;char *staitPomt,*endPomt;在打開文件列
29、表中查找file(還需要考慮同名不同目錄文件的情況!) for(i=0;KOPEN.MAX;i+)if(strcmp(openlist-f i.fiiame4iame)=0 )if(openlist-fli .fatheiBlockNum =cunent) break;elsepmitfC該文件處于打開列表中,本系統(tǒng)只能改寫當(dāng)前目錄下文件!n”); return 0;選=OPEN_MAX)pnntf(”該文件尚未打開,請先打開后寫入信息!n”);return 0;int active=i;int fileStartNum = openlist-factive.cuiTentBlockNum -
30、 3 ; staitPomt = osPomt-datafileStanNum;endPomt = osPoint-datafileStartNum + 1;pnntf(請輸入文本以CtrlD號結(jié)束:t”);char input;while(input=getcharQ) =4) if(staitPomt endPouit-1) *staitPoiiit+ = mput;elseprintf(達(dá)至lj單體文件最大容量! “);*startPoiiit-H- = 4;break;return 1;int read(char *file)/*選擇一個(gè)打開的文件讀取信息*/int i.fileSta
31、rtNum:char *staitPomt,*endPomt;/stiuct duFile *dir;在打開文件列表中查找file(還需要考慮同名不同目錄文件的情況!) for(i=0;if i.fiiame,file)=0) if(openlist-fli .fatheiBlockNum =cunent) break;elseprmtfC該文件處于打開列表中,本系統(tǒng)只能閱讀當(dāng)前目錄下文件!n”); return 0;if(i=OPEN_MAX)pnmf(”該文件尚未打開,請先打開后讀取信息!n”);return 0;int active=i;/計(jì)算文件物理地址fileStartNum = o
32、peiilist-factive.cunentBlockNum - 3 ; staitPomt = osPomt-datafileStailNum;endPomt = osPoint-datafileStartNum + 1;printfC該文件的內(nèi)容為:”);while(*staitPomt)! =4& (stanPomt endPomt)putchar(*stanPomt-H-);pimtffE);return 1;int open(chai- * file)/打開文件/*當(dāng)前目錄下添加一,個(gè)打開文件*/int LFcblndex;確保沒有打開過該文件=相同名字+相同目錄fbr(i=0;i
33、fi.type GENERAL & strcmp(openlist-f i.fiiame,file)=0 &o penlist-fli .fatherBlockNum = current)pimtfC該文件已經(jīng)被打開!n);retuni 0;確保有空的打開文件項(xiàng)if(opeiilist-files = OPEN_MAX)pnmf(”打開文件數(shù)目達(dá)到上限!無法再打開新文件.5”); retuni 0;確保當(dāng)前目錄下有該文件,并且記錄卞它的FCB卞標(biāo)stmct dirFile *dn;當(dāng)前目錄的指針if(current=2)di尸&(osPoint-root);elsedir=(stmct dir
34、File *)(osPoiiit-data cunent-3);for(i = l;ifcbi.tvpe=GENERAL & strcmp(dii-fcbi.fiiaine,file尸=0 ) Fcbliidex=i;break;if(i=BlockFcbCount)pnntf(”當(dāng)前目錄卜不存在該文件!n);return 0;裝載新文件進(jìn)入打開文件列表,(FCE信息,文件數(shù)卄)? ?難道名字過不來? opeiilist-fOpeiiFileCount = dir-fcbFcbIiidex; /FCB 拷貝 opeiilist-files +;printfC文件打開成功! n”);OpeiiF
35、ileCount+;return 1;mt close(chai *file)釋放該文件所占內(nèi)存/釋放用戶打開文件列表表項(xiàng)inti;在打開文件列表中查找file(還需要考慮同名不同目錄文件的情況!) for(i=0;if i.tvpe = GENERAL)&(sticmp(opeiilist-f i. fiiame, file)=0) if(openlist-fli .fatherBlockNum = current)break;elseprmtfC該文件已打開,但未在當(dāng)前目錄下,無法關(guān)閉!n”); return 0;if(i=OPEN_MAX)pnmf(”該文件未在打開列表中!n”);ret
36、imi 0;int active=i;opeiilist-files 一;opeiilist-factive.initialize();OpeiiFileCount-;printf(”該文件己關(guān)閉!n”);return 1;mt mam()printf(M Welcome To My Operate System Of File(FAT)n);pmitf(”n以下是使用說明書:n);使用說明書 pm】tf(0);pmitf(” format :對磁盤格式化. n”);pnntf(, exit :安全退出該文件系統(tǒng),保存信息.);printf(M nikdk diiname :創(chuàng)建子目錄. n”
37、);pnntf(M nndir dimarne :刪除子目錄. n”);Is diiname :顯示當(dāng)前目錄下信息. n);printf(M cd diiname :更改當(dāng)前目錄. n”);pnntf(, create filename :創(chuàng)建一個(gè)新文件,并且打開. n);pnntf(, write filename :選擇一個(gè)打開的文件寫入信息 n);piintfC1 readfilename :選擇一,個(gè)打開的文件讀取信息.5);pnntf(M rmfilename :刪除文件. nn);printf(M openfilename :打開文件.5);printf(M close filen
38、ame :關(guān)閉文件.nM);pm】tf( nn”);opeiilist=new OPENLIST; /創(chuàng)建用戶文件打開表BaseAdd尸(char *)malloc(DiskSize);/申請虎擬空間并且初始化 osPoint=(stmct DISK *)(BaseAddi);/虛擬磁盤初始化 if(fp=fopeii(FilePath;r)!=NULL)/ 加載磁盤文件 fiead(BaseAddisizeof(chai).DiskSize.fp);prmtf(H加載磁盤文件(%s)成功,現(xiàn)在可以進(jìn)行操作T IWFilePath);pnntfT這是你第一次使用該文件管理系統(tǒng)!t正在初始化W)
39、; format();pnmf(初始化已經(jīng)完成,現(xiàn)在可以進(jìn)行操作了!nn”);while(l)coutcunentPath;cincmd;if(cmd=nforniatH)forma tQ;else if(cmd=HnikduH)cmconunand; nikdu(conmiand);else if(cmd=Hrmdu H) ciiiconmiand;rmdu(conmiaiid);else if(cmd=Hlsn) listshowQ;else if(cmd=HcdH) cuiconmiand; changePath(conmiand);else if(cmd=HcreateH) cuiconmiand; create(conmiand);else if(cmd=HwnteM) cuiconmian
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 44836-2024紡織品草甘膦及其鹽的測定
- 七年級語文上學(xué)期期中專題十三 非連續(xù)性文本閱讀(重點(diǎn)強(qiáng)訓(xùn))(原卷版)
- 劇目委托制作合同范例
- 醫(yī)院電力安裝合同范例
- 2025合同協(xié)議交通事故工傷賠償保險(xiǎn)補(bǔ)償制度
- 農(nóng)村裝修包干合同范例
- 家宴合同范例
- 2025不銹鋼板購銷合同范本
- 外包廣告安裝合同范例
- 甘蔗合同范例
- 2024年漢口銀行股份有限公司招聘筆試沖刺題(帶答案解析)
- 集成電路高可靠高密度封裝(一期)項(xiàng)目可行性研究報(bào)告
- 閩2023-G-01先張法預(yù)應(yīng)力高強(qiáng)混凝土管樁DBJT13-95
- 《韓國的語言》課后答案
- 寵物醫(yī)療創(chuàng)新創(chuàng)業(yè)
- 報(bào)價(jià)單(產(chǎn)品報(bào)價(jià)單)
- 一種基于STM32的智能門鎖系統(tǒng)的設(shè)計(jì)-畢業(yè)論文
- 項(xiàng)目經(jīng)理及主要管理人員能力水平
- 工程倫理-工程案例分析
- 纜車合唱鋼琴伴奏譜
- 小學(xué)四年級上冊數(shù)學(xué)集體備課-記錄
評論
0/150
提交評論