#include<iostream>
#include<ctime>
#include<cstdlib>
#include<vector>
#include<string>
using namespace std;
#define LEN 500
/**************************************************
基于长度可变区域的索引分配 + 位表
**************************************************/
/*
定义文件结构
*/
typedef struct File
{
string name;//文件名
float size;//文件大小
}File;
/*
定义文件分配表结构
*/
typedef struct Fat //file allocation table文件分配表
{
string fileName; //文件名
int indexBlock; //索引块号
}Fat;
/*
随机产生文件大小
*/
float randFileSize()
{
//srand(time(seed));
float fileSize = (rand() % 81 + 20)/10.0f;//随机产生大小为2k—10k的文件
return fileSize;
}
/*
存储文件
*/
bool storageFile(int bitTable[],vector<Fat> &FAT, File file, int disk[][LEN])
{
int n = ceil(file.size/2);//向上取整,获得文件存储需要的块数(不包括索引块)
//检查是否有足够的空块来存放该文件
int i = 0;
int k = 0;
int index = -1;//索引块
for (; i < LEN; i++) {
if (bitTable[i] == 0) {
k++;
if (k == 1) {
index = i;//记下索引块
}
if (k == n + 1) {
break;
}
}
}
//没有足够空间来存放该文件
if (k <= n) {
return false;
}
//cout << "索引块:" << index <<endl;
///
//
// 若有足够的空白块来存放该文件,则将索引块存放在第一个空白块上
//
///
//更新文件分配表
Fat fat;
fat.fileName = file.name;
fat.indexBlock = index;
FAT.push_back(fat);
//更新位表
bitTable[index] = 1;
i = index + 1;//从索引块的下一个位置继续寻找空白块
k = 0;//记录每段分区的长度
int t = 0;
//根据位表找到存放的位置,更新索引块,更新位表
for (int j = 0; j < n; j++) {
if (bitT
操作系统实验——文件管理
最新推荐文章于 2024-08-28 09:50:48 发布
这篇博客通过C++代码介绍了操作系统中基于长度可变区域的索引分配与位表结合的文件管理系统。内容包括随机生成文件大小,存储文件的逻辑,查找和删除文件的实现,以及输出索引块和存储位置的方法。通过示例展示了如何创建、删除文件以及查看文件分配表。
摘要由CSDN通过智能技术生成