C语言 文件管理
- 格式:doc
- 大小:262.00 KB
- 文档页数:25
实 验 报 告
课程名称 操 作 系 统 实 验
实验名称 文件管理
实验类型 设计型
实验地点 机房304 实验日期 2012.6.14
指导教师 赵新慧
专 业 计算机科学与技术
班 级 算机1002
学 号 **********
姓 名 张少阳
成 绩
辽宁石油化工大学计算机与通信工程学院实验报告说明
1、 封面内容
(1)课程名称:实验所属的课程的名称。
(2)实验名称:要用最简练的语言反映实验的内容。要求与实验指导书中相一致。
(3)实验类型:说明是验证型实验、设计型实验、创新型实验还是综合型实验。
2、正文内容
实验报告的正文内容须包括以下内容:
(1)实验目的:目的要明确,要抓住重点,符合实验指导书中的要求。
(2)实验内容:说明本实验的主要内容。
(3)实验原理:简要说明本实验项目所涉及的理论知识。
(4)实验环境:实验用的软硬件环境(配置)。
(5)实验方案:对于验证性型实验,写明依据何种原理、操作方法进行实验;对于设计型和综合型实验,写明依据何种原理、操作方法进行实验,并画出硬件组成图、软件流程图、设计思路和设计方法,再配以相应的文字说明;对于创新型实验,除符合设计型和综合型实验要求外,还应注明其创新点、特色。
(6)实验步骤:写明实验的实施步骤,包括实验过程中的记录、数据。 (7)实验结果与分析:写明实验的最终结果,并对结果进行分析,做出结论。
(8)实验中遇到的问题及解决方法:写明实验过程中遇到的问题及所采取的解决方法。
(9)实验总结(在封底上):写出对本次实验的心得体会、思考和建议。
辽宁石油化工大学计算机与通信工程学院实验报告
实验5 文件管理
一.实验目的
本实验模拟操作系统中的建立文件、删除文件、建立目录、显示目录、改变目录和删除目录等操作。通过该实验使学生了解文件系统的基本结构和文件的各种管理方法。
二.实验原理
文件通常存放在外存(如磁盘、磁带)上,可以作为一个独立单位存放和实施相应的操作(如打开、关闭、读、写等)。为了加快对文件的检索,往往将文件控制块集中在一起进行管理。这种文件控制块的有序集合称为文件目录。文件控制块就是其中的目录项。图6-1示例一种目录的组织形式。
图6-1 目录树 三.实验内容
模拟一个文件系统,包括目录文件,普通文件,并实现对它们的一些基本操作。假定每个目录文件最多只能占用一个块;一个目录项包括文件名(下一级目录名),文件类型,文件长度,指向文件内容(下一级目录)的指针内容。普通文件可以只用目录项(FCB)代表。
程序功能方面的要求:
需要实现一个命令行操作界面,包含如下命令:
1 改变目录
格式:CD〈目录名〉
功能:工作目录转移到指定的目录下,只要求完成改变到当前目录的某一个子目录下的功能,不要求实现相对目录以及绝对目录。
2 创建文件
格式:CREATE〈文件名〉〈文件长度〉
功能:创立一个指定名字的新文件,即在目录中增加一项,不考虑文件内容,但必须能输入文件长度。
3 删除文件
格式:DEL〈希望删除的文件名〉
功能:删除指定的文件
4 显示目录
格式:LSALL
功能:显示全部目录以及文件,输出时要求先输出接近根的目录,再输出子目录。
5 创建目录
格式:MD〈目录名〉
功能:在当前路径下创建指定的目录 6 删除目录
格式:RD〈目录名〉
功能:删除当前目录下的指定目录,如果该目录为空,则可删除,否则应提示是否作删除,删除操作将该目录下的全部文件和子目录都删除。
四.实验环境
软件环境:Tc 或Visual C++
五.流程图
开始
输入用户名
在MFD中找到该用户名
显示该用户名UFD中所有文件
初始化AFD
操作命令
CREATE DELTET OPEN CLOSE READ WRITE
保护当前文件目录
结束
六.程序中用到的结构图
七、实验程序
#include
#include
#include
#include
#include
#include
// ******************目录和文件的结构定义******
typedef struct node
{
char name[50]; /*目录或文件的名字*/
int type; /*0代表目录,1代表普通文件*/
struct node *next; /*指向下一个兄弟结点的指针*/
struct node *sub; /*指向第一个子结点的指针*/
struct node *father; /*指向父结点的指针*/
int size; /*如果是文件则表示文件的大小*/
}dirNode;
dirNode *workDir; //定义当前工作目录
dirNode root; //定义根目录
char path[100]; //定义路径信息
//初始化函数
void initial()
{
strcpy(,"root");
root.type=0; root.next=NULL;
root.sub=NULL;
root.father=NULL;
root.size=0;
workDir=&root;
strcpy(path,"root");
}
//初始化新结点函数
dirNode *init()
{
dirNode *p;
p=new dirNode;
strcpy(,"");
root.type=0;
root.next=NULL;
root.sub=NULL;
root.father=NULL;
root.size=0;
return p;
}
//1 改变目录
void CD(char dirName[])
{
dirNode *p;
int flag=0;
p=workDir->sub;
if(p==NULL)
{
cout<<"错误,\""<
}
else{
while(p)
{
if(p->type==0)
{
if(!strcmp(p->name,dirName))
{
flag=1; break;
}
}
p=p->next;
}
if(flag==1)
{
workDir=p;
strcat(path,"\\ ");
strcat(path,p->name);
cout<<"工作目录已进入\""<
}
else{
cout<<"错误,\""<
}
}
}
//2 创建文件
void CREATE(char fileName[],int fileSize)
{
int flag;
dirNode *p,*q;
q=new dirNode;
strcpy(q->name,fileName);
q->sub=NULL;
q->type=1;
q->next=NULL;
q->father=workDir;
q->size=fileSize;
p=workDir->sub;
if(p==NULL)
{
workDir->sub=q;
cout<<"\""<
}
else{
flag=0;
while(p) {
if(p->type==1)
{
if(!strcmp(p->name,fileName))
{
flag=1;
cout<<"错误,\""<
}
}
p=p->next;
}
if(flag==0)
{
p=workDir->sub;
while(p->next)
{
p=p->next;
}
p->next=q;
cout<<"\""<
}
}
}
//3 删除文件
void DEL(char fileName[])
{
dirNode *p,*q;
int flag=0;
p=workDir->sub;
if(p==NULL)
{
cout<<"错误,\""<
}
else{
while(p)
{
if(p->type==1)
{