ImageVerifierCode 换一换
格式:DOCX , 页数:43 ,大小:303.33KB ,
资源ID:10195831      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10195831.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(虚拟文件系统.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

虚拟文件系统.docx

1、虚拟文件系统虚拟文件系统学生课程设计报告 2014 2015 学年 第 二 学期学 院 XXXXXXXXX 专 业 软件工程 学 号 姓 名 指导教师 起 止 周周数1实习地点课程设计目的:1、 理解文件系统功能2、 完成对文件、目录及磁盘空间的管理并提供操作命令3、 实现文件共享与保护课程设计要求:1、利用索引结点实现目录管理。2、建立一个树形目录系统,目录文件及索引结点均用结构数组表示。3、文件盘块采用FAT方式,空指针用-1表示,并设空闲盘块指针。4、提供对文件、目录及磁盘空间的操作命令。进度安排及主要内容:第一周:完成用户登录,目录管理和文件管理第二周:成绩:指导教师(签字)年 月 日

2、一、概述1.1 本文的目的本文内容用于指导学生对课程设计报告的格式和内容安排进行控制。学生在使用时,可直接用格式刷将本文对应部分的格式内容进行提取并加载到目标位置;对于封面、页眉等部分,请直接修改相关文字。二、需求分析本次要实现虚拟文件系统,主要功能有用户登录、子目录的创建、删除、子目录中项的显示;文件的创建、打开、删除、关闭、对文件进行读写等。实现对目录和文件的基本操作和文件的共享与保护。三、技术方案本次课程设计用VS2013编写C+控制台程序模拟文件系统。系统初始时需要登录,登录成功方能对文件进行操作。本虚拟文件系统采用两级目录,第一级目录对应用户账号,第二级目录对应用户下的文件。文件系统

3、的数据结构包括主目录(虚拟C盘)、子目录及所含文件等。三者都存放在磁盘中,方便进行操作。文件可以在目录中进行记录,表明文件所在目录。四、总体设计4.1功能设计1、首次运行系统需要先格式化磁盘空间,申请一个内存为1M的磁盘空间。2、用户登录,用户需输入正确的用户名和密码方能进入本系统进行文件和目录的操作。3、进入系统后可根据提示对文件和目录进行操作。4.2虚拟文件系统算法流程图 算法流程图4-1五、详细设计5.1系统功能说明1、 创建子目录:输入createdir 目录名,即进行目录创建操作,若当前目录已满或文件名已经存在则创建失败,返回失败信息。否则创建成功,并找到空闲磁盘块,将该磁盘块设为已

4、分配,填写目录项。2、 删除子目录:removedir 目录名,检查当前目录项中有无该目录,判断要删除的目录有无子目录,如果有子目录将其释放,进行删除操作。3、 更改当前目录:cd 目录名,可以进入到子目录并回退上级目录。4、 显示目录中项:showdir可以显示目录和文件,文件显示大小,目录显示目录。5、 文件操作:创建文件、打开文件(创建时自动打开该文件),删除文件,关闭文件、读文件、写文件、6、 退出5.2数据结构struct direct /* *文件控制快信息 */ struct FCB char name9; /文件/目录名8位 char property; /属性1位目录0位普通

5、文件 int size; /文件/目录字节数、盘块数) int firstdisk; /文件/目录起始盘块号 int next; /子目录起始盘块号 int sign; /1是根目录0不是根目录 directitemMSD + 2;/*size 8*/struct fatitem int item; /存放文件下一个磁盘的指针 char em_disk; /磁盘块是否空闲标志位0 空闲;struct opentable struct openttableitem char name9; /文件名 int firstdisk; /起始盘块号 int size; /文件的大小 openitemMO

6、FN; int cur_size; /当前打文件的数目;struct fatitem *fat; /FAT表struct direct *root; /根目录struct direct *cur_dir; /当前目录struct opentable u_opentable; /文件打开表5.3方法函数void initfile();void format();void enter();void init();int create(char *name);int open(char *name);int close(char *name);int write(int fd, char *buf,

7、 int len);int read(int fd, char *buf);int del(char *name);int createdir(char *name);int removedir(char *name);void showdir();int cd(char *name);void print();void show();void login();5.4全局变量#define MEM_D_SIZE 1024*1024 /总磁盘空间为M#define DISKSIZE 1024 /磁盘块的大小K#define DISK_NUM 1024 /磁盘块数目K#define FATSIZE

8、 DISK_NUM*sizeof(struct fatitem) /FAT表大小#define ROOT_DISK_NO FATSIZE/DISKSIZE+1 /根目录起始盘块号#define ROOT_DISK_SIZE sizeof(struct direct) /根目录大小#define DIR_MAXSIZE 1024 /路径最大长度为KB#define MSD 6 /最大子目录数#define MOFN 4 /最大文件深度为#define MAX_WRITE 1024*128 /最大写入文字长度KB char *username = (char *)malloc(sizeof(cha

9、r) * 100);char *password = (char *)malloc(sizeof(char) * 100);六、软件测试6.1格式化磁盘空间测试6.2用户登录测试6.3创建子目录测试6.4进入子目录测试6.5创建文件测试6.6写入文件测试6.7读文件测试6.8返回上级目录测试6.9显示目录中项测试6.10读写权限测试七、总结本次课程设计我初步完成了虚拟文件系统的目录管理和文件管理。让我对于文件系统有了深层次的理解和掌握,通过自己编写程序逐步提高自己的编程能力,并从中体会到了很多乐趣和知识。同时让我对C语言中的指针有了一个更深的了解。由于以前对于C+知识没有掌握牢固,使我在编程中

10、出现了很多错误。费了很多时间,但是我通过不断学习也提高了很多,对一些细节的结构体等也有了一个更深的理解。这次课程设计让我进行了以前课堂很少有的实践训练,虽然掌握的知识有限,但是这次经历让我提高了编程能力和编程思想,使我受益匪浅。附录1参考文献1 谭浩强,C+程序设计(第2版)清华大学出版社,2012.2 汤小丹、梁红兵、哲凤屏,计算机操作系统西安电子科技大学出版社,2014. 3 严蔚敏数据结构清华大学出版社.,2007附录2源码/ kcsj001.cpp : Defines the entry point for the console application./#include stdaf

11、x.h#include #include #include #define MEM_D_SIZE 1024*1024 /总磁盘空间为M#define DISKSIZE 1024 /磁盘块的大小K#define DISK_NUM 1024 /磁盘块数目K#define FATSIZE DISK_NUM*sizeof(struct fatitem) /FAT表大小#define ROOT_DISK_NO FATSIZE/DISKSIZE+1 /根目录起始盘块号#define ROOT_DISK_SIZE sizeof(struct direct) /根目录大小#define DIR_MAXSIZE

12、 1024 /路径最大长度为KB#define MSD 6 /最大子目录数#define MOFN 4 /最大文件深度为#define MAX_WRITE 1024*128 /最大写入文字长度KB char *username = (char *)malloc(sizeof(char) * 100);char *password = (char *)malloc(sizeof(char) * 100);struct direct /* *文件控制快信息 */ struct FCB char name9; /文件/目录名8位 char property; /属性1位目录0位普通文件 int si

13、ze; /文件/目录字节数、盘块数) int firstdisk; /文件/目录起始盘块号 int next; /子目录起始盘块号 int sign; /1是根目录0不是根目录 directitemMSD + 2;/*size 8*/struct fatitem int item; /存放文件下一个磁盘的指针 char em_disk; /磁盘块是否空闲标志位0 空闲;struct opentable struct openttableitem char name9; /文件名 int firstdisk; /起始盘块号 int size; /文件的大小 openitemMOFN; int c

14、ur_size; /当前打文件的数目;struct fatitem *fat; /FAT表struct direct *root; /根目录struct direct *cur_dir; /当前目录struct opentable u_opentable; /文件打开表int fd = -1; /文件打开表的序号char *bufferdir; /记录当前路径的名称char *fdisk; /虚拟磁盘起始地址void initfile();void format();void enter();void halt();int create(char *name);int open(char *n

15、ame);int close(char *name);int write(int fd, char *buf, int len);int read(int fd, char *buf);int del(char *name);int mkdir(char *name);int rmdir(char *name);void dir();int cd(char *name);void print();void show();void login();main() FILE *fp; char ch; char a100; char code1110; char name10; int i, fla

16、g, r_size; char *contect; contect = (char *)malloc(MAX_WRITE*sizeof(char); if (fp = fopen(disk.dat, rb) = NULL) printf(您还没有格式化,是否格式化?(y/n); scanf(%c, &ch); if (ch = y) initfile(); printf(格式化成功! n); else return 0; printf(您还未登录,请先登录! n);GotoTest: login(); if (strcmp(username, readonly) != 0 | strcmp(p

17、assword, 1234) != 0) & (strcmp(username, root) != 0 | strcmp(password, root) != 0) & (strcmp(username, nopower) != 0 | strcmp(password, 1234) != 0) printf(登录失败,请重新登录! n); goto GotoTest; printf(登录成功! n); enter(); print(); show(); strcpy(code0, exit); strcpy(code1, create); strcpy(code2, open); strcpy

18、(code3, close); strcpy(code4, write); strcpy(code5, read); strcpy(code6, del); strcpy(code7, createdir); strcpy(code8, removedir); strcpy(code9, showdir); strcpy(code10, cd); while (1) scanf(%s, a); for (i = 0; i11; i+) if (!strcmp(codei, a) break; switch (i) case 0: /退出文件系统 free(contect); halt(); r

19、eturn 0; case 1: /创建文件 scanf(%s, name); flag = create(name); if (flag = -1) printf(Error: n 长度太长 !n); else if (flag = -2) printf(Error: n 子目录已满 !n); else if (flag = -3) printf(Error: n 打开文件次数过多 !n); else if (flag = -4) printf(Error: n 名字已经在子目录中 !n); else if (flag = -5) printf(Error: n 磁盘空间已满!n); els

20、e printf(创建文件成功! n); show(); break; case 2:/打开文件 scanf(%s, name); fd = open(name); if (fd = -1) printf(Error: n 打开的文件不存在! n); else if (fd = -2) printf(Error: n 文件已经打开! n); else if (fd = -3) printf(Error: n 打开文件次数过多! n); else if (fd = -4) printf(Error: n 这是一个子目录,不能打开进行读写! n); else printf(打开成功! n); sh

21、ow(); break; case 3:/关闭文件 scanf(%s, name); flag = close(name); if (flag = -1) printf(Error:n 文件没有打开 ! n); else printf(关闭成功! n); show(); break; case 4:/写文件 if (fd = -1) printf(Error:n文件没有打开 ! n); else if (strcmp(username, readonly) != 0 & strcmp(username, nopower) != 0) printf(请输入文件内容:); scanf(%s, co

22、ntect); flag = write(fd, contect, strlen(contect); if (flag = 0) printf(写入成功! n); else printf(Error:n 磁盘大小没满! n); else printf(您没有写入权限!n); show(); break; case 5:/读文件 if (fd = -1) printf(Error:n 文件没有打开 ! n); else if (strcmp(username, nopower) != 0) flag = read(fd, contect); if (flag = 0) for (i = 0; i

23、u_opentable.openitemfd.size; i+) printf(%c, contecti); printf(tn); else printf(您没有读取权限!n); show(); break; case 6:/删除文件 scanf(%s, name); flag = del(name); if (flag = -1) printf(Error:n 文件不存在! n); else if (flag = -2) printf(Error:n 文件已经打开,请先关闭它 ! n); else if (flag = -3) printf(Error:n 删除的不是文件 ! n); el

24、se printf(删除成功! n); show(); break; case 7:/创建子目录 scanf(%s, name); flag = mkdir(name); if (flag = -1) printf(Error:n 名称长度太长! n); else if (flag = -2) printf(Error:n 子目录已满 ! n); else if (flag = -3) printf(Error:n 名称已在子目录中 ! n); else if (flag = -4) printf(Error: n . 或 . 不能作为子目录名称!n); else if (flag = -5)

25、 printf(Error: n 磁盘空间已满!n); else if (flag = 0) printf(创建子目录成功! n); show(); break; case 8:/删除子目录 scanf(%s, name); flag = rmdir(name); if (flag = -1) printf(Error:n 子目录不存在! n); else if (flag = -2) printf(Error:n子目录中含有子目录,请删除子目录中的子目录!n); else if (flag = -3) printf(Error:n 删除的不是子目录 ! n); else if (flag = 0) printf(删除子目录成功! n); show(); break; case 9:/显示当前子目录 dir(); show(); break; case 10:/更改当前目录 scanf(%s, name); flag = cd(name); if (flag = -1) printf(Error:n 路径不正确!n); else if (flag = -2) printf(Error:n打开的不是子目

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1