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

亲,该文档总共98页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

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

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

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

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

基于Linux的模拟文件系统的设计与实现【实用文档】doc文档可直接使用可编辑,欢迎下载中北大学操作系统课程设计说明书学院、系:软件学院专业:软件工程学生姓名:申云如学号: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-13.详细设计//添加目录列表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”);adddir(dirname,ctime(&ptime));}else{prin