欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    模拟文件系统的设计实现分析文档格式.docx

    • 资源ID:3163839       资源大小:66.34KB        全文页数:22页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    模拟文件系统的设计实现分析文档格式.docx

    1、exit系统执行流程图3详细设计主要数据结构:#define MEM_D_SIZE 1024*1024 /总磁盘空间为1M#define DISKSIZE 1024 /磁盘块的大小1K#define DISK_NUM 1024 /磁盘块数目1K#define FATSIZE DISK_NUM*sizeof(struct fatitem) /FAT表大小#define ROOT_DISK_NO FATSIZE/DISKSIZE+1 /根目录起始盘块号#define ROOT_DISK_SIZE sizeof(struct direct) /根目录大小#define DIR_MAXSIZE 102

    2、4 /路径最大长度为1KB#define MSD 5 /最大子目录数5#define MOFN 5 /最大文件深度为5#define MAX_WRITE 1024*128 /最大写入文字长度128KB struct fatitem /* size 8*/ int item; /*存放文件下一个磁盘的指针*/ char em_disk; /*磁盘块是否空闲标志位 0 空闲*/ ;struct direct /*-文件控制快信息-*/ struct FCB char name9; /*文件/目录名 8位*/ char property; /*属性 1位目录 0位普通文件*/ int size; /

    3、*文件/目录字节数、盘块数)*/ int firstdisk; /*文件/目录 起始盘块号*/ int next; /*子目录起始盘块号*/ int sign; /*1是根目录 0不是根目录*/ directitemMSD+2;struct opentable struct openttableitem /*文件名*/ /*起始盘块号*/ /*文件的大小*/ openitemMOFN; int cur_size; /*当前打文件的数目*/ 管理文件的主要代码:int create(char *name) int i,j; if(strlen(name)8) /*文件名大于 8位*/ retur

    4、n(-1); for(j=2;jdirectitemj.name,name) break; if(jMSD+2) /*文件已经存在*/ return(-4); for(i=2;idirectitemi.firstdisk=-1) if(i=MSD+2) /*无空目录项*/ return(-2); if(u_opentable.cur_size=MOFN) /*打开文件太多*/ return(-3); for(j=ROOT_DISK_NO+1;DISK_NUM;j+) /*找到空闲盘块 j 后退出*/ if(fatj.em_disk=0) break; if(j=DISK_NUM) return

    5、(-5); fatj.em_disk = 1; /*将空闲块置为已经分配*/ /*-填写目录项-*/ strcpy(cur_dir-directitemi.name,name); cur_dir-directitemi.firstdisk = j;directitemi.size = 0;directitemi.next = j;directitemi.property = /*-*/ fd = open(name); return 0; int open(char *name) int i, j;i+) /*文件是否存在*/ directitemi.name,name) =MSD+2) /*

    6、-是文件还是目录-*/ if(cur_dir-directitemi.property=) /*-文件是否打开-*/ for(j=0;MOFN;j+) strcmp(u_opentable.openitemj.name,name) MOFN) /*文件已经打开*/ =MOFN) /*文件打开太多*/ /*-查找一个空闲用户打开表项-*/ if(u_opentable.openitemj.firstdisk=-1) /*-填写表项的相关信息-*/ u_opentable.openitemj.firstdisk = cur_dir-directitemi.firstdisk; strcpy(u_o

    7、pentable.openitemj.name,name); u_opentable.openitemj.size = cur_dir-directitemi.size; u_opentable.cur_size+; /*-返回用户打开表表项的序号-*/ return(j);int close(char *name) int i; for(i=0;i+) strcmp(u_opentable.openitemi.name,name) =MOFN) /*-清空该文件的用户打开表项的内容-*/ strcpy(u_opentable.openitemi.name,); u_opentable.ope

    8、nitemi.firstdisk = -1; u_opentable.openitemi.size = 0; u_opentable.cur_size-;int write(int fd, char *buf, int len) char *first; int item, i, j, k; int ilen1, ilen2, modlen, temp; /*-用 $ 字符作为空格 # 字符作为换行符-*/ char Space = 32; char Endter= nlen; if(bufi = $ bufi = Space; else if(bufi = # bufi = Endter;

    9、/*-读取用户打开表对应表项第一个盘块号-*/ item = u_opentable.openitemfd.firstdisk; /*-找到当前目录所对应表项的序号-*/ directitemi.firstdisk=item) temp = i; /*-存放当前目录项的下标-*/ /*-找到的item 是该文件的最后一块磁盘块-*/ while(fatitem.item!=-1) item =fatitem.item; /*-查找该文件的下一盘块-*/ /*-计算出该文件的最末地址-*/ first = fdisk+item*DISKSIZE+u_opentable.openitemfd.si

    10、ze%DISKSIZE; /*-如果最后磁盘块剩余的大小大于要写入的文件的大小-*/ if(DISKSIZE-u_opentable.openitemfd.size%DISKSIZElen) strcpy(first,buf); u_opentable.openitemfd.size = u_opentable.openitemfd.size+len; cur_dir-directitemtemp.size = cur_dir-directitemtemp.size+len; else for(i=0;(DISKSIZE-u_opentable.openitemfd.size%DISKSIZE

    11、);/*写一部分内容到最后一块磁盘块的剩余空间(字节)*/ firsti = buf i; /*-计算分配完最后一块磁盘的剩余空间(字节) 还剩下多少字节未存储-*/ ilen1 = len-(DISKSIZE-u_opentable.openitemfd.size%DISKSIZE); ilen2 = ilen1/DISKSIZE; modlen = ilen1%DISKSIZE; if(modlen0) ilen2 = ilen2+1; /*-还需要多少块磁盘块-*/ for(j=0;ilen2; for(i=ROOT_DISK_NO+1;i+)/*寻找空闲磁盘块*/ if(fati.em

    12、_disk= break; if(i=DISK_NUM) /*-如果磁盘块已经分配完了-*/ return(-1); first = fdisk+i*DISKSIZE; /*-找到的那块空闲磁盘块的起始地址-*/ if(j=ilen2-1) /*-如果是最后要分配的一块-*/ for(k=0;kdirectitemcur_item.firstdisk;/*-该文件的起始盘块号-*/ while(item!=-1) /*-释放空间,将FAT表对应项进行修改-*/ temp = fatitem.item; fatitem.item = -1; fatitem.em_disk = item = te

    13、mp; /*-释放目录项-*/ directitemcur_item.sign = 0;directitemcur_item.firstdisk = -1; strcpy(u_opentable.openitemcur_item.name,directitemcur_item.next = -1;directitemcur_item.property = directitemcur_item.size = 0;主函数:int main() FILE *fp; char ch; char a100; char code1110; char name10; int i,flag,r_size; c

    14、har *contect; contect = (char *)malloc(MAX_WRITE*sizeof(char); if(fp=fopen(disk.dat,rb)=NULL) printf(You have not format,Do you want format?(y/n) scanf(%c,&ch); if(ch=y initfile(); printf(Successfully format! n else return 0; enter(); print(); show(); strcpy(code0,exit strcpy(code1,create strcpy(cod

    15、e2,open strcpy(code3,close strcpy(code4,write strcpy(code5,read strcpy(code6,del strcpy(code7,mkdir strcpy(code8,rmdir strcpy(code9,dir strcpy(code10,cd while(1) %s,a);11; if(!strcmp(codei,a) break; switch(i) case 0: /退出文件系统 free(contect); halt(); case 1: /创建文件 scanf(,name); flag = create(name); if(

    16、flag=-1) printf(Error: n The length is too long !n else if(flag=-2) n The direct item is already full ! else if(flag=-3) n The number of openfile is too much ! else if(flag=-4) n The name is already in the direct ! else if(flag=-5) n The disk space is full! else Successfully create a file! show(); case 2:/打开文件 fd = open(name); if(fd = -1) n The open file not exit! else if(fd = -2) n The file have


    注意事项

    本文(模拟文件系统的设计实现分析文档格式.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开