基于Linux的模拟文件系统的设计与实现64520_第1页
基于Linux的模拟文件系统的设计与实现64520_第2页
基于Linux的模拟文件系统的设计与实现64520_第3页
基于Linux的模拟文件系统的设计与实现64520_第4页
基于Linux的模拟文件系统的设计与实现64520_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中北大学操作系统课程设计说明书 学院、系:软件学院专业:软件工程学 生 姓 名:申云如学 号:1121011914设 计 题 目:基于Linux的模拟文件系统的设计与实现起迄日期:2013年11月22日- 2013年12月6日指导教师:李玉蓉   2013 年 12月 6 日1 需求分析本次是基于Linux的模拟文件系统的设计与实现,其设计内容如下:1、设计一个10个用户的文件系统。每个用户最多可以保存10个文件,一次运行用户可打开多个文件。2、程序采用二级文件目录。(即设置主目录(MFD)和用户文件目录(UFD)。另外,可打开文件设置指针。3、为了方便

2、实现,对文件的读写作了简化。在执行读写命令时,只需改读写指针。并不进行实际的读写操作。4、实现的基本功能主要包括:改变目录(CD),创建目录(MD),显示目录(DIR),删除目录(RD),打开全部文件(openall),打开单个文件(open),建立一个文件(create),删除一个文件(delete),写文件(write),读文件(read),改文件的保护码(change),退出(exit)等。要求:考虑特殊情况如:各个命令对全路径和相对路径的支持、目录不存在时,给出错误信息、不能用cd进入文件、命令之中不能有空格(如 ex it,给出错误提示)、相对路径的解析、路径中的空格剔除、新建目录或

3、文件时的问题、重名问题、目录或文件的名字长度限制、目录或文件的名字中包含不合法字符(注意空格)、删除目录或文件时的问题、删除不存在的文件或目录给出错误提示、删除目录时目录不为空(如果该目录为空,则可删除,否则给出是否做删除提示,删除操作将该目录下的全部文件和子目录都删除)、进入到某个目录下,却要删除本目录或上级目录、不能用delete删除目录、不能用RD删除文件等都要考虑在内。用户验证和操作算法思想:用结构体struct user来对用户信息进行存储,利用userHead链表对用户进行检索和查找在线用户,以便更好的实现用户登录的验证。目录操作算法思想:首先用结构体struct ldir存储目录

4、信息,利用数组对目录名以及目录创建时间进行存储,在每次创建目录时,检索目录链表,进行添加链表;改变目录,调用cd()来实现对目录的改变,删除文件时,依次检索链表来实现对链表的删除,并实施操作删除文件系统的目录;添加目录时,用添加链表的函数进行添加,并实施操作添加文件系统的目录。文件操作算法思想:首先用结构体struct fifle存储文件信息,利用数组对文件名,文件创建者,文件权限,文件创建时间,在每次创建文件时,检索文件链表,进行添加链表,并实施操作添加文件系统的目录;删除文件时,依次检索链表来实现对链表的删除,并实施操作删除文件系统的文件;改变文件权限时,查找文件链表并返回文件的基本信息,

5、开始对文件的权限修改。 2 总体设计本程序共分为11个功能,在小组任务分配中共分为四个部分:文件系统的整体设计接口和用户验证、目录和文件链表的操作和接口实现、目录操作功能的实现以及文件操作功能的实现。主函数首先对用户进行验证,然后调用11个函数,来实现对文件系统各功能的实现,各函数为: cd();md();dir();rd();open();creat();delet();writ(); chmode();help();exit(1);主函数主要是先对用户链表进行初始化,然后进行用户验证以及登录,并选择命令对文件进行操作。整体流程图如下图2-1所示:图2-13.详细设计/添加目录列表void

6、adddir(char dirname,char creattime) struct ldir *p,*q; q=(struct ldir *)malloc(sizeof(struct ldir); 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-&

7、gt;next=NULL; /创建目录void md() time_t ptime; time(&ptime); char dirname20; int stat=0; /判断目录是否创建成功 printf("请输入创建的目录名:n"); scanf("%s",dirname); stat=mkdir(dirname); /创建目录 if(!stat) printf("目录创建成功!n") ; adddir(dirname,ctime(&ptime); else printf("目录创建失败!n")

8、; /改变目录void cd() char curdir30; /当前目录 char dirname10; /改变目录 printf("当前路径为:n"); strcpy(curdir,getcwd(NULL,0); printf("%sn",curdir); printf("请输入改变的目录n"); scanf("%s",dirname); chdir(dirname); /改变目录 strcat(curdir,"/"); strcat(curdir,dirname); printf(&quo

9、t;改变后的目录为:n"); printf("%sn",curdir);/删除目录int deletdir(char dirname) struct ldir *p,*q; p=dirHead; if(p=NULL) /检验链表是否为空 return 0; while(p!=NULL&&strcmp(p->dirname,dirname) q=p; p=p->next; /保存上一指针 if(p=dirHead) /寻找目录名是头指针 dirHead=dirHead->next; else q->next=p->nex

10、t; free(p); /释放占用内存 return 1;/删除目录void rd() char dirname20; printf("请输入要删除的目录名:n"); scanf("%s",dirname); if(deletdir(dirname) printf("目录删除成功!n"); rmdir(dirname); /删除目录 else printf("目录删除失败!n"); /显示目录void dir() struct ldir *p; p=dirHead; while(p!=NULL) printf(&q

11、uot;%st%sn",p->creattime,p->dirname); p=p->next; 登陆如图:创建目录,显示目录如图:删除目录如图:改变目录如图:4.心得体会经过近两个星期的实验,这次的课程设计终于完成了。本次课程设计是基于Linux的模拟文件系统的设计与实现,本次课程设计是我们第一次运用linux编程,中间遇到了很多困难,在这次实验中,我们充分理解并运用了linux下的文件和目录的操作,理解了c语言的文件操作和目录操作,并且重新复习,理解了C语言,内存的开辟以及链表的使用方式。学习并熟悉了linux操作系统的使用,使用了linux下的C语言的编译环境gc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论