操作系统实习报告(磁盘文件操作)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

大学

操作系统课程综合实践

题目:磁盘文件操作

班级:

姓名:

学号:

指导教师:

2011年 12 月 23日

磁盘文件操作

摘要:

为了正确地实现文件的存取,文件系统设计了一组与存取文件有关的功能模块,用户可以用“访问指令”调用这些功能模块,以实现文件的存取要求。我们把文件系统设计的这一组功能模块称为“文件操作“,实验就是要模拟实现一些文件操作。文件操作不是独立的,它和文件系统的其他部分密切相关,若要实现文件操作就离不开文件的目录结构、文件的组织结构和磁盘空间的管理。因此,这个实习虽然是文件操作的模拟实现,但还是必须模拟一部分文件的组织结构、目录结构和磁盘空间管理的实现。

关键字:磁盘、文件、目录、分配表。

一、实验内容:

设计一个简单的文件系统,用文件模拟磁盘,用数组模拟缓冲区,要求实现;1.支持多级目录结构,支持文件的绝对路径;

2.文件的逻辑结构采用流式结构,物理结构采用链接结构中的显示链接方式;

3.采用文件分配表;

4.实现的命令包括建立目录、列目录、删除空目录、建立文件、删除文件、显示文件内容、打开文件、读文件、写文件(追加方式)、关闭文件、改变文件属性。

最后编写主函数对所做工作进行测试。

二、实验目的:

1、文件的操作。

2、文件的逻辑结构和物理结构

3、磁盘空间的管理

4、磁盘目录结构

三、实验环境:

Windows XP、VC++

四、程序运行结果(详图):

程序运行的主界面:用户运行命令7-建立目录

用户运行命令1-建立文件:显示目录内容:

打开文件:

写文件:

关闭文件:

再次显示目录内容:

以上为程序的运行的部分截图。

五、程序清单:

#define false 0

#define true 1

#include "stdio.h"

//#include

#include

//#param warning(disable:4996)

FILE*x1,*x2;

typedef struct

{

char name[3]; /*文件或目录名*/

char type[2]; /*文件类型名*/

char attribute; /*属性*/

char address; /*文件或目录的起始盘块号*/

char length; /*文件长度,以盘块为单位*/

}content; /*目录结构*/

#define n 5 /*模拟实验中系统允许打开文件的最大数量*/ typedef struct

{

int dnum; /*磁盘盘块号*/

int bnum; /*盘块内第几项*/

}pointer; /*已打开文件表中读写指针的结构*/

typedef struct

char name[20]; /*文件绝对路径名*/

char attribute;/*文件的属性,用1个字节表示,所以用了char类型*/ int number; /*文件起始盘块号*/

int length; /*文件长度,文件占用的字节数*/

int flag; /*操作类型,用"0"表示以读操作方式开文件,用"1"表示写操作方式打开文件*/

pointer read; /*读文件的位置,文件刚打开时dnum为文件起始盘块号,bnum 为"0"*/

pointer write; /*写文件的位置,文件建立时dnum为文件起始盘块号,bnum 为"0",打开时为文件末尾*/

}OFILE; /*已打开文件表项类型定义*/

struct

{

OFILE file[n]; /*已打开文件表*/

int length; /*已打开文件表中登记的文件数量*/

}openfile; /*已打开文件表定义*/

char buffer1[64];/*模拟缓冲1*/

content buffer2[8];/*模拟缓冲2*/

FILE *fc; /*模拟磁盘的文件指针*/

void copen(OFILE *x1,OFILE *x2)

//OFILE *x1,*x2;

{

strcpy(x1->name,x2->name);

x1->attribute=x2->attribute;

x1->number=x2->number;

x1->length=x2->length;

x1->flag=x2->flag;

x1->read.dnum=x2->read.dnum;

x1->read.bnum=x2->read.bnum;

x1->write.dnum=x2->write.dnum;

x1->write.bnum=x2->write.bnum;

}

int sopen(char *name)

/*在已打开文件表中查找文件name*/ //P172

//char *name;

{

int i;

i=0;

while(i

依次查找已打开文件表*/

i++;

if(i>=openfile.length)

return(-1);

return(i);

}/*查找sopen函数结束*/

void dopen(char *name)

/*在已打开文件表中删除文件name*/

//char *name;

{

int i;

i=sopen(name);

if(i==-1)

printf("文件未打开\n");

else

{

copen(&openfile.file[i],&openfile.file[openfile.length-1]);

openfile.length--;

}

}/*删除函数结束*/

int iopen(content *x)

/*在已打开文件表中插入文件name*/

//content *x;

{

相关文档
最新文档