预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

中北大学 操作系统课程设计 说明书 学院、系:软件学院专业:软件工程学生姓名:申云如学号:1121011914设计题目:基于Linux的模拟文件系统的设计与实现起迄日期:2013年11月22日—2013年12月6日指导教师:李玉蓉 2013年12月6日 需求分析 本次是基于Linux的模拟文件系统的设计与实现,其设计内容如下: 1、设计一个10个用户的文件系统.每个用户最多可以保存10个文件,一次运行用户可打开多个文件。 2、程序采用二级文件目录。(即设置主目录(MFD)和用户文件目录(UFD)).另外,可打开文件设置指针. 3、为了方便实现,对文件的读写作了简化.在执行读写命令时,只需改读写指针。并不进行实际的读写操作。 4、实现的基本功能主要包括:改变目录(CD),创建目录(MD),显示目录(DIR),删除目录(RD),打开全部文件(openall),打开单个文件(open),建立一个文件(create),删除一个文件(delete),写文件(write),读文件(read),改文件的保护码(change),退出(exit)等. 要求: 考虑特殊情况如:各个命令对全路径和相对路径的支持、目录不存在时,给出错误信息、不能用cd进入文件、命令之中不能有空格(如exit,给出错误提示)、相对路径的解析、路径中的空格剔除、新建目录或文件时的问题、重名问题、目录或文件的名字长度限制、目录或文件的名字中包含不合法字符(注意空格)、删除目录或文件时的问题、删除不存在的文件或目录给出错误提示、删除目录时目录不为空(如果该目录为空,则可删除,否则给出是否做删除提示,删除操作将该目录下的全部文件和子目录都删除)、进入到某个目录下,却要删除本目录或上级目录、不能用delete删除目录、不能用RD删除文件等都要考虑在内。 用户验证和操作算法思想: 用结构体structuser来对用户信息进行存储,利用userHead链表对用户进行检索和查找在线用户,以便更好的实现用户登录的验证。 目录操作算法思想: 首先用结构体structldir存储目录信息,利用数组对目录名以及目录创建时间进行存储,在每次创建目录时,检索目录链表,进行添加链表;改变目录,调用cd()来实现对目录的改变,删除文件时,依次检索链表来实现对链表的删除,并实施操作删除文件系统的目录;添加目录时,用添加链表的函数进行添加,并实施操作添加文件系统的目录. 文件操作算法思想: 首先用结构体structfifle存储文件信息,利用数组对文件名,文件创建者,文件权限,文件创建时间,在每次创建文件时,检索文件链表,进行添加链表,并实施操作添加文件系统的目录;删除文件时,依次检索链表来实现对链表的删除,并实施操作删除文件系统的文件;改变文件权限时,查找文件链表并返回文件的基本信息,开始对文件的权限修改. 总体设计 本程序共分为11个功能,在小组任务分配中共分为四个部分:文件系统的整体设计接口和用户验证、目录和文件链表的操作和接口实现、目录操作功能的实现以及文件操作功能的实现。 主函数首先对用户进行验证,然后调用11个函数,来实现对文件系统各功能的实现,各函数为:cd();md();dir();rd();open();creat();delet();writ();chmode();help();exit(1); 主函数主要是先对用户链表进行初始化,然后进行用户验证以及登录,并选择命令对文件进行操作. 整体流程图如下图2—1所示: 图2—1 3.详细设计 //添加目录列表 voidadddir(chardirname[],charcreattime[]) { structldir*p,*q; q=(structldir*)malloc(sizeof(structldir)); strcpy(q—〉dirname,dirname); strcpy(q->creattime,creattime); p=dirHead; if(p==NULL)//判断是否是头指针userHead { dirHead=q; dirHead—>next=NULL; } else { while(p-〉next!=NULL) { p=p—〉next; } p-〉next=q; q->next=NULL; } }//创建目录 voidmd() { time_tptime; time(&ptime); chardirname[20]; intstat=0;//判断目录是否创建成功 printf("请输入创建的目录名:\n"); scanf(”%s",dirname); stat=mkdir(dirname);//创建目录 if(!stat) { printf(”目录创建成功!\n"); a