采用空白文件目录结构管理磁盘空间,实现磁盘空间的分配和回收
来源:互联网 发布:ubuntu环境变量设置 编辑:程序博客网 时间:2024/06/08 05:12
实验题目:采用空白文件目录结构管理磁盘空间,实现磁盘空间的分配和回收
#include"stdio.h"
#include"math.h"
#define N 5
char fname;
int xh;
struct freearea //空白文件目录,并初始化
{
int startaddress;//第一个空闲块
int size;//空闲块的块数
int state;//空闲区状态,0表示空表目,1为可用空块
char name[100]; //用来存放进入空白文件目录的文件名称
}freeblock[N]={{8,5,1,{NULL}},{15,4,1,{NULL}},{20,7,1,{NULL}},{30,8,1,{NULL}},{60,13,1,{NULL}}};
struct filemenu //文件目录表
{
char Fname; //文件名称
int size; //文件的大小
}FMenu[100];
int alloc(int applyarea)///为文件分配存储块的函数,磁盘空间的分配
{
int i,tag=0,j=0,flag=1;
for( i=0 ; i< N ; i++ )
//for( j = 0 ; j < 100 ; j++ )
if(freeblock[i].state==1 && freeblock[i].size > applyarea && flag==1 && freeblock[i].name[xh]==NULL)
{
freeblock[i].startaddress = freeblock[i].startaddress + applyarea;
freeblock[i].size=freeblock[i].size-applyarea;
tag=1;/*有满足条件的空闲区时,tag置1*/
flag=0;
//freeblock[i].name=FMenu[i].Fname;
freeblock[i].name[xh]=fname;
//printf("$$$$$ %c/n",freeblock[i].name);
return freeblock[i].startaddress-applyarea;
}
else
if(freeblock[i].state==1 && freeblock[i].size==applyarea && flag==1 && freeblock[i].name[xh]==NULL)
{
freeblock[i].startaddress = freeblock[i].startaddress + applyarea;
freeblock[i].size=freeblock[i].size-applyarea;
freeblock[i].state=0;
flag=0;
tag=1;/*有满足条件的空闲区时,tag置1*/
//freeblock[i].name=FMenu[i].Fname;
freeblock[i].name[xh]=fname;
//printf("******* %c/n",freeblock[i].name);
}
if(tag==0)
return -1;
}
void setfree()///实现磁盘空间的回收
{
int i,j,k;
char s;
printf("输入要删除的文件名: /n");
getchar();
scanf("%c",&s);
for(j=0;j<100 ;j++)
if(FMenu[j].Fname==s)
{
//printf("@@@ %c %d/n",FMenu[j].Fname,j);
break;
}
for(i=0;i<N;i++)
{
for(k=0;k<100;k++)
//printf("$$$$$ %c %d/n",freeblock[i].name,i);
if(freeblock[i].name[k]==s)
{
//printf("#### %c %d/n",freeblock[i].name,i);
freeblock[i].state=1;
freeblock[i].startaddress=freeblock[i].startaddress - ((int)ceil(FMenu[j].size*1.0/100)) ;
freeblock[i].size=freeblock[i].size + ((int)ceil(FMenu[j].size*1.0/100)) ;
}
}
}
void print()
{
int i;
printf(" |...................................................................|/n");
printf(" |序号..........第一个空白块.........连续空闲块个数.........状态.....|/n");
printf(" |...................................................................|/n");
for(i=0;i<N;i++)
{
printf(" |%3d..............%3d.......................%3d..........%3d........|/n",
i,freeblock[i].startaddress,freeblock[i].size,freeblock[i].state);
printf(" |...................................................................|/n");
}
}
void main()
{
int start,i,a,k,j,same=1;
//char name;
printf("分配前的空白文件目录: /n");
print();
printf("每个空闲块内存为100/n");
printf("可选择服务类型 /n");
printf("1 调入新的文件/n");
printf("2 收回文件磁盘空间 /n");
printf("3 退出 /n"); /*输出功能提示*/
printf("空闲区状态;0表示空表目,1为可用空块/n");
printf("请选择服务类型 /n");
scanf("%d",&a); /*读入选择的服务 */
xh=0;
while(a!=3)
{
if(a==1)
{
/*printf("分配前的空白文件目录: /n");
print();*/
same=1;
printf("输入文件名: /n");
getchar();
scanf("%c",&fname);
for(i=0;i<100;i++)
{
if(FMenu[i].Fname==fname)
{
printf("已经有这个名字的文件了,请从新输入/n");
same=0;
break;
}
}
if(same==1)
{
FMenu[xh].Fname=fname;
printf("输入所需磁盘大小: ");
scanf("%d",&FMenu[xh].size);
//k=(int)ceil(FMenu[i].size*1.0/100);
start=alloc((int)ceil(FMenu[xh].size*1.0/100));
if(start==-1)
printf("没有足够的内存,文件等候/n");
else
{
printf("分配后的空白文件目录: /n");
print();
}
xh++;
}
}
if(a==2)
{
setfree();
printf("删除后的空白文件目录: /n");
print();
}
printf("@@@@@请选择服务类型: /n");
scanf("%d",&a); /*读入选择的服务 */
}
}
- 采用空白文件目录结构管理磁盘空间,实现磁盘空间的分配和回收
- 分配磁盘空间
- Win 2K的磁盘空间配额管理及分配方法
- linux 磁盘空间的重新分配
- du查看某个文件或目录占用磁盘空间的大小
- 关于磁盘空间管理的文章
- Linux下的磁盘空间管理
- 磁盘空间的动态管理<Lvm>
- 回收VMWare虚拟机占用的磁盘空间
- Mongodb中回收remove的磁盘空间
- 回收VMWare虚拟机占用的磁盘空间
- Ubuntu下查看文件以及磁盘空间大小管理的方法
- ESXi thin磁盘空间回收
- mysql磁盘空间碎片回收
- 磁盘空间
- 磁盘空间
- openstack虚拟机分配的磁盘空间不够
- 文本文件磁盘空间分配问题
- 如何在windows下运行mysql命令符
- 我终于跳出墙了--风景真好
- MFC Edit control用法
- autoreconf
- ASP.NET 使用alert弹出对话框后,CSS样式失效,字体变大的解决方法
- 采用空白文件目录结构管理磁盘空间,实现磁盘空间的分配和回收
- configure.ac (configure.in)
- 《大量编程带来的快乐和烦恼》(2010/06/20)
- Python入门读物摘要--How to think like a csor
- Linux-Android启动之zImage生成过程详解
- 转:vc++与office2007冲突解决方法
- MFC 使用系统时间方法
- JDBC读取Oracle LONG RAW类型字段 显示图片
- 余