没有合适的资源?快使用搜索试试~ 我知道了~
操作系统 文件存储管理模拟系统.doc.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 93 浏览量
2022-07-08
13:09:54
上传
评论
收藏 164KB DOC 举报
温馨提示
试读
28页
操作系统 文件存储管理模拟系统
资源推荐
资源详情
资源评论
#include <STDIO.H>
#include <STDLIB.H>
#include <CONIO.H>
#include <STRING.H>
#include <TIME.H>
#include <cstring>
#include<iostream>
using namespace std;
const unsigned FILE_SYS_SIZE = 1024 * 1024; //模拟文件系统的容量设为 1M
const unsigned BITMAP_LEN = 64; //位示图的长度 512/8
const unsigned BLOCK_SIZE = 512; //一个文件块的大小
const unsigned BLOCK_COUNT = 512; //文件系统中文件块的数量
const unsigned NAME_LEN = 11; //最长文件名的长度
const unsigned PASSWORD_LEN = 11; //用户密码的最大长度
const unsigned LOGIN_COUNT = 5; //用户登录尝试次数
const unsigned COMMAND_LEN = 200; //命令行最大长度
const unsigned PRO_SET_COMM_COU = 10; //预设命令数
const char *PRO_SET_COMM[] = {"create",
"open","read","write","close","delete","mkdir","dir","showmap","exame","logout"};
//文件元素可供操作性权限
typedef enum
{
pub, //任何人可做任何操作
protect, //非创建者或 ADMIN,只可以察看
pri //非创建者或 ADMIN,不可以做任何操作
} FileAccess;
//文件元素类型
typedef enum
{
file, //文件
dir //文件夹
} FileType;
//用户类型
typedef enum
{
admin, //管理者,拥用所有权限
comm //一般用户
} UserType;
//文件状态
typedef enum
{
closed,
opened,
reading,
writing
} FileStatus;
//一个文件索引结构
typedef struct
{
unsigned Index; //文件元素索引编号
char FileName[NAME_LEN]; //文件元素名
char ParentName[NAME_LEN]; //父节点名
unsigned FileBlockId; //文件元素所在物理块编号
unsigned FileLevel; //文件元素所在层次,层+文件元素名为一个文件
元素的逻辑位置
unsigned effect; //是否有效,0-无效,1-有效
} FileIndexElement;
//文件索引结构或目录表项
typedef struct
{
FileIndexElement *FIStart; //文件系统中的文件索引起始位置
unsigned FILen; //文件索引的最大长度
unsigned FICount; //文件索引数量
} FileIndex;
//文件块的结构
typedef struct fb
{
unsigned FileBlockId; //文件块编号
unsigned BLOCK_SIZE; //文件块的容量
char *FileBlockAddr; //文件块地址
struct fb *next; //下一个文件块的地址
} FileBlock;
//文件系统的位示图结构
typedef struct
{
unsigned BITMAP_LEN; //文件位示图长度
char *BMStart; //位示图的起始指针
} BitMap;
//文件系统结构
typedef struct
{
char *FSStart; //文件系统的起始地址
unsigned SuperBlockSize; //文件系统的容量
BitMap bm; //文件系统中的位示图
unsigned BLOCK_COUNT; //文件系统中文件块的数量
FileBlock *head; //文件系统中文件块首地址
FileIndex FI; //文件系统中的文件索引
} SuperBlock;
typedef struct
{
char *UserName; //用户名称
UserType ut; //用户类型
} User;
//文件系统中的元素结构,包括文件和文件夹
typedef struct fse
{
struct fse *parent; //指向自己的父亲节点
unsigned FileLevel; //文件元素所在层次,层+文件元素名为一个文件
元素的逻辑位置
char FileName[NAME_LEN]; //文件元素名
unsigned FileBlockId; //文件元素所在物理块编号
unsigned FileElemLen; //文件元素的长度
FileType Type; //文件元素类型
FileAccess Access; //文件元素可供操作的权限
User Creator; //文件创建者
char CreateTime[18]; //创建时间,日期格式:MM/DD/YY HH:MI:SS
char LastModTime[18]; //最后一次修改时间
char *FileData; //一个文件的数据开始地址,文件夹时该值为 NULL
FileStatus fileStu; //如果是一个文件表示文件当前的状态
} FSElement;
typedef struct
{
int a1[]; //存储位示图
int a2[]; //存储取反位示图
}BitMapStore;
//系统当前状态
typedef struct
{
User CurrentUser; //当前用户
unsigned FileLevel; //用户所在文件系统层
FSElement *CurrParent; //当前层的父节点
char *CurrentPath; //当前路径
} CurrentStatus;
SuperBlock FS; //一个全局文件系统的变量
CurrentStatus CS; //当前系统状态
FSElement *base; //文件元素的根
//BitMapStore *a;
bool InitFileSys();
/*
* 函数介绍:寻找第一个空白的文件块 ID
* 输入参数:无
* 输出参数:无
* 返 回 值:返回第一个空白块的 ID
*/
unsigned FindBlankFileBlockId()
{
unsigned char c;
for (unsigned i = 0; i < FS.bm.BITMAP_LEN / 8; i++)
{
c = FS.bm.BMStart[i] | 0x7F;
if (c == 0x7F)
{
return i * 8; //一个字节左边第一位为 0,表示该区域未使用
}
c = FS.bm.BMStart[i] | 0xBF;
if (c == 0xBF)
{
return i * 8 + 1;
}
c = FS.bm.BMStart[i] | 0xDF;
if (c == 0xDF)
{
return i * 8 + 2;
}
c = FS.bm.BMStart[i] | 0xEF;
if (c == 0xEF)
{
return i * 8 + 3;
}
c = FS.bm.BMStart[i] | 0xF7;
if (c == 0xF7)
{
return i * 8 + 4;
}
c = FS.bm.BMStart[i] | 0xFB;
if (c == 0xFB)
{
return i * 8 + 5;
}
c = FS.bm.BMStart[i] | 0xFD;
if (c == 0xFD)
{
return i * 8 + 6;
}
c = FS.bm.BMStart[i] | 0xFE;
if (c == 0xFE)
{
return i * 8 + 7;
}
}
return BLOCK_COUNT + 1;
}
/*
* 函数介绍:寻找第一个文件块地址
* 输入参数:fileblockid 文件块 ID
* 输出参数:无
* 返 回 值:返回文件块的地址
*/
char * FindBlankFileBlock(unsigned fileblockid)
{
FileBlock *fblock = FS.head;
while (fblock->next != NULL)
{
if (fblock->FileBlockId == fileblockid)
{
return fblock->FileBlockAddr;
}
剩余27页未读,继续阅读
资源评论
老帽爬新坡
- 粉丝: 83
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功