采用空白文件目录结构管理磁盘空间,实现磁盘空间的分配和回收
实验题目:采用空白文件目录结构管理磁盘空间,实现磁盘空间的分配和回收
#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); /*读入选择的服务 */
}
}
采用空白文件目录结构管理磁盘空间,实现磁盘空间的分配和回收相关推荐
- 国美金融贷款进行内存管理,国美金融贷款负责分配和回收
国美金融贷款内存管理是计算机编程领域的重要领域之一.在众多脚本语言中,不必担心内存如何管理,但这并不影响国美金融贷款内存管理的重要性.在实际编程的过程中,对国美金融贷款内存管理器的理解力至关重要.大部 ...
- (王道408考研操作系统)第五章输入/输出(I/O)管理-第一节6:设备的分配和回收
文章目录 一:设备分配时应该考虑的因素 (1)设备的固有属性 (2)设备的分配算法 (3)设备分配安全性 二:静态分配和动态分配 三:设备分配管理中的数据结构 (1)设备控制表(DCT) (2)控制器 ...
- c语言实现磁盘存储空间的分配和回收,操作系统磁盘管理 借鉴资料
操作系统磁盘管理 借鉴资料 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档所得 ...
- 17 操作系统第四章 磁盘管理 磁盘的结构 磁盘调度算法 减少磁盘延迟时间的方法
文章目录 1 磁盘的结构 1.1 磁盘.磁道.扇区 1.2 磁盘如何读取数据 1.4 盘面.柱面.磁盘的物理地址 1.5 磁盘的分类 1.6 磁盘的结构小结 2 磁盘调度算法 2.1 一次磁盘读/写操 ...
- 操作系统~磁盘的结构、磁盘调度算法、磁盘的管理
文章目录 磁盘的结构 磁盘的物理地址 磁盘调度算法 一次磁盘读/写操作需要的时间 先来先服务算法(FCFS) 最短寻找时间优先(SSTF) 扫描算法(SCAN) LOOK调度算法 循环扫描算法(C-S ...
- 六、操作系统——内存管理的概念(空间的分配与回收、空间的扩充、地址转换、存储保护)
一.概述 二.操作系统作为系统资源的管理者,当然也需要对内存进行管理,要管些什么呢? 1. 内存空间的分配与回收 连续分配:指为用户进程分配的必须是一个连续的内存空间. 1. 单一连续分配 在单一连续 ...
- 14 操作系统第四章 文件管理 文件逻辑结构 文件目录结构
文章目录 1 初识文件管理 1.1文件属性 1.2 文件内部的数据应该怎样组织起来? 1.3 文件之间应该怎样组织起来? 1.4 操作系统应该向上提供哪些功能? 1.5 文件应如何存放在外存? 1.6 ...
- Linux文件目录结构一览表
学习 Linux,不仅限于学习各种命令,了解整个 Linux 文件系统的目录结构以及各个目录的功能同样至关重要. 使用 Linux 时,通过命令行输入 ls -l / 可以看到,在 Linux 根目录 ...
- linux 查看磁盘管理,linux下的磁盘管理
1.磁盘管理 磁盘是我们日常生活中最主要的存储介质,在工业领域同样有着大量的使用,对于一块硬盘,我们并不能直接读取上面的数据,因为磁盘上的是二进制数据,有磁性代表着1,没磁性代表着0,读取数据是计算机 ...
最新文章
- leetcode005 longest_palidrome
- 程序员的技能树,决定了一生职业的高度
- PAT甲级——1102 Invert a Binary Tree (层序遍历+中序遍历)
- 浅析SEO网站优化的三点高质量外链优化技巧
- 嵌入式linux系统,给WIFI模块增加一个开关
- aop阻止方法运行_Spring AOP无法拦截内部方法调用
- Python 面向对象编程
- mysql优化 坑_mysql之我们终将踩过的坑(优化)
- Linux 命令(26)—— rename 命令
- 计算重叠最长子串问题
- 前端获取后台布尔类型_教育平台项目前端:视频讲解
- 【CodeVS3372】选学霸
- 二阶有源低通滤波器幅频特性
- μC/OS-II兼容层——让基于μC/OS-II开发的应用层无感地迁移到RT-Thread操作系统
- 使用JSTmplate向页面渲染数据(使用方法示例)
- 阿里云携手创业黑马,“双百计划”赋能百城万企创新转型
- js:DOM和响应事件(一)
- 自考02324离散数学第二章思维导图
- 《系统论、信心论、控制论》读书笔记1
- 汇编语言中xor指令_汇编各类指令用法及含义分析 - 全文
热门文章
- 整理形成1997—2018年31个省份人口密度
- 见缝插针 一个小游戏
- 如何成为写SQL高手(下)
- PPTP、L2F、L2TP协议
- json 语言解析为String,单个对象和集合的json和String之间的相互解析
- 解决key is invalid问题
- intel Pin简要介绍及示例程序
- Excel Application对象应用大全(四)
- 12.5.2 升12.5.3的补丁 linux下载,lolv3.2.3.2-V4.0.5.1升级-lolv3.2.3.2-V4.0.5.1升级补丁【7.12版本】下载官方最新版-西西软件下载...
- 数据库报错SQLSTATE[HY000]: General error: 144 Table ‘