欢迎来到天天文库
浏览记录
ID:57773364
大小:133.50 KB
页数:25页
时间:2020-03-27
《操作系统-文件存储空间高效管理--位示图法.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、#include#include#include#includeusingnamespacestd;structFCB{charfname[16];//文件名inttype;//1代表普通文件2代表目录文件0表示空文件intsize;//文件大小intfatherBlockNum;//当前的父目录盘块号intfirstBlockNum;//该文件第一个盘块号intcurrentBlockNum;//当前的盘块intlastBlockNum
2、;voidinitialize(){strcpy(fname," ");type=0;size=0;fatherBlockNum=firstBlockNum=currentBlockNum=lastBlockNum=0;}};/*常量设置*/constchar*FilePath="C:\myfiles";constintBlockSize=512;//盘块大小(可配置)constintOPEN_MAX=5;//能打开最多的文件数constintBlockCount=BlockSize/sizeof(int)
3、;//盘块数constintDiskSize=BlockSize*BlockCount;//磁盘大小constintBlockFcbCount=BlockSize/sizeof(FCB);//目录文件的最多FCB数constintm=16;//位示图的列数constintn=BlockCount/m;//位示图的行数//constintIOBUF_SIZE=512;//charIOBuffer[IOBUF_SIZE];intOpenFileCount=0;structOPENLIST//用户文件打开表{intf
4、iles;//当前打开文件数FCBf[OPEN_MAX];//FCB拷贝OPENLIST(){files=0;for(inti=0;i5、CurrentBlockNum,int_LastBlockNum,char*name)//父块号,第一个盘块号,当前块号,目录名{strcpy(fcb[0].fname,name);//本身的FCBfcb[0].fatherBlockNum=_FatherBlockNum;fcb[0].firstBlockNum=_FirstBlockNum;fcb[0].currentBlockNum=_CurrentBlockNum;fcb[0].lastBlockNum=_LastBlockNum;fcb[0].type6、=2;//标记目录文件for(inti=1;i7、rFileroot;//根目录intmap[n][m];//位示图,最初都为0intcheck[n][m];//check数组用于一致性检查,作为数据计数器;chardata[BlockCount-5][BlockSize];voidformat(){memset(FAT1,0,BlockCount);//FAT1memset(FAT2,0,BlockCount);//FAT2FAT1[0]=FAT1[1]=FAT1[2]=FAT1[3]=FAT1[4]=-2;//0,1,2盘块号依次代表FAT1,FAT2,根8、目录区FAT2[0]=FAT2[1]=FAT2[2]=FAT2[3]=FAT2[4]=-2;//FAT作备份root.init(2,2,2,2,"G:\");//根目录区for(inti=0;i<=BlockCount;i++)//map[0][0],map[0][1],map[0][1],map[0][2],map[0][3],map[0][4]以及check{//对应位置为占用i
5、CurrentBlockNum,int_LastBlockNum,char*name)//父块号,第一个盘块号,当前块号,目录名{strcpy(fcb[0].fname,name);//本身的FCBfcb[0].fatherBlockNum=_FatherBlockNum;fcb[0].firstBlockNum=_FirstBlockNum;fcb[0].currentBlockNum=_CurrentBlockNum;fcb[0].lastBlockNum=_LastBlockNum;fcb[0].type
6、=2;//标记目录文件for(inti=1;i7、rFileroot;//根目录intmap[n][m];//位示图,最初都为0intcheck[n][m];//check数组用于一致性检查,作为数据计数器;chardata[BlockCount-5][BlockSize];voidformat(){memset(FAT1,0,BlockCount);//FAT1memset(FAT2,0,BlockCount);//FAT2FAT1[0]=FAT1[1]=FAT1[2]=FAT1[3]=FAT1[4]=-2;//0,1,2盘块号依次代表FAT1,FAT2,根8、目录区FAT2[0]=FAT2[1]=FAT2[2]=FAT2[3]=FAT2[4]=-2;//FAT作备份root.init(2,2,2,2,"G:\");//根目录区for(inti=0;i<=BlockCount;i++)//map[0][0],map[0][1],map[0][1],map[0][2],map[0][3],map[0][4]以及check{//对应位置为占用i
7、rFileroot;//根目录intmap[n][m];//位示图,最初都为0intcheck[n][m];//check数组用于一致性检查,作为数据计数器;chardata[BlockCount-5][BlockSize];voidformat(){memset(FAT1,0,BlockCount);//FAT1memset(FAT2,0,BlockCount);//FAT2FAT1[0]=FAT1[1]=FAT1[2]=FAT1[3]=FAT1[4]=-2;//0,1,2盘块号依次代表FAT1,FAT2,根
8、目录区FAT2[0]=FAT2[1]=FAT2[2]=FAT2[3]=FAT2[4]=-2;//FAT作备份root.init(2,2,2,2,"G:\");//根目录区for(inti=0;i<=BlockCount;i++)//map[0][0],map[0][1],map[0][1],map[0][2],map[0][3],map[0][4]以及check{//对应位置为占用i
此文档下载收益归作者所有