模擬實(shí)現(xiàn)單級(jí)目錄、單級(jí)索引的索引文件系統(tǒng)_第1頁(yè)
模擬實(shí)現(xiàn)單級(jí)目錄、單級(jí)索引的索引文件系統(tǒng)_第2頁(yè)
模擬實(shí)現(xiàn)單級(jí)目錄、單級(jí)索引的索引文件系統(tǒng)_第3頁(yè)
模擬實(shí)現(xiàn)單級(jí)目錄、單級(jí)索引的索引文件系統(tǒng)_第4頁(yè)
模擬實(shí)現(xiàn)單級(jí)目錄、單級(jí)索引的索引文件系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩14頁(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)介

課程設(shè)計(jì)報(bào)告課程名稱操作系統(tǒng)課題名稱模擬實(shí)現(xiàn)單級(jí)目錄、索引的系統(tǒng)專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班級(jí)計(jì)算機(jī)1181學(xué)號(hào)201113030128姓名蔡彪指導(dǎo)教師周鐵山2014年01月02日湖南工程學(xué)院課程設(shè)計(jì)任務(wù)書(shū)課程名稱操作系統(tǒng)課題模擬實(shí)現(xiàn)單級(jí)目錄、索引的系統(tǒng)專業(yè)班級(jí)計(jì)算機(jī)1181學(xué)生姓名蔡彪學(xué)號(hào)201113030128指導(dǎo)老師周鐵山審批任務(wù)書(shū)下達(dá)日期2013年12月26日任務(wù)完成日期2014年01月02日課程設(shè)計(jì)的性質(zhì)和目的操作系統(tǒng)課程設(shè)計(jì)是計(jì)算機(jī)專業(yè)的專業(yè)課程,通過(guò)課程設(shè)計(jì)使學(xué)生進(jìn)一步穩(wěn)固課堂所學(xué)知識(shí),全面熟悉、掌握操作系統(tǒng)的根本設(shè)計(jì)方法和技巧,進(jìn)一步提高分析問(wèn)題、解決問(wèn)題及上機(jī)操作能力,為將來(lái)從事計(jì)算機(jī)工作打下一定的專業(yè)根底。設(shè)計(jì)課題課題一:模擬實(shí)現(xiàn)單級(jí)目錄的FAT文件系統(tǒng)根本思路:用二進(jìn)制文件空間模擬磁盤(pán)空間,用文件塊操作模擬磁盤(pán)塊操作。根本設(shè)計(jì)要求:1、實(shí)現(xiàn)如下文件系統(tǒng)功能〔過(guò)程或函數(shù)〕:掛載文件系統(tǒng)FILE*OPENSYS(char*filename);卸載文件系統(tǒng)intCLOSESYS(FILE*stream);顯示目錄voidLISTDIR(void);建立文件intFCREATE(char*filename);刪除文件intFDELETE(char*filename);翻開(kāi)文件intFOPEN(char*filename);關(guān)閉文件intFCLOSE(intfileid);文件塊讀intFREAD(void*ptr,intn,intfileid);文件塊寫(xiě)intFWRITE(void*ptr,intn,intfileid);判斷文件結(jié)束intFEOF(intfileid);獲取文件指針longFGETPOS(intfileid);設(shè)置文件指針intFSETPOS(intfileid,longoffset);取得文件長(zhǎng)度longFGETLEN(char*filename);2、提供文件系統(tǒng)創(chuàng)立程序3、有功能檢測(cè)模塊4、為簡(jiǎn)化程序設(shè)計(jì),假定目錄區(qū)域大小固定。文件系統(tǒng)空間劃分:保存扇區(qū)FAT表區(qū)〔或字節(jié)映像圖區(qū)〕根目錄區(qū)文件分區(qū)本課題限制C語(yǔ)言文件操縱函數(shù)的使用,只能使用以下C語(yǔ)言文件操縱函數(shù):FILE*fopen(constchar*filename,constchar*mode);intfclose(FILE*stream);intfseek(FILE*stream,longoffset,intwhence);longftell(FILE*stream);size_tfread(void*ptr,size_tsize,size_tn,FILE*stream);size_tfwrite(constvoid*ptr,size_tsize,size_tn,FILE*stream);課題二:模擬實(shí)現(xiàn)單級(jí)目錄、單級(jí)索引的索引文件系統(tǒng)使用鏈接域?qū)⑼晃募母魉饕龎K按順序連接起來(lái);其余各項(xiàng)同課題一。課程設(shè)計(jì)報(bào)告要求設(shè)計(jì)報(bào)告要求A4紙打印成冊(cè);使用學(xué)院統(tǒng)一的封面;課程設(shè)計(jì)報(bào)告每人一份,必須包含如下幾個(gè)方面的內(nèi)容:根本設(shè)計(jì)思想;主要數(shù)據(jù)結(jié)構(gòu);主要實(shí)施流程;所有源代碼;課程設(shè)計(jì)總結(jié)與體會(huì)。分組及選題方法按學(xué)號(hào)順序一人一組,學(xué)號(hào)為奇數(shù)者為課題一,偶數(shù)者為課題二。成績(jī)考核按個(gè)人課題完成情況、設(shè)計(jì)報(bào)告質(zhì)量及對(duì)課程設(shè)計(jì)的態(tài)度等綜合評(píng)定。五、設(shè)計(jì)進(jìn)度安排講課及上機(jī)調(diào)試時(shí)間安排:上課時(shí)間:未定上機(jī)時(shí)間:其余時(shí)間:查閱資料,確定方案,設(shè)計(jì)課題相關(guān)程序。個(gè)人辯論,交課程設(shè)計(jì)報(bào)告。目錄TOC\o"1-2"\h\u18861一、程序的功能 629194二、程序的根本設(shè)計(jì)思路 730438三、主要的數(shù)據(jù)結(jié)構(gòu) 811248四、主要實(shí)施流程101273五、程序調(diào)試及其運(yùn)行結(jié)果 1310349六、設(shè)計(jì)總結(jié)與心得體會(huì) 155983七、附錄(源程序清單) 16一、程序的功能該程序主要模擬實(shí)現(xiàn)單級(jí)目錄、單級(jí)索引的索引文件系統(tǒng),該系統(tǒng)要求能翻開(kāi)文件系統(tǒng);關(guān)閉文件系統(tǒng);顯示目錄;建立文件;刪除文件;翻開(kāi)文件;關(guān)閉文件;文件塊讀;文件塊寫(xiě);判斷文件結(jié)束;獲取文件指針;設(shè)置文件指針;取得文件長(zhǎng)度等功能。要求使用鏈接域?qū)⑼晃募母魉饕龎K按順序連接起來(lái)。二、程序的根本設(shè)計(jì)思路模擬實(shí)現(xiàn)單級(jí)目錄、單級(jí)索引的索引文件系統(tǒng)根本思路:用二進(jìn)制文件空間模擬磁盤(pán)空間,用文件塊操作模擬磁盤(pán)塊操作。在一個(gè)文件系統(tǒng)中對(duì)文件進(jìn)行操作,實(shí)現(xiàn)文件的創(chuàng)立、讀寫(xiě)等等操作。在創(chuàng)立文件時(shí)先在目錄項(xiàng)中進(jìn)行查找,假設(shè)創(chuàng)立的文件已存在,文件的創(chuàng)立首先檢驗(yàn)?zāi)夸浭欠駷榭?,為空那么把文件夾或文件連接到該目錄下,不為空那么把檢查目錄下是否有同名文件夾或文件,有那么提示創(chuàng)立不成功,而文件夾翻開(kāi)是那么把文件夾名稱及其地址壓入翻開(kāi)文件夾棧,文件關(guān)閉那么把文件夾名稱及其地址從翻開(kāi)文件夾棧中拋出。文件夾和文件的刪除,文件夾下沒(méi)有翻開(kāi)的文件或文件沒(méi)有翻開(kāi)才能刪除,否那么刪除失敗,每次操作成功都要更改目錄和FCB信息。該過(guò)程都保存在文件中,是對(duì)文件的操作。本系統(tǒng)建于Windows平臺(tái),開(kāi)發(fā)環(huán)境為WIN-TC。三、主要的數(shù)據(jù)結(jié)構(gòu)1.常量#defineBlockSize512#defineDirSize322.保存扇區(qū)結(jié)構(gòu)structReserveBlock{intsysblocknum;/*文件系統(tǒng)總扇區(qū)數(shù)*/intresblocknum;/*保存扇區(qū)扇區(qū)數(shù)*/intmapblocknum;/*字節(jié)映像圖扇區(qū)數(shù)*/introotblocknum;/*根目錄區(qū)扇區(qū)數(shù)*/charfillchar[BlockSize-4*sizeof(int)];/*填充字節(jié)*/};3.目錄結(jié)構(gòu)structDirBlock{charfilename[11];/*文件名限長(zhǎng)11個(gè)字符*/charfillchar[DirSize-4*sizeof(int)-sizeof(longint)-11];/*填充字節(jié)*/longfilelen;/*文件長(zhǎng)度*/intyear,month,day;/*定義年月日*/intfirstindexaddr;/*文件首索引塊扇區(qū)號(hào)*/};4.索引塊結(jié)構(gòu)structIndexBlock{intdataaddr[BlockSize/sizeof(int)-1];/*數(shù)據(jù)塊塊號(hào)數(shù)組*/intnextindexaddr;/*本文件下一索引塊塊號(hào)*/};5.索引節(jié)點(diǎn)結(jié)構(gòu)structIndexNode{structIndexBlockblock;/*索引塊數(shù)據(jù)*/intblockaddr;/*本節(jié)點(diǎn)索引塊塊號(hào)*/structIndexNode*nextnode;/*指向下一索引節(jié)點(diǎn)的指針*/};6.FCB〔文件控制塊〕結(jié)構(gòu)structFCBBlock{intfileid;/*文件標(biāo)識(shí)*/structDirBlockfileinfo;/*目錄信息*/longfilepos;/*文件讀寫(xiě)指針*/intfdtblockaddr;/*目錄項(xiàng)所在塊號(hào)*/intfdtblockindex;/*目錄項(xiàng)所在塊內(nèi)序號(hào)*/structFCBBlock*next;/*指向下一個(gè)文件控制塊的指針*/structIndexNode*firstindexnode;/*指向第一個(gè)索引節(jié)點(diǎn)的指針*/}四、相關(guān)流程圖4.1創(chuàng)立文件流程圖主界面Start輸入start翻開(kāi)文件系統(tǒng)YN輸入creat來(lái)創(chuàng)立文件主界面Start輸入start翻開(kāi)文件系統(tǒng)YN輸入creat來(lái)創(chuàng)立文件輸入文件名,大小,創(chuàng)立日期判斷是否重名文件創(chuàng)立成功文件創(chuàng)立失敗,重新輸入文件名EndNY4.2刪除文件流程圖創(chuàng)立(creat)一個(gè)文件創(chuàng)立(creat)一個(gè)文件Start判斷是否存在該文件判斷該文件是否被open輸入del成功刪除文件End先close關(guān)閉文件4.3FREAD函數(shù)流程圖StartStarta==NullYa==Nulla->fileid==fileidNa->fileid==fileidNY(a->filepos+n)>((a->fileid*512)+a->fileinfo.filelen)(a->filepos+n)>((a->fileid*512)+a->fileinfo.filelen)Nprintf("超出空間。printf("超出空間。\n")輸出字符串輸出字符串輸出無(wú)此fileid輸出無(wú)此fileida=a->nexta=a->nextEndEnd五、程序調(diào)試及其運(yùn)行結(jié)果下面是程序調(diào)試時(shí)的一些截圖。圖五、輸入扇區(qū)塊數(shù)圖六、成功創(chuàng)立文件圖七、未翻開(kāi)文件,不能進(jìn)行寫(xiě)操作圖八、成功刪除文件圖九、文件刪除之后不能翻開(kāi),顯示不能找到文件設(shè)計(jì)總結(jié)與心得體會(huì)通過(guò)一個(gè)學(xué)期的學(xué)習(xí),操作系統(tǒng)的課程設(shè)計(jì)也要結(jié)課了,總的來(lái)說(shuō)經(jīng)過(guò)這門(mén)課的學(xué)習(xí)收獲還是挺大的,它不但使我更了解了課本知識(shí),穩(wěn)固了課本知識(shí),而且也使我的編程能力有了一定的提高。這次課程設(shè)計(jì)是對(duì)操作系統(tǒng)的一個(gè)總結(jié)和復(fù)習(xí)的過(guò)程,課設(shè)的過(guò)程是個(gè)自我探索、自我學(xué)習(xí)的過(guò)程,其中,我們不僅學(xué)到了專業(yè)的知識(shí),也提升了自己的學(xué)習(xí)能力。在此次課程設(shè)計(jì)中也遇到了不少的問(wèn)題和困難,但是通過(guò)自己的努力和向同學(xué)討教都把他一一的給解決了,總之,通過(guò)這次課程設(shè)計(jì),是我對(duì)文件系統(tǒng)有了更深一部的了解,讓我對(duì)文件系統(tǒng)不再陌生,當(dāng)然自己還有很多缺乏的地方,希望自己在以后的學(xué)習(xí)過(guò)程中不斷的改良,這樣才能讓自己進(jìn)步,才能讓自己更上一層樓。七、附錄源程序代碼:#include<stdio.h>#include<string.h>#include<stdlib.h>#defineBlockSize512#defineDirSize32#defineRootSize2structReserveBlock{intsysblocknum;/*文件系統(tǒng)總扇區(qū)數(shù)*/intresblocknum;/*保存扇區(qū)扇區(qū)數(shù)*/intfatblocknum;/*FAT表扇區(qū)數(shù)*/introotblocknum;/*根目錄區(qū)扇區(qū)數(shù)*/charfillchar[BlockSize-4*sizeof(int)];/*填充字節(jié)*/};structDirBlock{charfilename[11];/*文件名限長(zhǎng)11個(gè)字符*/charfillchar[DirSize-4*sizeof(int)-sizeof(longint)-11];/*填充字節(jié)*/longfilelen;/*文件長(zhǎng)度*/intyear,month,day;/*日期*/intfirstblockaddr;/*文件首塊扇區(qū)號(hào)*/};structFCBBlock{intfileid;/*文件標(biāo)識(shí)*/structDirBlockfileinfo;/*目錄信息*/longfilepos;/*文件讀寫(xiě)指針*/intfdtblockaddr;/*目錄項(xiàng)所在塊號(hào)*/intfdtblockindex;/*目錄項(xiàng)所在塊內(nèi)序號(hào)*/structFCBBlock*next;/*指向下一個(gè)文件控制塊的指針*/};structReserveBlocksys1;structFCBBlock*fcb;structDirBlockfil[32],*dir;/*目錄項(xiàng)*/int*fat1;char*str,*ptr;charfillchar[BlockSize];FILE*fp;FILE*OPENSYS(char*filename){inti;fp=fopen(filename,"rb+");fread(&sys1,1,BlockSize,fp);fat1=(int*)malloc(sys1.sysblocknum);for(i=0;i<sys1.fatblocknum;i++)fread(fat1,sizeof(int)*sys1.sysblocknum,1,fp);/*把根本文件系統(tǒng)都讀進(jìn)來(lái)*/fseek(fp,(sys1.fatblocknum+sys1.resblocknum)*BlockSize,0);/*改指針位置*/dir=fil;/*目錄指針*/fread(dir,DirSize*32,1,fp);returnfp;}intCLOSESYS(FILE*stream){inti;fseek(stream,sys1.resblocknum*BlockSize,0);fwrite(fat1,sizeof(int)*sys1.sysblocknum,1,stream);fseek(fp,(sys1.fatblocknum+sys1.resblocknum)*BlockSize,0);fwrite(dir,DirSize*32,1,fp);fclose(fp);return1;}voidLISTDIR(void)/*顯示目錄*/{inti,flag=0;for(i=0;i<32;i++){if(fil[i].firstblockaddr!=0){if(flag==0)printf("filename\n");flag=1;/*標(biāo)示*/printf("%s\n",fil[i].filename);}}}intFCREATE(char*filename)/*建立文件*/{inti,flag=0,j,k=0,flag1=0,flag2=0,a;intn,m;while(1){a=strlen(filename);/*文件名長(zhǎng)度*/if(a>10){printf("Thisfilelengthtoolong!\n");printf("inputfilenameagain:");scanf("%s",filename);}elsebreak;}while(1){for(i=0;i<32;i++)if(strcmp(filename,fil[i].filename)==0) {printf("thenamealreadyexist\n");printf("inputnameagain:");flag1=1;break; }if(flag1==0)break;scanf("%s",filename);flag1=0;}for(i=(sys1.fatblocknum+sys1.resblocknum+sys1.rootblocknum);i<sys1.sysblocknum;i++)if(fat1[i]==0)flag++;/*統(tǒng)計(jì)磁盤(pán)上為空數(shù)目*/if(flag==0){printf("cipanyiman");/*統(tǒng)計(jì)結(jié)果為0,那么磁盤(pán)已滿*/return0;}printf("kongxiankuaishu:%d\n",flag);printf("inputfilelength:");for(j=0;j<32;j++)if(fil[j].firstblockaddr==0)break;while(1){scanf("%d",&dir[j].filelen);/*輸入目錄項(xiàng)中文件的長(zhǎng)度*/n=(dir[j].filelen/BlockSize)+(dir[j].filelen%BlockSize?1:0);if(n<0||n>flag)/*文件長(zhǎng)度小于0或大于空閑的空間*/{printf("inputlengthtoolong!\n");printf("inputagain:");}elsebreak;}for(i=(sys1.fatblocknum+sys1.resblocknum+sys1.rootblocknum);i<sys1.sysblocknum;i++)/*文件內(nèi)容區(qū)域*/{if(fat1[i]==0){k++;if(flag2==0){dir[j].firstblockaddr=i+1;flag2=1; }else{if(k>=n)/*n文件長(zhǎng)度*/{fat1[m]=i+1;fat1[i]=-1;break; }elsefat1[m]=i+1; }m=i;}}strcpy(dir[j].filename,filename);dir[j].filename[a]='\0';printf("inputyear:");scanf("%d",&dir[j].year);printf("inputmonth:");scanf("%d",&dir[j].month);printf("inputday:");scanf("%d",&dir[j].day);return(1);}intFDELETE(char*filename)/*刪除文件*/{inti,j,k,n,flag=0;structFCBBlock*p;/*文件控制塊指針*/p=fcb;while(p){if(strcmp(filename,fil[p->fdtblockindex].filename)==0)/*目錄項(xiàng)所在序號(hào)*/{printf("thefilehasopen,pleasecloseitbeforedelete!\n");return0;}elsep=p->next;}for(i=0;i<32;i++)/*查找要關(guān)閉的文件*/if(strcmp(filename,fil[i].filename)==0){flag=1;break;}if(flag==0){printf("filecannotfind!\n");return0;}j=fil[i].firstblockaddr;while(1){k=fat1[j-1];fseek(fp,(j-1)*BlockSize,0);/*將指針指向文件的第一個(gè)扇區(qū)的位置*/fwrite(&fillchar,1,BlockSize,fp);fat1[j-1]=0;if(k==-1)break;elsej=k;}memset(&fil[i],0,DirSize);return1;}intFOPEN(char*filename)/*翻開(kāi)文件*/{inti,j=0,k,flag=0;structFCBBlock*p,*q,*r;p=fcb;for(i=0;i<32;i++)if(strcmp(filename,fil[i].filename)==0)/*找到要翻開(kāi)的文件*/{flag=1;break;}if(flag==0){printf("filecannotfind!\n");return0;}while(p){j++;if(strcmp(filename,fil[p->fdtblockindex].filename)==0){printf("Thisfilehasopen!\n");return0;}q=p;p=p->next;}if(fcb==NULL){fcb=(structFCBBlock*)malloc(sizeof(structFCBBlock));fcb->fileid=j+1;/*文件標(biāo)示*/fcb->filepos=0;/*文件讀寫(xiě)指針*/fcb->next=NULL;/*指向下一個(gè)文件控制指針*/fcb->fdtblockindex=i;}else{r=(structFCBBlock*)malloc(sizeof(structFCBBlock));r->fileid=j+1;r->filepos=0;r->next=NULL;r->fdtblockindex=i;q->next=r;}/*f->next=NULL;*/return1;}longFGETLEN(intfileid)/*獲取文件指針*/{structFCBBlock*p;p=fcb;while(p){if(p->fileid==fileid)/*尋找要找的指針*/return(p->filepos);p=p->next;}printf("getfaile!\n");return(0);}intFCLOSE(char*filename)/*關(guān)閉文件*/{intflag=0;structFCBBlock*f,*p;f=fcb;if(strcmp(filename,fil[fcb->fdtblockindex].filename)==0){flag=1;fcb=fcb->next;p=fcb;while(p){p->fileid-=1;p=p->next;}returnflag;}p=f;f=f->next;while(f){if(strcmp(filename,fil[f->fdtblockindex].filename)==0){flag=1;p=f->next; /*p=p->next;*/while(p){p=p->next;p->fileid-=1;}free(f);returnflag;}p=f;f=f->next;}if(flag==0){printf("Thisfilehasnotopen!\n'");returnflag;}return0;}intFREAD(char*str,intn,intfileid)/*文件塊讀*/{intm,i,j=0,k,l,len;chara[3];structFCBBlock*p;p=fcb;while(p){if(p->fileid==fileid)break;elsep=p->next;}len=fil[p->fdtblockindex].filelen;/*文件長(zhǎng)度*/l=p->filepos;/*文件讀寫(xiě)指針:該塊在文件的相對(duì)位置*/printf("nowfileposis:");printf("%d\n",l);printf("iswritingasnowfilepos?(y/n):");scanf("%s",a);if(a[0]=='n'||a[0]=='N'){printf("inputpos:");while(1){scanf("%d",&l);if(fil[p->fdtblockindex].filelen<(l+n))/*?*/printf("toolarge!\ninputagain:");elsebreak;}}while(1){if(n>fil[p->fdtblockindex].filelen){printf("toolarge!\n");printf("inputreadsize,again:");scanf("%d",&n);}elsebreak;}str=(char*)malloc(fil[p->fdtblockindex].filelen+1);m=(len/BlockSize)+(len%BlockSize?1:0);k=fil[p->fdtblockindex].firstblockaddr;if(m>1){fseek(fp,(k-1)*BlockSize,0);fread(str,BlockSize,1,fp);k=fat1[k-1];for(i=1;i<(m-1);i++){fseek(fp,fat1[k-1]*BlockSize,0);fread(&str[i*BlockSize],BlockSize,1,fp);k=fat1[k-1];}fseek(fp,(k-1)*BlockSize,0);fread(&str[i*BlockSize],len-i*BlockSize,1,fp);}else{fseek(fp,(k-1)*BlockSize,0);fread(str,len,1,fp);}str[n+l]='\0';if(l!=0)str=&str[l];p->filepos=n+l;printf("%s\n",str);return1;}voidFWRITE(char*ptr,intn,intfileid){chara[3];longl;intm,i=0,j,k=0,num,flag=0,flag1=0,b;structFCBBlock*p;p=fcb;while(p){if(p->fileid==fileid)break;elsep=p->next;}l=p->filepos;printf("nowfileposis:");printf("%d\n",l);printf("iswritingasnowfilepos?(y/n):");scanf("%s",a);if(a[0]=='n'||a[0]=='N'){printf("inputpos:");while(1){scanf("%d",&l);if(fil[p->fdtblockindex].filelen<(l+n))printf("toolarge!\ninputagain:");elsebreak;}}j=(l/BlockSize)+(l%BlockSize?1:0);if(l==0)j=1;num=fil[p->fdtblockindex].firstblockaddr;for(i=1;i<j;i++)num=fat1[num];do{if(flag==0){fseek(fp,(num-1)*BlockSize+l-(i-1)*BlockSize,0);flag=1;}else{fseek(fp,(num-1)*BlockSize,0);num=fat1[num-1];}if(((n+l)-(i-1)*BlockSize)>BlockSize){if(flag1==0){fwrite(&ptr[0],j*BlockSize-l,1,fp);flag1=1;}else{fwrite(&ptr[j*BlockSize-l+k*BlockSize],BlockSize,1,fp);}}else{m=j*BlockSize-l+(k-1)*BlockSize;b=n-(j*BlockSize-l+(k-1)*BlockSize);fwrite(&ptr[m],b,1,fp);}k++;i++;}while(((n+l)-(i-1)*BlockSize)>1);p->filepos=l+n;}intFEOF(intfileid){intflag;structFCBBlock*p;p=fcb;while(p){if(p->fileid==fileid)break;}if(p->filepos>fil[p->fdtblockindex].filelen)return0;elsereturn1;}longFGETPOS(intfileid){structFCBBlock*p;p=fcb;while(p){if(p->fileid==fileid)return(p->filepos);elsep=p->next;}printf("getfaile!\n");return(0);}intFSETPOS(intfileid,longoffset){structFCBBlock*p;p=fcb;while(p){if(p->fileid==fileid){while(offset>fil[p->fdtblockindex].filelen||offset<0){printf("seterror!Thispos>filelength\n");printf("inputfilepos,again:");scanf("%d",offset);}p->filepos=offset;return1;}elsep=p->next;}printf("getfaile!\n");return(0);}voidDISPLAY(){printf("\t\tpleaseinputyouorder:\n");printf("\t\t建立文件:creat\n");printf("\t\t顯示目錄:list\n");printf("\t\t刪除文件:del\n");printf("\t\t翻開(kāi)文件:open\n");printf("\t\t關(guān)閉文件:close\n");printf("\t\t文件塊讀:read\n");printf("\t\t文件塊寫(xiě):write\n");printf("\t\t退出:exit\n");}voidtest(char*filename){char*t,cmd[10],fname[12];structFCBBlock*p;inti,j,n,flag,len,id,flag1=0;fp=OPENSYS(filename);while(1){DISPLAY();scanf("%s",cmd);if(!strcmp(cmd,"creat")){printf("inputfilename\n");scanf("%s",fname);flag=FCREATE(fname);if(flag==1)printf("Thisfilecreatesuccessfully!\n");}elseif(!strcmp(cmd,"list"))LISTDIR();elseif(!strcmp(cmd,"del")){scanf("%s",fname);flag=FDELETE(fname);if(flag==1)printf("deleteThisfilesuccessfully!\n");}elseif(!strcmp(cmd,"open")){scanf("%s",fname);flag=FOPEN(fname);if(flag==1)printf("Thisfileopensuccessfully!\n");}elseif(!strcmp(cmd,"close")){scanf("%s",fname);flag=FCLOSE(fname);if(flag==1)printf("Thisfileclosesuccessfully!\n");}elseif(!strcmp(cmd,"read")){scanf("%s",fname);p=fcb;flag1=0;while(p){if(!strcmp(fil[p->fdtblockindex].filename,fname)){printf("inpputsize:");scanf("%d",&len);id=p->fileid;flag=FREAD(str,len,id);flag1=1

溫馨提示

  • 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)論