没有合适的资源?快使用搜索试试~ 我知道了~
首页DOS的文件分配表策略的模拟实现
DOS的文件分配表策略的模拟实现

DOS的文件分配表策略的模拟实现,实现DOS的文件分配表策略和文件目录项
资源详情
资源评论
资源推荐

#include <windows.h>
#include <iostream>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define Request_num 13 //循环次数
using namespace std;
int FAT[30][10];
int iname = 1;
int LT_length = 0;
int LN_length = 0;
typedef struct File{
int filename; //文件名
int filesize; //簇数
int start; //起始
struct File *next;
}File, *FileLink;
//设置输出字体的颜色 textcolor(15);//白 textcolor(12); textcolor(10);
void textcolor (int color)
{
SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), color);
}
//初始化 FAT 数组
void Initialize()
{
int i, j;
for(i = 0; i < 30; i++)
for(j = 0; j < 10 ;j++)
FAT[i][j] = -1;
}
//检查数组空闲空间大小
int CheckSpace(int size)
{
int i, j, space=0;
for(i = 0; i < 30; i++)
for(j = 0; j < 10; j++)
{
if(FAT[i][j] == -1) space++;

if(space >= size) return 1;
}
return -1;
}
//随机产生删除的结点(即随机产生删除第几个文件)
int xRandom(int length)
{
int number;
srand( (unsigned)time( 0 ) );
number = 1 + (rand() % (length - 2));
if(length > 25 && number < 4 )
number += 20 ;
return number;
}
//随机生成文件大小
int Random()
{
int random1, random2, random;
srand( (unsigned)time( 0 ) );
if(iname % 10 == 0)
random1 = -2 + (rand() % 15);
else if(iname % 10 == 1)
random1 = -5 + (rand() % 20);
else if(iname % 10 == 2)
random1 = 4 + (rand() % 10);
else if(iname % 10 == 3)
random1 = -3 + (rand() % 20);
else if(iname % 10 == 4)
random1 = -8 + (rand() % 15);
else if(iname % 10 == 5)
random1 = 2 + (rand() % 10);
else if(iname % 10 == 6)
random1 = -6 + (rand() % 25);
else if(iname % 10 == 7)
random1 = -2 + (rand() % 15);
else if(iname % 10 == 8)
random1 = 5 + (rand() % 10);
else if(iname % 10 == 9)
random1 = -3 + (rand() % 20);
random2 = -5 + (rand() % 15);

random = random1 + random2;
if(random < 0) random += 15;
if(random <= 2) random += 3;
return random;
}
//分配簇
int Allocate(int size)
{
int i, j, k, l, flag1 = 0, flag2 = 0, flag = 0, first;
for(i = 0; i < 30; i++)
for(j = 0; j < 10; j++)
{
if(FAT[i][j] == -1)
{
flag++;
if(flag2 == 1)
{
FAT[k][l] = i*10 + j + 1;
flag2 = 0;
}
if(flag1 == 0)
{
first = i*10 + j + 1;
flag1 = 1;
}
k = i;
l = j;
flag2 = 1;
if(flag >= size)
{
FAT[i][j] = 0;
flag2 = 0;
return first;
}
}
}
return first;
剩余11页未读,继续阅读
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论2