模拟文件系统文档格式.docx
- 文档编号:15872544
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:16
- 大小:71.14KB
模拟文件系统文档格式.docx
《模拟文件系统文档格式.docx》由会员分享,可在线阅读,更多相关《模拟文件系统文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
DIR显示文件目录(当前目录下)
HELP获得命令的帮助
EXIT退出系统
三.设计思想说明
1.设计环境
课程设计的环境是windowsxpsp2操作系统。
在windows系统中创建一个较大容量的文件,作为所设计文件系统的假想的“文件卷”,从而编写各程序模块。
2.开发环境
课程设计所使用的开发环境是VC++6.0
3.基本思想
以1M的存储器空间为例作为文件空间,空间“分块”。
超级块,在最前面,共占3.2k个字节。
其中0.2K个字节存放目录节点的位示图,1K个字节存放文件节点的位示图,2k字节存放盘块节点的位示图。
用位状态='
0'
表示空闲,状态='
1'
表示已分配。
后半部用于存放目录接点和文件接点。
超级块不参与文件空间的动态分配。
其他块用于存贮目录接点和文件接点的信息。
该程序在系统盘内自动创建一个目录A:
作为该系统的根目录。
四.需求分析
该模拟文件系统包括目录文件(简称目录)、普通文件(简称文件),并实现下面一些基本功能:
1.改变目录:
CD〈目录名〉,工作目录转到指定的目录下。
CD..,返回上一级目录下
2.创建文件:
MKF〈文件名〉,创建一个指定名字的新文件,即在目录中增加一项,不考虑文件的内容。
3.删除文件:
DELF〈文件名〉,删除指定的文件。
4.显示目录:
DIR[〈目录名〉],显示目录下全部文件和第一级子目录,如果没有指定路径名,则显示当前目录下的内容。
5.创建目录:
MKD〈目录名〉,再指定路径下创建指定的目录,或者在没有指定路径时,在当前目录下创建子目录。
6.删除目录:
DELD〈目录名〉,删除指定的目录。
7.获得命令帮助HELP
8.退出文件系统EXIT
要考虑的特殊情况:
1.各个命令对全路径和相对路径的支持
<
1>
.目录不存在时,给出错误信息
2>
.不能用cd进入文件
3>
.相对路径的解析
4>
.路径中的空格剔除
2.删除目录或文件时的问题
<
删除不存在的文件或目录,给出错误提示
删除目录时目录不为空;
如果该目录为空,则可删除,否则给出是否做删除,删除操作将该目录下的全部文件和子目录都删除
进入到某个目录下,却要删除本目录或者上级目录
3。
创建目录或文件相同的问题
文件或目录已经存在时,给出已经定义信息提示
五.系统设计
1.流程图
输入不是exit的命令
关闭文件系统
当没有用户使用时,输入命令为exit
2.数据结构
目录文件结点信息存储结构:
structdir_node//目录节点
{
SYSTEMTIMEctime;
//创建时间
chardir_name[32];
//目录名
intchild_dir[8];
//子目录索引
intdir_count;
//当前子目录数
intchild_file[16];
//子文件索引
intfile_count;
//当前子文件数
intparent;
//父目录索引
}
文件目录存储位置存储结构:
structfile_node//文件节点
charfile_name[32];
//文件名
intblock[4];
//该文件占有的磁盘块索引
intblock_count;
//该文件当前占有的磁盘块数
intfile_length;
//文件长度
};
文件、目录、盘块的占用的标志位
intdir_flag[DIR_NUM];
//各目录节点占用标志,0表示空闲,1表示被占用
intfile_flag[FILE_NUM];
//各文件节点的占用标志
intblock_flag[BLOCK_NUM];
//磁盘块的占用标志
常驻内存的标志文件(目录)修改的标志位和标志文件(目录)修改标志位的标志位
intdir_change_flag[DIR_NUM];
//用于标志目录节点的修改
intfile_change_flag[FILE_NUM];
//用于标志文件节点的修改
intdirflag_flag[DIR_NUM];
//用于标志dir_flag[DIR_NUM]的修改
intfileflag_flag[FILE_NUM];
//用于标志file_flag[FILE_NUM]的修改
intblockflag_flag[BLOCK_NUM];
//用于标志block_flag[BLOCK_NUM]的修改
5>
记录当前路径和当前目录的全局变量
intcurr;
//当前目录索引
dir_node*curr_dir;
//当前目录节点指针
charcurr_path[512];
//当前路径
3.主要模块说明
创建文件
intget_file(intparent,char*file_name)
//创建文件节点,成功则返回文件的索引号,失败返回-1
intindex;
if(search(parent,file_name,1,index)!
=-1)//搜索在父目录下是否有同名文件存在,有则创建失败
{
printf("
Filenamerepeated!
\n"
);
return-1;
}
for(inti=0;
i<
FILE_NUM;
i++)//搜索空闲的文件节点
if(file_flag[i]==0)
{
strcpy(file[i].file_name,file_name);
file[i].block_count=0;
if(get_block(i)==-1)//给新创建的文件申请磁盘块,如果失败,创建文件将失败
{
printf("
Diskvolumnerror!
return-1;
}
file_flag[i]=1;
fileflag_flag[i]++;
//登记并给文件节点初始化
file_change_flag[i]++;
file[i].file_length=0;
file[i].parent=parent;
GetLocalTime(&
file[i].ctime);
//获得当前时间
returni;
}
return-1;
intcreate_file(intparent,char*file_name)//在指定的目录下创建文件,如果创建成功则返回
{//文件的索引号,否则返回-1
if(dir[parent].file_count==16)//如果父目录已满,则创建失败
Parentdirectoryisfull!
}
intpos=get_file(parent,file_name);
//开始创建文件
if(pos==-1)
Createfileerror!
dir_node*p=&
dir[parent];
//修改父目录的控制信息
inttop=p->
file_count;
p->
child_file[top]=pos;
file_count++;
dir_change_flag[parent]++;
returnpos;
intcreate(char*name)//创建文件的主调函数,前提是已经取得要创建文件的索引
{//成功返回文件的索引号,否则返回-1
intparent,p=0;
parent=get_parent(name,p);
if(parent==-1)//找不到父目录,输入错误,创建失败
Pathnameerror!
returncreate_file(parent,name+p);
创建目录
intcreate_dir(intparent,char*dir_name)//在指定的目录下创建目录,如果成功则返回目录
{//的索引号,否则返回-1
if(dir[parent].dir_count==DIR_NUM-1)//如果父目录已满,则创建失败
intpos=get_dir(parent,dir_name);
//开始创建目录
Createdirectoryerror!
dir_node*p=&
dir_count;
child_dir[top]=pos;
dir_count++;
intmd(char*name)//创建目录的主调函数,它的参数只有用户输入
{//如果创建成功,则返回目录的索引号,否则
//返回-1
if(parent==-1)//父目录找不到,输入有误,创建失败
returncreate_dir(parent,name+p);
删除文件
voiddel_file(intpos)//删除文件,调用该函数的前提是已经取得要删除文件的索引号
{
return_block(pos);
//释放磁盘块
file_flag[pos]=0;
fileflag_flag[pos]++;
file_change_flag[pos]=0;
intdel_file(intparent,char*file_name)//在指定的目录下删除文件,删除成功则返回文件的
{//索引号,否则返回-1
intdel_pos,index;
if((del_pos=search(parent,file_name,1,index))==-1)//搜索该文件是否存在,不存在则删除失败
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模拟 文件系统