资源简介
给出一个磁盘块序列:1、2、3、……、500,初始状态所有块为空的,每块的大小为2k。选择使用位表、链式空闲区、索引和空闲块列表四种算法之一来管理空闲块。对于基于块的索引分配执行以下步骤:
随机生成2k-10k的文件50个,文件名为1.txt、2.txt、……、50.txt,按照上述算法存储到模拟磁盘中。
删除奇数.txt(1.txt、3.txt、……、49.txt)文件
新创建5个文件(A.txt、B.txt、C.txt、D.txt、E.txt),大小为:7k、5k、2k、9k、3.5k,按照与(1)相同的算法存储到模拟磁盘中。
给出文件A.txt、B.txt、C.txt、D.txt、E.txt的文件分配表和空闲区块的状态。
实验报告(含程序流程图)&源码
代码片段和文件信息
#include
#include
#include
#include
#define memorysize 500 //内存大小500
#define singleblocksize 2.0 //块大小2k
#define finenamelength 10 //文件名长度10
#define suffix “.txt“ //文件名后缀
#define true 1 //真值
#define false 0 //假值
int bittable[memorysize]; //位表 0代表空闲 1代表已占用
typedef struct Fat { //文件分配表结构
char filename[finenamelength]; //文件名
int IndexBlock; //索引块位置
struct Fat *next; //指针
} *FileAllocationTable FAT;
typedef struct {
int *partition; //文件分区
int blocksize; //文件分区大小
} IndexBlock;
IndexBlock indexblocktable[memorysize]; //索引块表
FileAllocationTable FAThead = NULL FATcurrent = NULL;
void putfile(char filename[] double filesize) //放置文件
{
int i j k;
FAT *temp = (FAT*)malloc(sizeof(FAT));
if (FAThead == NULL) //首次存储文件
{
strcpy(temp->filename filename); //存储文件名
i = rand() % memorysize; //随机选取索引块的位置
while (bittable[i]) //判断索引块是否已被占用
{
i = rand() % memorysize;
}
bittable[i] = true; //位表设为已占用
temp->IndexBlock = i; //记录索引块的位置
temp->next = NULL;
FAThead = FATcurrent = temp;
}
else
{
strcpy(temp->filename filename); //存储文件名
i = rand() % memorysize; //随机选取索引块位置
while (bittable[i]) //判断索引块位置是否已被占用
{
i = rand() % memorysize;
}
bittable[i] = true; //位表设为已占用
temp->IndexBlock = i; //记录索引块的位置
temp->next = NULL;
FATcurrent->next = temp;
FATcurrent = temp;
}
int blocknum = (int)(filesize / singleblocksize); //计算文件分区数目
if (filesize - blocknum*singleblocksize>1e-7) //判断文件大小与块的大小是否整除
++blocknum;
indexblocktable[i].partition = (int *)malloc(sizeof(int)*blocknum);//创建文件分区记录表
for (j = 0; j {
k = rand() % memorysize; //随机选取记录文件分区位置
while (bittable[k]) //判断位表是否已被占用
{
k = rand() % memorysize;
}
bittable[k] = true; //位表设为已占用
indexblocktable[i].partition[j] = k; //记录文件分区
}
indexblocktable[i].blocksize = blocknum; //记录分区数目
}
void deletefile(char filename[]) //按文件名删除文件
{
FileAllocationTable temp = FAThead current;
if (strcmp(temp->filename filename) == 0) //匹配文件分配表第一个文件名
{
current = FAThead; //记录查找到的文件分配表
FAThead = FAThead->next;
}
else
{
while (temp->next) //匹配第一个文件名
{
if (strcmp(temp->next->filename filename) == 0)
break;
temp = temp->next;
}
if (temp->next == NULL)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 408082 2017-12-08 16:12 实验报告.docx
文件 5988 2017-12-08 11:51 osLab.cpp
文件 59392 2017-12-30 11:03 实验5 文件管理.doc
相关资源
- 安卓开发的文件管理器源码
- 文件格式识别工具 v1.0.1 绿色版.zip
- QT实现文件管理器.rar
- 美客企业文件管理系统
- 大势至共享文件夹管理软件
- qt tabbar 中文语言包 1038 1039 版本都
- winrar_64去广告破解版
- Green Software文件MD5校验工具 v3.0.zip
- 文管王文件管理系统(单机版) V6.
- 基于QT+Linux/Windows的简易文件管理器
- 模拟操作系统的文件管理
- 操作系统课程设计-文件管理系统-源码
- 配合速达ERP辅助计件工资录入(配合
- 文件管理系统-操作系统课程设计
- 操作系统的实验作业之文件管理
- 类Unix的文件管理系统课设
- 东北大学操作系统文件管理课程设计
- 文件管理系统 模拟OS文件管理机制
- 文件管理系统
- 操作系统 实验报告 文件管理
- 文件管理.用位示图管理磁盘空间的分
- 安卓开发文件管理源代码-供学习用
- Linux基于多级目录的文件管理系统
- 操作系统课程设计——文件管理系统
- 一个简单的文件管理系统
- 操作系统-二级文件目录系统
- 文件管理实现源代码
- Linux文件系统及文件管理 上机实验报
评论
共有 条评论