资源简介
实验内容:
通过对具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。
要求:
1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简单的单用户文件系统。在退出这个简单的文件系统时,将该虚拟文件系统保存到磁盘上,以便下次再将它恢复到内存的虚拟磁盘空间中。
2.提供以下操作:
•new:建立一个新的简单文件系统;
•sfs:打开一个简单文件系统;
•exit:退出打开的简单文件系统;
•mkdir:创建子目录;
•rmdir:删除子目录;
•ls:显示目录;
•cd:更改当前目录;
•create:创建文件;
•open:打开文件;
•close:关闭文件;
•read:读文件;
•write:写文件;
•delete:删除文件。
代码片段和文件信息
#include
#include
#include
#include
#include
using namespace std;
#define GENERAL 1//1代表普通文件2代表目录文件0表示空文件
#define DIRECTORY 2
#define Zero 0
struct FCB
{
char fname[16]; //文件名
char type; // 0空文件 1目录文件 2空文件
int size; //文件大小
int fatherBlockNum; //当前的父目录盘块号
int currentBlockNum; //当前的盘块
void initialize()
{
strcpy(fname“\0“);
type = Zero;
size =0;
fatherBlockNum = currentBlockNum = 0;
}
};
const char* FilePath = “C:\\myfiles“;/*常量设置*/
const int BlockSize = 512; //盘块大小
const int OPEN_MAX = 5; //能打开最多的文件数
const int BlockCount = 128; //盘块数
const int DiskSize = BlockSize * BlockCount; //磁盘大小
const int BlockFcbCount = BlockSize/sizeof(FCB);//目录文件的最多FCB数
int OpenFileCount = 0; // 统计当前打开文件数目
struct OPENLIST //用户文件打开表
{
int files; //当前打开文件数
FCB f[OPEN_MAX]; //FCB拷贝
OPENLIST()
{
files=0;
for(int i=0;i f[i].fatherBlockNum = -1;//为分配打开
f[i].type=GENERAL;
}
}
};
struct dirFile/*-------------目录文件结构---------------*/
{
struct FCB fcb[BlockFcbCount];
void init(int _FatherBlockNumint _CurrentBlockNumchar *name)//父块号,当前块号,目录名
{
strcpy(fcb[0].fnamename); //本身的FCB
fcb[0].fatherBlockNum=_FatherBlockNum;
fcb[0].currentBlockNum=_CurrentBlockNum;
fcb[0].type=DIRECTORY; //标记目录文件
for(int i=1;i fcb[i].fatherBlockNum=_CurrentBlockNum; //标记为子项
fcb[i].type=Zero; // 标记为空白项
}
}
};
struct DISK/**********************************************************************/
{
int FAT1[BlockCount]; //FAT1
int FAT2[BlockCount]; //FAT2
struct dirFile root; //根目录
char data[BlockCount-3][BlockSize];
void format(){
memset(FAT10BlockCount); //FAT1
memset(FAT20BlockCount); //FAT2
FAT1[0]=FAT1[1]=FAT1[2]=-2; //012盘块号依次代表FAT1FAT2根目录区
FAT2[0]=FAT2[1]=FAT2[2]=-2; //FAT作备份
root.init(22“C:\\“);//根目录区
memset(data0sizeof(data));//数据区
}
};
FILE *fp; //磁盘文件地址
char * baseAddr; //虚拟磁盘空间基地址
string currentPath=“C:\\“; //当前路径
int current=2; //当前目录的盘块号
string cmd; //输入指令
struct DISK *osPoint; //磁盘操作系统指针
char command[16]; //文件名标识
struct OPENLIST* openlist; //用户文件列表指针
int format();
int mkdir(char *sonfname);
int rmdir(char *sonfname);
int create(char *name);
int listshow();
int delfile(char *name);
int changePath(char *sonfname);
int write(char *name);
int exit();
int open(char *file);
int close(char *file);
int read(char *file);
/*------------初始化-----------------------*/
int format()
{
current = 2;
currentPath=“C:\\“; //当前路径
osPoint->format();//打开文件列表初始化
delete openlist;
openlist=new OPENLIST;
/*-------保存到磁盘上myfiles--------*/
fp = fopen(FilePath“w+“);
fwrite(baseAddrsizeof(char)DiskSizefp);
fclose(fp);
printf(“格式化成功!!\n“);
return 1;
}
int mkdir(char *sonfname)/*-----------------------创建子目录-------- 属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 16310 2018-06-23 20:55 实验四.cpp
- 上一篇:基于arduino的光电鼠标A3050数据读取
- 下一篇:6n137库封装
相关资源
- STM32基于rt_thread操作系统的SDHC卡文件
- 51模拟SPI读写SD卡(包括Fat和Fat32文件
- 广东工业大学操作系统实验四文件系
- 二级文件系统(操作系统)
- 基于stm32F103vct6的SD卡FATFS文件系统移植
- linux系统的二级文件系统(QT实现了简
- 为linux系统设计一个简单的二级文件系
- linux2.6.11.12内核源码注释
- zedboard ubuntu16.04文件系统
- linux环境下课程设计《二级文件系统》
- MooseFS 分布式文件系统源码分析202页,
- 多用户多级目录文件系统的实现
- 模拟Unix文件系统,操作系统课程设计
- linux文件系统设计
- 基于STM32平台的智能药箱系统包含文件
- stm32f103的sdio方式读sd卡,带fatfs文件系
- Stm32驱动SDCard移植FATFS文件系统
- FS4412文件系统镜像文件
- 文件系统模拟 windows资源管理器模拟
- fuse文件系统课程设计源代码和设计文
- 操作系统课程设计报告-单用户多级文
- 模拟Linux文件系统含源码及报告
- 数据结构课设文件系统模拟器
- stm32 SD卡 fat系统 串口控制台
- 并行文件系统简介
- SD_Flash+FatFs+浮点型数据存取-Y.rar
- Tiny6410根文件系统yaffs2根文件系统
- STM32 adc采集数据存到SD卡中
- STM32_SD_FATFS文件系统学习资料
- 操作系统大型实验报告加源码
川公网安备 51152502000135号
评论
共有 条评论