实验题目:采用空白文件目录结构管理磁盘空间,实现磁盘空间的分配和回收

#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); /*读入选择的服务 */
 }
}

采用空白文件目录结构管理磁盘空间,实现磁盘空间的分配和回收相关推荐

  1. 国美金融贷款进行内存管理,国美金融贷款负责分配和回收

    国美金融贷款内存管理是计算机编程领域的重要领域之一.在众多脚本语言中,不必担心内存如何管理,但这并不影响国美金融贷款内存管理的重要性.在实际编程的过程中,对国美金融贷款内存管理器的理解力至关重要.大部 ...

  2. (王道408考研操作系统)第五章输入/输出(I/O)管理-第一节6:设备的分配和回收

    文章目录 一:设备分配时应该考虑的因素 (1)设备的固有属性 (2)设备的分配算法 (3)设备分配安全性 二:静态分配和动态分配 三:设备分配管理中的数据结构 (1)设备控制表(DCT) (2)控制器 ...

  3. c语言实现磁盘存储空间的分配和回收,操作系统磁盘管理 借鉴资料

    操作系统磁盘管理 借鉴资料 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档所得 ...

  4. 17 操作系统第四章 磁盘管理 磁盘的结构 磁盘调度算法 减少磁盘延迟时间的方法

    文章目录 1 磁盘的结构 1.1 磁盘.磁道.扇区 1.2 磁盘如何读取数据 1.4 盘面.柱面.磁盘的物理地址 1.5 磁盘的分类 1.6 磁盘的结构小结 2 磁盘调度算法 2.1 一次磁盘读/写操 ...

  5. 操作系统~磁盘的结构、磁盘调度算法、磁盘的管理

    文章目录 磁盘的结构 磁盘的物理地址 磁盘调度算法 一次磁盘读/写操作需要的时间 先来先服务算法(FCFS) 最短寻找时间优先(SSTF) 扫描算法(SCAN) LOOK调度算法 循环扫描算法(C-S ...

  6. 六、操作系统——内存管理的概念(空间的分配与回收、空间的扩充、地址转换、存储保护)

    一.概述 二.操作系统作为系统资源的管理者,当然也需要对内存进行管理,要管些什么呢? 1. 内存空间的分配与回收 连续分配:指为用户进程分配的必须是一个连续的内存空间. 1. 单一连续分配 在单一连续 ...

  7. 14 操作系统第四章 文件管理 文件逻辑结构 文件目录结构

    文章目录 1 初识文件管理 1.1文件属性 1.2 文件内部的数据应该怎样组织起来? 1.3 文件之间应该怎样组织起来? 1.4 操作系统应该向上提供哪些功能? 1.5 文件应如何存放在外存? 1.6 ...

  8. Linux文件目录结构一览表

    学习 Linux,不仅限于学习各种命令,了解整个 Linux 文件系统的目录结构以及各个目录的功能同样至关重要. 使用 Linux 时,通过命令行输入 ls -l / 可以看到,在 Linux 根目录 ...

  9. linux 查看磁盘管理,linux下的磁盘管理

    1.磁盘管理 磁盘是我们日常生活中最主要的存储介质,在工业领域同样有着大量的使用,对于一块硬盘,我们并不能直接读取上面的数据,因为磁盘上的是二进制数据,有磁性代表着1,没磁性代表着0,读取数据是计算机 ...

最新文章

  1. leetcode005 longest_palidrome
  2. 程序员的技能树,决定了一生职业的高度
  3. PAT甲级——1102 Invert a Binary Tree (层序遍历+中序遍历)
  4. 浅析SEO网站优化的三点高质量外链优化技巧
  5. 嵌入式linux系统,给WIFI模块增加一个开关
  6. aop阻止方法运行_Spring AOP无法拦截内部方法调用
  7. Python 面向对象编程
  8. mysql优化 坑_mysql之我们终将踩过的坑(优化)
  9. Linux 命令(26)—— rename 命令
  10. 计算重叠最长子串问题
  11. 前端获取后台布尔类型_教育平台项目前端:视频讲解
  12. 【CodeVS3372】选学霸
  13. 二阶有源低通滤波器幅频特性
  14. μC/OS-II兼容层——让基于μC/OS-II开发的应用层无感地迁移到RT-Thread操作系统
  15. 使用JSTmplate向页面渲染数据(使用方法示例)
  16. 阿里云携手创业黑马,“双百计划”赋能百城万企创新转型
  17. js:DOM和响应事件(一)
  18. 自考02324离散数学第二章思维导图
  19. 《系统论、信心论、控制论》读书笔记1
  20. 汇编语言中xor指令_汇编各类指令用法及含义分析 - 全文

热门文章

  1. 整理形成1997—2018年31个省份人口密度
  2. 见缝插针 一个小游戏
  3. 如何成为写SQL高手(下)
  4. PPTP、L2F、L2TP协议
  5. json 语言解析为String,单个对象和集合的json和String之间的相互解析
  6. 解决key is invalid问题
  7. intel Pin简要介绍及示例程序
  8. Excel Application对象应用大全(四)
  9. 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版本】下载官方最新版-西西软件下载...
  10. 数据库报错SQLSTATE[HY000]: General error: 144 Table ‘