操作系统实习报告(磁盘文件操作)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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; {