操作系统课程设计文件系统

上传人:飞*** 文档编号:45967531 上传时间:2018-06-20 格式:DOC 页数:31 大小:45.59KB
返回 下载 相关 举报
操作系统课程设计文件系统_第1页
第1页 / 共31页
操作系统课程设计文件系统_第2页
第2页 / 共31页
操作系统课程设计文件系统_第3页
第3页 / 共31页
操作系统课程设计文件系统_第4页
第4页 / 共31页
操作系统课程设计文件系统_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《操作系统课程设计文件系统》由会员分享,可在线阅读,更多相关《操作系统课程设计文件系统(31页珍藏版)》请在金锄头文库上搜索。

1、操作系操作系统课统课程程设计设计文件系文件系统统#include stdio.h#include memory.h#include string#include iostream using namespace std;struct FCBchar fname16;/文件名int type;/1代表普通文件2代表目录文件0表示空文件int size;/文件大小int fatherBlockNum;/当前的父目录盘块号int currentBlockNum;/当前的盘块void initialize()strcpy(fname,“message“);type=0;size=0;fatherBlo

2、ckNum=currentBlockNum=0;const char*FilePath=“C:myfiles“;const int BlockSize=512;/盘块大小(可配置)const int OPEN_MAX=5;/能打开最多的文件数const int BlockCount=BlockSize/sizeof(int);/盘块数const int DiskSize=BlockSize*BlockCount;/磁盘大小const int BlockFcbCount=BlockSize/sizeof(FCB);/目录文件的最多FCB数/const int IOBUF_SIZE=512;/ch

3、ar IOBufferIOBUF_SIZE;int OpenFileCount=0;struct OPENLIST/用户文件打开表int files;/当前打开文件数FCB fOPEN_MAX;/FCB拷贝OPENLIST()files=0;for(int i=0;i OPEN_MAX;i+)fi.fatherBlockNum=-1;/为分配打开fi.type=0;struct dirFilestruct FCB fcbBlockFcbCount;void init(int _FatherBlockNum,int _CurrentBlockNum,char*name)/父块号,当前块号,目录名

4、strcpy(fcb0.fname,name);/本身的FCB fcb0.fatherBlockNum=_FatherBlockNum;fcb0.currentBlockNum=_CurrentBlockNum;fcb0.type=2;/标记目录文件for(int i=1;i BlockFcbCount;i+)fcbi.fatherBlockNum=_CurrentBlockNum;/标记为子项fcbi.type=0;/标记为空白项;struct DISKint FAT1BlockCount;/FAT1 int FAT2BlockCount;/FAT2 struct dirFile root;

5、/根目录char dataBlockCount-3BlockSize;void format()memset(FAT1,0,BlockCount);/FAT1 memset(FAT2,0,BlockCount);/FAT2 FAT10=FAT11=FAT12=-2;/0,1,2盘块号依次代表FAT1,FAT2,根目录区FAT20=FAT21=FAT22=-2;/FAT作备份root.init(2,2,“G:“);/根目录区memset(data,0,sizeof(data);/数据区;FILE*fp;/磁盘文件地址char*BaseAddr;/虚拟磁盘空间基地址string currentPa

6、th=“G:“;/当前路径int current=2;/当前目录的盘块号string cmd;/输入指令struct DISK*osPoint;/磁盘操作系统指针char command16;/文件名标识struct OPENLIST*openlist;/用户文件列表指针int format();int mkdir(char*sonfname);int rmdir(char*sonfname);int create(char*name);int listshow();int delfile(char*name);int changePath(char*sonfname);int write(c

7、har*name);int exit();int open(char*file);int close(char*file);int read(char*file);int format()current=2;currentPath=“G:“;/当前路径osPoint-format();/打开文件列表初始化delete openlist;openlist=new OPENLIST;fp=fopen(FilePath,“w+“);fwrite(BaseAddr,sizeof(char),DiskSize,fp);fclose(fp);printf(“-nn“);return 1;int mkdir

8、(char*sonfname)/判断是否有重名/寻找空白子目录项/寻找空白盘块号/当前目录下增加该子目录项/分配子目录盘块,并且初始化/修改fat表int i,temp,iFAT;struct dirFile*dir;/当前目录的指针if(current=2)dir=&(osPoint-root);else dir=(struct dirFile*)(osPoint-datacurrent-3);for(i=1;i BlockFcbCount;i+)if(dir-fcbi.type=2&strcmp(dir-fcbi.fname,sonfname)=0)printf(“该文件夹下已经有同名的文

9、件夹存在了!n“);return 0;/查找空白fcb序号for(i=1;i BlockFcbCount;i+)if(dir-fcbi.type=0)break;if(i=BlockFcbCount)printf(“该目录已满!请选择新的目录下创建!n“);return 0;temp=i;for(i=3;i BlockCount;i+)if(osPoint-FAT1i=0)break;if(i=BlockCount)printf(“磁盘已满!n“);return 0;iFAT=i;osPoint-FAT1iFAT=osPoint-FAT2iFAT=2;/2表示分配给下级目录文件/填写该分派新的

10、盘块的参数strcpy(dir-fcbtemp.fname,sonfname);dir-fcbtemp.type=2;dir-fcbtemp.fatherBlockNum=current;dir-fcbtemp.currentBlockNum=iFAT;/初始化子目录文件盘块dir=(struct dirFile*)(osPoint-dataiFAT-3);/定位到子目录盘块号dir- init(current,iFAT,sonfname);/iFAT是要分配的块号,这里的current用来指要分配的块的父块号printf(“-nn“);return 1;int rmdir(char*sonf

11、name)/if(子目录不存在)return error/if(子目录不是空文件夹)return error/回收子目录磁盘块号b(修改fat)/回收子目录占据目录项int i,temp,j;/确保当前目录下有该文件,并记录下该FCB下标struct dirFile*dir;/当前目录的指针if(current=2)dir=&(osPoint-root);else dir=(struct dirFile*)(osPoint-datacurrent-3);for(i=1;i BlockFcbCount;i+)/查找该目录文件if(dir-fcbi.type=2&strcmp(dir-fcbi.f

12、name,sonfname)=0)break;temp=i;if(i=BlockFcbCount)printf(“当前目录下不存在该子目录!n“);return 0;j=dir-fcbtemp.currentBlockNum;struct dirFile*sonDir;/当前子目录的指针sonDir=(struct dirFile*)(osPoint-dataj-3);for(i=1;i BlockFcbCount;i+)/查找子目录是否为空目录if(sonDir-fcbi.type!=0)printf(“该文件夹为非空文件夹,为确保安全,请清空后再删除!n“);return 0;osPoin

13、t-FAT1j=osPoint-FAT2j=0;/fat清空char*p=osPoint-dataj-3;/格式化子目录memset(p,0,BlockSize);dir-fcbtemp.initialize();/回收子目录占据目录项printf(“-nn“);return 1;int create(char*name)int i,iFAT;/temp,int emptyNum=0,isFound=0;/空闲目录项个数struct dirFile*dir;/当前目录的指针if(current=2)dir=&(osPoint-root);else dir=(struct dirFile*)(o

14、sPoint-datacurrent-3);/查看目录是否已满/为了避免同名的文本文件for(i=1;i BlockFcbCount;i+)if(dir-fcbi.type=0&isFound=0)emptyNum=i;isFound=1;else if(dir-fcbi.type=1&strcmp(dir-fcbi.fname,name)=0)printf(“无法在同一目录下创建同名文件!n“);return 0;if(emptyNum=0)printf(“已经达到目录项容纳上限,无法创建新目录!n“);return 0;/查找FAT表寻找空白区,用来分配磁盘块号j for(i=3;i Bl

15、ockCount;i+)if(osPoint-FAT1i=0)break;if(i=BlockCount)printf(“磁盘已满!n“);return 0;iFAT=i;/分配磁盘块osPoint-FAT1iFAT=osPoint-FAT2iFAT=1;/填写该分派新的盘块的参数strcpy(dir-fcbemptyNum.fname,name);dir-fcbemptyNum.type=1;dir-fcbemptyNum.fatherBlockNum=current;dir-fcbemptyNum.currentBlockNum=iFAT;dir-fcbemptyNum.size=0;char*p=osPoint-dataiFAT-3;memset(p,#,BlockSize);printf(“-nn“);return 1;int listshow()int i,DirCount=0,FileCount=0;/搜索当前目录struct dirFile*dir;/当前目录的指针if(current=2)dir=&(osPoint-root);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号