文件系统课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统课程设计报告
题目:文件系统
专业:软件工程
院系:信息管理学院
年级:大三软件Q1141
学号: ******** *名:**
指导教师:***
职称:副教授
湖北经济学院教务处制
目录
操作系统课程设计报告
一实验内容 (2)
二设计的基本概念和原理 (2)
三总体设计 (2)
2-1 文件的组织结
构.............................................................
(2)
2-2 磁盘空间的管
理.............................................................
(2)
2-3 目录结
构 (3)
2-4文件操
作 (4)
四详细设计 (4)
4-1 建立文件(create_file)流程
图 (4)
4-2 打开文件(open_file)流程
图 (6)
4-3读文件(read_file)流程
图 (7)
4-4 写文件(write_file)流程
图 (8)
4-5 关闭文件(close_file)流程
图 (9)
4-6 删除文件(delete_file)流程
图 (10)
4-7 显示文件内容(typefile)流程
图 (11)
4-8 建立目录(md)流程
图 (12)
4-9显示目录内容流程
图 (13)
五详细代码 (14)
六运行结果截图 (40)
七总结 (44)
八参考文献 (45)
一、实验内容
要求设计一个简单的文件系统,用文件模拟磁盘,实现以下功能:
(1)支持多级目录结构;
(2)实现的命令包括建立目录、列目录、删除空目录、建立文件、删除文件、显示文件内容、打开文件、读文件、写文件、关闭文件、改变文件属性。
(3)编写主函数对所有操作进行测试
二、设计的基本概念和原理
为了正确地实现文件的存取,文件系统设计了一组与存取文件有关的功能模块,用户可以用“访问指令”调用这些功能模块,以实现文件的存取要求。我们把文件系统设计的这一组功能模块称为“文件操作“,实验就是要模拟实现一些文件操作。文件操作不是独立的,它和文件系统的其他部分密切相关,若要实现文件操作就离不开文件的目录结构、文件的组织结构和磁盘空间的管理。因此,这个实习虽然是文件操作的模拟实现,但还是必须模拟一部分文件的组织结构、目录结构和磁盘空
四、详细设计
(1)建立文件:create_file(文件名,文件属性)
(4)写文件write_file(文件名,缓冲,写长度)
(8)目录操作命令:建立目录(md)
五、详细代码
int sopen(char *name) //在已打开的文件表中查找文件name
{
int i;
i = 0;
while(i { i++; } if(i>=openfile.length) { return -1; } return i; } void dopen(char *name) //在已打开文件表中删除文件name { int i; i = sopen(name); if(i==-1) { printf("文件未打开\n"); } else { copy(&openfile.file[i], &openfile.file[openfile.length - 1]); openfile.length--; } } int iopen(ofile *x)//向已打开文件列表中插入文件x->name { int i; i = sopen(x->name); if(i!=-1) { printf("文件已经打开\n"); return false; } else if(openfile.length == n) { printf("已打开文件表已满"); return false; } else { copy(&openfile.file[openfile.length], x); openfile.length ++; return true; } } int allocate()//分配一个磁盘块,返回块号 { int i; fseek(fc, 0, SEEK_SET);//将模拟磁盘的文件指针移至模拟磁盘FAT表 fread(buffer1,64L, 1, fc); for(i = 3; i < 63; i++) { if(buffer1[i] == 0)//FAT中的第i项为0,分配第i块磁盘块,修改FAT 表,并且写回磁盘 { buffer1[i] = 255; fseek(fc, 0, SEEK_SET); fwrite(buffer1, 64L, 1, fc); return i; //返回磁盘号 } } fread(buffer1, 64L, 1, fc);//将FAT表中第二个磁盘块读入模拟缓冲buffer1 for(i = 0; i < 63; i++)