• 大小: 359KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: 其他
  • 标签: 文件管理  

资源简介

给出一个磁盘块序列: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

评论

共有 条评论