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)

{