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

    操作系统 文件存储空间管理.docx

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

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

    操作系统 文件存储空间管理.docx

    1、操作系统 文件存储空间管理#include stdio.h #include #include #include int physic100; /文件地址缓冲区int style=1; /文件的类型char cur_dir10=root; /当前目录 struct command char com10;cmd13;struct block int n; /空闲的盘快的个数 int free50; /存放空闲盘快的地址 int a; /模拟盘快是否被占用memory20449;struct block_super int n; /空闲的盘快的个数 int free50; /存放进入栈中的空闲块

    2、int stack50; /存放下一组空闲盘快的地址super_block;struct node /i结点信息 int file_style; /i结点 文件类型 int file_length; /i结点 文件长度 int file_address100; /i结点 文件的物理地址 i_node640;struct dir /目录项信息 char file_name10; /文件名 int i_num; /文件的结点号 char dir_name10; /文件所在的目录 root640;void format() /格式化 int i,j,k; super_block.n=50; for(

    3、i=0;i50;i+) /超级块初始化 super_block.freei=i; /存放进入栈中的空闲块 super_block.stacki=50+i; /存放下一组的盘块 for(i=0;i640;i+) /i结点信息初始化 for(j=0;j100;j+) i_nodei.file_addressj=-1;/文件地址 i_nodei.file_length=-1; /文件长度 i_nodei.file_style=-1; /文件类型 for(i=0;i640;i+) /根目录区信息初始化 strcpy(rooti.file_name,); rooti.i_num=-1; strcpy(r

    4、ooti.dir_name,); for(i=0;i20449;i+) /存储空间初始化 memoryi.n=0; /必须有这个 memoryi.a=0; for(j=0;j50;j+) memoryi.freej=-1; for(i=0;i20449;i+) /将空闲块的信息用成组链接的方法写进每组的最后一个块中 /存储空间初始化 if(i+1)%50=0) k=i+1; for(j=0;j50;j+) if(k20450) memoryi.freej=k;/下一组空闲地址 memoryi.n+; /下一组空闲个数 注意在memoryi.n+之前要给其赋初值 k+; else memoryi

    5、.freej=-1; memoryi.a=0; /标记为没有使用 continue; /处理完用于存储下一组盘块信息的特殊盘块后,跳过本次循环 for(j=0;j50;j+) memoryi.freej=-1; memoryi.n=0; printf(已经初始化完毕n); printf(进入UNIX文件模拟.nn); void write_file(FILE *fp) /将信息读入系统文件中 int i; fp=fopen(system,wb); for(i=0;i20449;i+) fwrite(&memoryi,sizeof(struct block),1,fp); fwrite(&sup

    6、er_block,sizeof(struct block_super),1,fp); for(i=0;i640;i+) fwrite(&i_nodei,sizeof(struct node),1,fp); for(i=0;i640;i+) fwrite(&rooti,sizeof(struct dir),1,fp); fclose(fp);void read_file(FILE *fp) /读出系统文件的信息 int i; fp=fopen(system,rb); for(i=0;i20449;i+) fread(&memoryi,sizeof(struct block),1,fp); fre

    7、ad(&super_block,sizeof(struct block_super),1,fp); for(i=0;i640;i+) fread(&i_nodei,sizeof(struct node),1,fp); for(i=0;i=0;i-) k=physici; /需要提供要回收的文件的地址 m=49-super_block.n; /回收到栈中的哪个位置 if(super_block.n=50) /注意 当super_block.n=50时 m=-1;的值 /super_block.n=50的时候栈满了,要将这个栈中的所有地址信息写进下一个地址中 for(j=0;j50;j+) mem

    8、oryk.freej=super_block.freej; super_block.n=0; memoryk.n=50; memoryk.a=0; if(m=-1) m=49; /将下一个文件地址中的盘块号回收到栈底中,这个地址中存放着刚才满栈的地址的信息 super_block.freem=physici; /将下一个文件地址中的盘块号回收到栈中 super_block.n+; void allot(int length) /分配空间 int i,j,k,m,p; for(i=0;ilength;i+) k=50-super_block.n; /超级块中表示空闲块的指针 m=super_bl

    9、ock.freek; /栈中的相应盘块的地址 p=super_block.free49; /栈中的最后一个盘块指向的地址 if(m=-1|memoryp.a=1) /检测是否还有下一组盘块 printf(内存不足,不能够分配空间n); callback(length); break; if(super_block.n=1) memorym.a=1; /将最后一个盘块分配掉 physici=m; super_block.n=0; for(j=0;jmemorym.n;j+) /从最后一个盘块中取出下一组盘块号写入栈中 super_block.freej=memorym.freej; super_

    10、block.n+; continue; /要跳过这次循环,下面的语句在IF中已经执行过 physici=m; /栈中的相应盘块的地址写进 文件地址缓冲区 memorym.a=1; super_block.n-; void create_file(char filename,int length) /创建文件 int i,j; for(i=0;i640;i+) if(strcmp(filename,rooti.file_name)=0) printf(文件已经存在,不允许建立重名的文件n); return; for(i=0;i640;i+) if(rooti.i_num=-1) rooti.i_

    11、num=i; strcpy(rooti.file_name,filename); strcpy(rooti.dir_name,cur_dir); /把当前目录名 给新建立的文件 i_nodei.file_style=style; i_nodei.file_length=length; allot(length); for(j=0;jlength;j+) i_nodei.file_addressj=physicj; break; void create_dir(char filename) /创建目录 style=0; /0代表文件类型是目录文件 create_file(filename,4);

    12、 style=1; /用完恢复初值,因为全局变量,否则 void del_file(char filename) /删除文件 int i,j,k; for(i=0;i640;i+) if(strcmp(filename,rooti.file_name)=0) k=rooti.i_num; for(j=0;ji_nodek.file_length;j+) physicj=i_nodek.file_addressj; callback(i_nodek.file_length); /调用 回收函数 for(j=0;j100;j+) /删除文件后要将文件属性和目录项的各个值恢复初值 i_nodek.f

    13、ile_addressj=-1; /地址恢复初值 strcpy(rooti.file_name,); /文件名恢复初值 rooti.i_num=-1; /目录项的I结点信息恢复初值 strcpy(rooti.dir_name,); /目录项的文件目录信息恢复初值 i_nodek.file_length=-1; /文件长度恢复 i_nodek.file_style=-1; /文件类型恢复初值 break; if(i=640) printf(不存在这个文件n); void del_dir(char filename) /删除目录 需要判断目录下时候为空,不为空就不删除 int i,j,k; for

    14、(i=0;i640;i+) /还要加条件判断要删除的目录是不是当前目录 k=rooti.i_num; /找到目录名字 if( strcmp(rooti.file_name,filename)=0 & strcmp(cur_dir,filename)!=0 & (i_nodek.file_style)=0 ) for(j=0;j640;j+) if(strcmp(filename,rootj.dir_name)=0) printf(目录不为空不能直接删除n); break; if(j=640) del_file(filename); break; break; if(i=640) printf(

    15、这个不是目录文件 或者不存在这个目录,或者你要删除的是当前目录n); void display_curdir() /显示当前目录下的文件列表 int i,k; printf(tt文件名字 文件类型 文件长度 所属目录n); for(i=0;i640;i+) if(strcmp(cur_dir,rooti.dir_name)=0) /查询文件中 所在目录信息和当前目录信息相同的数据 k=rooti.i_num; printf(tt %st,rooti.file_name); /文件名 printf(t%dt,i_nodek.file_style); /文件的类型 printf(%dt,i_nod

    16、ek.file_length); /文件的长度 printf(%sn,rooti.dir_name); /文件所在的目录 void display_dir(char filename) /进入指定的目录 int i,k; for(i=0;i640;i+) k=rooti.i_num; /判断文件类型是不是目录类型 if(strcmp(filename,rooti.file_name)=0) & (i_nodek.file_style=0) strcpy(cur_dir,filename); /将要进入的指定目录设置为当前目录 赋值不要反了strcpy(目的,源) break; if(i=640

    17、) printf(没有这个目录n); void open_file(char filename) /打开文件 int i,j,k; printf(tt文件名字 文件类型 文件长度 所属目录n); for(i=0;i640;i+) k=rooti.i_num; if(strcmp(filename,rooti.file_name)=0 & (i_nodek.file_style=1) printf(tt %st,rooti.file_name); /文件名 printf(t%dt,i_nodek.file_style); /文件的类型 printf(%dt,i_nodek.file_length

    18、); /文件的长度 printf(%sn,rooti.dir_name); /文件所在的目录 printf(tt文件占用的物理地址n); for(j=0;ji_nodek.file_length;j+) /显示物理地址 printf(%d ,i_nodek.file_addressj); /文件具体占用的盘块号 printf(n); break; if(i=640) printf(没有这个文件 或者这个文件不是正规文件n); void back_dir() /返回上一级目录 int i,k; for(i=0;i640;i+) /查询和当前目录名相同的目录文件名 k=rooti.i_num; i

    19、f(strcmp(cur_dir,rooti.file_name)=0 & (i_nodek.file_style=0) strcpy(cur_dir,rooti.dir_name); /将查询到的目录文件名 所在的目录赋值给当前目录 void display_sys() /显示系统信息(磁盘使用情况) int i,m,k=0; for(i=0;i20449;i+) if(memoryi.a=0) k+; m=20449-k; printf(空闲的盘块数是:t); printf(%dn,k); printf(使用的盘块数是:t); printf(%dn,m); void help() /显示帮

    20、助信息printf(以下是文件管理已分配盘块-!n); printf(注意:创建的文件长度 100-!n); /说明文件 printf(1.初始化-format!n); printf(2.查看当前目录文件列表-dir!n); printf(3.查看文件-cat-(cat + 空格 + 文件名) !n); printf(4.查看系统信息-ls !n); printf(5.创建目录-md-(md + 空格 + 目录名) !n); printf(6.创建文件-vi-(vi + 空格 + 文件名 + 文件长度) !n); printf(7.删除文件-del-(del + 空格 + 文件名) !n);

    21、printf(8.删除目录-deldir-(del + 空格 + 目录名)!n); printf(9.进入当前目录下的指定目录-cd-(cd + 空格 + 目录名)!n); printf(10.返回上一级目录-cd. !n); printf(11.显示帮助命令-help !n); printf(12.退出文件模拟-quit !n); printf(13,进入成组链接-chengzu !n); int MA4; /*空闲块数组*/int A94=3,1,2,3,3,4,5,6,0,0,0,0,0,0,0,0,3,0,7,8, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; /*

    22、磁盘空间*/int mark9; /*存放已分配的块*/int No=0; /*已分配的块数*/void display1() int i,j,temp,count; No=0; if(MA1!=0) i=MA0; printf(ngroup1:); for(j=1;j=i;j+) printf(%d ,MAj); mark+No=MAj; temp=MA1; count=2; while(Atemp1!=0) printf(ngroup%d:,count); i=Atemp0; for(j=1;j=i;j+) printf(%d ,Atempj); mark+No=Atempj; count

    23、+; temp=Atemp1; printf(ngroup%d:,count); i=Atemp0; for(j=2;j0) printf(%d ,Atempj); mark+No=Atempj; else i=MA0; if(i=1) printf(nThe blocks are all assigned); else printf(ngroup1:); for(j=2;j=i;j+) printf(%d ,MAj); mark+No=MAj; void display() /*显示分组情况*/ int i,j; if(MA0!=0) display1(); else i=MA1; for(

    24、j=0;j1) /*若该组不止一个空闲块*/ i=MA0; s=MAi; MA0-; printf(nnumber of the block:%d,s); else if(MA0=1) /*只剩一个空闲块*/ if(MA1!=0) /*还有其它空闲块组*/ s=MA1; for(i=0;i=3;i+) A0i=Asi; MA0-; printf(nnumber of the block:%d,s); else /*没有其它空闲块组*/ printf(nThere isnt any space); return; else /*当前组已分配完*/ for(i=0;i=3;i+) MAi=A0i; assign(); display(); /*显示分组情况*/ void ca


    注意事项

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

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




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

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

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


    收起
    展开