操作系统课程设计--模拟磁盘文件管理的程序.doc
《操作系统课程设计--模拟磁盘文件管理的程序.doc》由会员分享,可在线阅读,更多相关《操作系统课程设计--模拟磁盘文件管理的程序.doc(55页珍藏版)》请在咨信网上搜索。
1、中南林业科技大学操作系统课程设计课程题目:模拟磁盘文件管理的程序姓名:学号: 专业: 计算机科学与技术 年级: 2006计算机科学学院 2021年11月模拟磁盘文件管理的程序一、 课程设计内容 自定义磁盘文件管理的数据结构; 能够自由创建、修改、删除文件; 文件具有一定自定义的属性; 能够显示当前系统文件的状态。二、 课程设计的数据结构说明程序中定义了两个类:class file/文件类private:char name10; /文件名 public: int tag; /删除标记 1:已删 0:未删file( ) char *getname( )return name; /获取文件名int
2、gettag( )return tag; /获取删除标记int getlength() return length; /获取文件大小int getblocknum() return blocknum; / 磁盘块数 int getblocksum1()return blocksum1; /磁盘块号的始点 int getblocksum2()return blocksum2; /磁盘块号的终点 int length,blocknum,blocksum1,blocksum2;void setname(char na ) strcpy(name,na); /设置文件名void delwenjian(
3、) tag=1; /设置删除标记 1:已删 0:未删void creatfile(char *na,int L,int num,int s1,int s2) /创建文件void deltefile(char *na) tag=1; strcpy(name,na); /删除文件void disp( )/输出文件信息class fdatabase /文件库类 private: int top; /文件记录指针file f50;public:fdatabase()top=-1; /构造函数int search(char *fname)/按文件名查找int creatfile(char *na,int
4、 L,int num,int s1,int s2)/创建文件时先查找是否存在int deltefile(char *na)/删除文件时先查找是否存在void disp() /输出所有文件信息;三、 课程设计的模板说明1、初始化,建立文件系统输入磁盘大小(G),每个盘块大小(M),自动建立位示图,位示图字长定为32位输出位示图的行数,以及行号、列号与磁盘块号的转换公式(都从0开始编号)。2、 循环选择执行以下功能1、存储文件输入建立的文件名和文件大小,如果该文件名已经存在,则输出不能建立的信息否则计算所需的磁盘块数为其分配足够多的磁盘块,并记录下来输出所占用的磁盘块号2、删除文件输入要删除的文件
5、名,如果该文件名不存在,则输出删除错误信息,否则收回该文件所占用的磁盘块删除该文件名3、显示位示图情况显示位示图的情况显示剩余磁盘块的数目4、显示文件列表显示文件名,文件大小,占用的磁盘块数目和磁盘块号四、 课程设计的源代码#include#include #include#include#includeint i=0,j=0,sum=0,tt=0,r,ii,k,g,m;int a10032;class file/文件类private:int no; /文件编号char name10; /文件名public: int tag; /删除标记 1:已删 0:未删file( ) char *getn
6、ame( )return name; /获取姓名int gettag( )return tag; /获取删除标记int getno() return no; /获取文件编号 int getlength() return length; /获取文件大小 int getblocknum() return blocknum; / 磁盘块数 int getblocksum1()/磁盘块号的始点 return blocksum1; int getblocksum2()/磁盘块号的终点 return blocksum2; int length; /文件大小int blocknum;/盘块数int bloc
7、ksum1;/所占盘块号的始点int blocksum2;/所占盘块号的终点void setname(char na ) /设置文件名strcpy(name,na);void delwenjian() tag=1; /设置删除标记 1:已删 0:未删void creatfile(char *na,int L,int num,int s1,int s2) /创建文件 tag=0; length=L; blocknum=num; blocksum1=s1; blocksum2=s2; strcpy(name,na); blocknum=length/m; /盘块数=文件大小/盘块大小if(leng
8、th%m!=0) /盘块数取上整 blocknum=blocknum+1; cout 所需磁盘块数:blocknumendlendl; if(sum+blocknum)=32) /所有盘块数只占用一行,直接赋值 for(;j(sum+blocknum);j+) aij=1; sum=sum+blocknum; /再进行下面文件的盘块数累加 else /占用多行,先赋值整行 for(;j32;j+) aij=1; i=i+1; for(j=0;j(sum+blocknum)-32;j+)/再进行剩余项赋值 aij=1; sum=sum+blocknum-32; tt=tt+blocknum; /
9、输出文件所占用的盘块号 cout 所占磁盘块号:tt-blocknum to tt-1endl; blocksum1=tt-blocknum; blocksum2=tt-1;void deltefile(char *na) /删除文件 tag=1; strcpy(name,na);void disp( )/输出文件信息 coutsetw(8)name setw(10)lengthsetw(18)blocknumsetw(12)blocksum1 to blocksum2endl;class fdatabase /文件库类 private: int top; /文件记录指针file f50;pu
10、blic:fdatabase() /构造函数top=-1; int search(char *fname)/按文件名查找for ( ii=0;ii=top;ii+)if (strcmp(fii.getname(),fname)=0 & fii.tag=0)return 0;return 1;int creatfile(char *na,int L,int num,int s1,int s2)/创建文件时先查找是否存在 int p; p=search(na);if (p=1) top+; ftop.creatfile(na,L,num,s1,s2);return 1;elsecout !该文件已
11、存在,不能创建!nn;return 0; int deltefile(char *na)/删除文件时先查找是否存在int b,p,x=0,n1,n2,q1,q2,t; p=search(na); if (p=0) /若文件存在 /进行删除文件赋值fii.tag=1; b=fii.length/m; /盘块数=当前文件大小/盘块大小 if(ii=0) / 对第一个删除文件进行赋值for(k=0;kb;k+)axk=0;else n1=(fii-1.blocksum2+1)/32; /被查找的文件之前文件所占用的盘块数/32, /大于0表示跨行n2=(fii.blocksum2+1)/32; /所
12、有文件所占用的盘块数/32,大于0表示跨行q1=(fii-1.blocksum2+1)-n1*32; / 当前文件的开始盘块号q2=(fii.blocksum2+1)-n2*32; / 用于跨行后计算盘块号t=n2-n1;if(t=0) /若n2与n1相等,表明当前所有被占用盘块在同一行 for(k=q1;k=0;t-,x+) /循环进行整行赋值for(k=0;k32;k+) axk=0;x=n2; /对剩余项赋值for(k=0;kb-(t-1)*32;k+)axk=0;else /对当前文件前几项赋值 x=n1;for(k=q1;k0;t-,x+) /中间整行赋值 for(k=0;k32;k
13、+) axk=0;x=n2; /最后剩余项赋值for(k=0;k(fii.blocksum2+1)-t1*32;k+)axk=0; return 1; elsecout该文件不存在;return 0;void disp() /输出所有文件信息 for (int i=0;i=top;i+) if(fi.tag=0) fi.disp();void bit_map(int I) int s=0;cout-endl; for(int p=0;pI;p+) for(int q=0;q32;q+) coutapq ; coutendl; out-endl; for(int p1=0;p1I;p1+) fo
14、r(int q1=0;q132;q1+) if(ap1q1=1)s=s+1;s=(g*1024)/m-s; cout 剩余盘块数:sendl; void main() int I,l,b,i,j,ss1,ss2,sum=0; char fname20; fdatabase p; file w; cout tt*n; cout tt* *n; cout tt* 初始化,建立文件系统 *n; cout tt* *n; cout tt*n; cout g; coutendl; cout m; coutendl; I=(g*1024)/(32*m); for( i=0;iI;i+) for( j=0;
15、j32;j+) aij=0; cout 建立的位示图为:endl; bit_map(I);cout 行数:Iendl;cout tt*n;cout tt* *n; cout tt* 行号、列号与磁盘块号的转换公式为: *n; cout tt* 磁盘块号行号*32+列号 *n;cout tt* 行号磁盘块号/32 *n; cout tt* 列号磁盘块号%32 *n;cout tt* *n;cout tt*n;char choice;while(choice!=0)cout tt*n; cout tt* *n; cout tt* 文 件 管 理 系 统 *n; cout tt* *n; cout
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 模拟 磁盘 文件 管理 程序 实用 文档
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。