文章标题
来源:互联网 发布:电信宽带刷新端口 编辑:程序博客网 时间:2024/06/08 11:23
操作系统实验 (HUST)
实验名称 文件管理
可用代码:
#include<iostream>#include<string.h>#define max 6#define N max*maxusing namespace std;/******************************************************************/struct block{ int blocknumber;//第m个文件块所占的个数 int indexblock[100];//第m个文件所在总盘块的索引}block[100];/******************************************************************/struct file{ char name[10]; int length; int filestart;//标记第m个文件的所占盘块的第一个位置 int fileend;//标记第m个文件的所占盘块的最后一个位置}file[100];/******************************************************************/int bitvector[max][max];//位示图int m=0;//用来标记文件个数/******************************************************************/void allocate(struct file f);//分配函数void free(struct file f,char nametest);//回收/删除函数void printcontents();//显示目录void printbitvector();//显示位示图/******************************************************************/int main(){ /*************************************/ cout<<"实验目的"<<endl; cout<<"1.对已分配盘块采用索引方式管理"<<endl; cout<<"2.空闲盘块采用位示图管理"<<endl; cout<<"3.实现分配,回收"<<endl; for(int i=0;i<100;i++)//所有文件初始化 { file[i].length=0; } cout<<"初始化位示图..."<<endl<<endl; for( int i=0;i<max;i++) { for(int j=0;j<max;j++) bitvector[i][j]=0; } printbitvector(); int temp;//检测输入临时变量 /*************************************/ while(1) { cout<<"1.创建文件"<<endl<<"2.删除文件"<<endl<<"3.显示位示图"<<endl<<"4.显示目录" <<endl<<"5.退出系统"<<endl; cin>>temp; struct file f;//定义临时变量f用来做中间操作 char nametest; if(temp==1) { cout<<"请输入文件名:"<<endl; cin>>f.name; cout<<"请输入文件长度:"<<endl; int templength; cin>>templength; f.length=templength; int n=0; for(int i=0;i<max;i++) { for(int j=0;j<max;j++) { if(bitvector[i][j]==0) n++; } } //当前空闲盘块数 if(n>f.length) allocate(f); else cout<<"磁盘空间不足,分配失败"<<endl; } else if(temp==2) { cout<<"请输入文件名:"<<endl; cin>>nametest;//根据名字来查找删除文件,回收空间 free(f,nametest); } else if(temp==3) { printbitvector(); } else if(temp==4) { printcontents(); }else{ return 0;} } return 0;}/******************************************************************/void allocate(struct file f)//文件分配{ file[m]=f; int k=0,l=0; for(int i=0;i<max;i++)//在总盘块中找到,满足创建文件所需长度的块区域。 { for(int j=0;j<max;j++) { if(bitvector[i][j]==0&&k<file[m].length) { bitvector[i][j]=1;//修改位示图 block[m].indexblock[l]=i*max+j; l++;k++; } else if(bitvector[i][j]==0&&k==file[m].length) { bitvector[i][j]=0; block[m].blocknumber=i*max+j; k++; } } } file[m].filestart=block[m].blocknumber-file[m].length;//标记第m个文件的所占盘块的第一个位置 file[m].fileend=block[m].blocknumber-1;//标记第m个文件的所占盘块的最后一个位置 m++;}/******************************************************************/void free(struct file f,char nametest){ int a,b; for(int i=0;i<m;i++) { if(*file[i].name==nametest)//找到与所输入删除的文件名相符的文件 { for(int j=file[i].filestart;j<=file[i].fileend;j++)//修改位示图 { a=j/max;//行 b=j%max;//列 bitvector[a][b]=0; } while(i<m)//循环,将i之前的file依次往前挪一个位置 { file[i]=file[i+1]; i++; } m--;//将文件个数减掉一个。 } }}/******************************************************************/void printcontents(){ cout<<"文件目录:"<<endl; cout<<"Filename\t"<<"Length"<<endl; for(int i=0;i<m;i++) { cout <<file[i].name<<"\t\t"<< file[i].length<<endl; }}/******************************************************************/void printbitvector(){ cout<<"位示图:"<<endl; for(int ii=0;ii<max;ii++) { for(int jj=0;jj<max;jj++) { cout<<bitvector[ii][jj]<<" "; } cout<<endl; }}
阅读全文
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- Tomcat 学习
- 大前端工程师必需要懂的mac&linux命令相关知识(持续更新)
- HDU5878 I Count Two Three【打表+排序+二分搜索】
- OOA
- 【Codevs1163】访问艺术馆 树形dp 记忆化搜索(8/1000)
- 文章标题
- 050day(递归思想在问题分解上的应用(爬楼梯))
- 如何查看已安装的CentOS版本信息
- 一个菜鸟的前端之路
- (二十五)基础系列 多线程
- 剑指offer——跳台阶
- javascript 正则
- 网络桥接管理
- 网络层——IP分组交换及NAT技术