多级目录管理及Linux代码分析 操作系统课程设计报告.doc

上传人:仙人指路1688 文档编号:2388216 上传时间:2023-02-17 格式:DOC 页数:37 大小:211.50KB
返回 下载 相关 举报
多级目录管理及Linux代码分析 操作系统课程设计报告.doc_第1页
第1页 / 共37页
多级目录管理及Linux代码分析 操作系统课程设计报告.doc_第2页
第2页 / 共37页
多级目录管理及Linux代码分析 操作系统课程设计报告.doc_第3页
第3页 / 共37页
多级目录管理及Linux代码分析 操作系统课程设计报告.doc_第4页
第4页 / 共37页
多级目录管理及Linux代码分析 操作系统课程设计报告.doc_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《多级目录管理及Linux代码分析 操作系统课程设计报告.doc》由会员分享,可在线阅读,更多相关《多级目录管理及Linux代码分析 操作系统课程设计报告.doc(37页珍藏版)》请在三一办公上搜索。

1、哈尔滨理工大学课程设计(计算机操作系统)题目: 多级目录管理及Linux代码分析 班级: 姓名: 指导教师: 系主任: 2014年03月01日目 录1多级目录管理课程设计11.1 题目分析11.2 数据结构11.3 流程图11.4 实现技术21.5 设计结论和心得22 Linux代码分析32.1时钟和定时器中断42.2TVECS结构及其实现42.3间隔定时器itimer42.4函数调用关系图4第1章1多级目录管理课程设计1.1 题目分析在现代计算机系统中,都要存储大量的文件,为了能对这些文件实施有效的管理,必须对他们加以妥善组织,这主要是通过文件目录来实现的。对于大型文件系统,通常采用三级或三

2、级以上的目录结构,以提高对目录的检索速度和文件系统的性能。多级文件目录又成为树型目录结构,主目录在这里被成为根目录,把数据文件成为树叶,其他的目录均作为树的结点。本课程设计要求设计一个基于多级文件目录的文件管理系统。通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。主要要求有:1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多级文件目录的文件管理系统;2.文件物理结构可采用显式链接或其他方法;3.文件目录结构采用多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护;4.设计

3、一个较实用的用户界面,方便用户使用。1.2 数据结构1).文件夹数据结构体:typedef struct MFD /主文件目录 char username100; char password100; FILE *fp; /文件目录指针MFD;2).用户文件数据结构体:typedef struct UFD /用户文件目录 char filename256; char protect; /保护码 int length; /文件长度UFD;3).功能实现命令数据结构体:typedef struct COMM /命令串char string256; /用户命令串 struct COMM *next;

4、/后继指针:指向命令各参数所在的结点COMM;MFD mainfdN; /主文件目录数组UFD userfdM; /用户文件目录数组OFD openfdL; /打开文件目录数组COMM *command; /命令串指针int next;DISK;1.3 流程图开始输入用户判断是否存在YESNO删除文件创建子目录改变子目录列出子目录关闭文件打开文件创建文件读文件写文件是否退出结束NOYES 图1程序流程图1.4 实现技术1.运行后主界面显示图2主界面2.输入login命令 用户登陆,当用户账号不存在时,即可创建:图3创建用户3.创建用户下文件功能实现:图4创建用户4.打开文件open命令功能的实

5、现图5打开文件5.读文件read命令功能实现图6.读文件6. 写文件write命令功能实现,及对内容中添加实现图7写文件8.退出文件logout操作图8退出文件1.5 设计结论和心得这次操作系统课程设计,在编写过程中,遇到很多难题,特别是在操作系统实验中不曾注意到的问题,也有许多新的问题,在实际反复调试运行中,不断加深了对操作系统的理解,也很大地程度上提高了编程的能力,由于对重要概念的把握程度还不够深入,在实际理解编写时遇到很多不该发生的问题。不过,都很好的解决并牢牢地掌握住了。通过做多级目录文件系统,我知道了多级目录文件系统的工作原理,在打开文件时系统是如何进行操作的,并加深了理解。希望在以

6、后的学习中,继续保持这份昂扬的斗志,继续努力学习计算机方面的知识,永不懈怠。通过这次课程设计,不仅让我了解了多级目录文件系统,更重要的还让我学会了、或者说是验证了“做事一定要有次序和对事物的总体把握”这句话。开始我一味的进行调试,急切的想侥幸调试出来,但由于没有进行深入的考虑,我调试了很久都没没有成功,我仔细的分析题目,分析材料,在原由的基础上我进行了改正,我最后还是调试成功了,虽然还是经过了一翻努力,当然汗水还是留的很值,这次操作系统实习,不仅让我对操作系统这门课程有了更深入的研究、对很多重要的概念有了巩固和掌握,还给了我今后做事的启示。做事要塌实,不能想着一步登天,要有计划,有目的的进行做

7、事。盲目真的不应该再在我们新一代的大学生身上出现了,我们应该认真找到自己的缺点并且及时改正。在这里,我如果不说感谢的话,不知道要说些什么好;首先感谢学校和父母,然后更重要的是感谢老师的教导。“活到老,学到老”,这也是我整个学习过程中的一次经验、一次总结,我相信它肯定会给我今后的学习有所启示和指导作用。附录:源程序代码:#include #include /里面有clrscr()清屏函数 #include #include #include /内存分配函数#include #include #define N 30 /用户数#define M 20 /一个用户可保存M个文件#define L 5

8、 /用户只能一次打开L个文件typedef struct MFD /主文件目录char username100; char password100; FILE *fp; /文件目录指针MFD;typedef struct UFD /用户文件目录char filename256; char protect; /保护码 int length; /文件长度UFD;typedef struct OFD /打开文件目录char filename256; char opencode; /打开保护码 int *fp; /读写指针OFD;typedef struct COMM /命令串char string2

9、56; /用户命令串 struct COMM *next; /后继指针:指向命令各参数所在的结点COMM;MFD mainfdN; /主文件目录数组UFD userfdM; /用户文件目录数组OFD openfdL; /打开文件目录数组COMM *command; /命令串指针char username100;int usernum,savenum,opennum;int workfile;void init(); /初始化主文件目录数组void init_ufd(char *username); /初始化用户文件目录void mesg(char *str); /输出函数char *getus

10、er(); /设置用户函数声明char *getpass(); /设置口令函数声明COMM *readcommand(); /读命令串函数声明void login(); /用户登录void setpass(); /设置口令void create(); /创建用户文件void mydelete(); /删除void myread(); /读void myopen(); /打开void myclose(); /关闭void mywrite(); /写void help(); /帮助void main() init();printf(ntt );printf(ntt 多级文件目录的文件管理系统 );

11、printf(ntt );printf(ntt选择命令: );printf(ntt login setpass create );printf(ntt open read write delete);printf(ntt help exit copy rename);printf(ntt首次使用请输入help命令请求帮助 );printf(ntt使用中欢迎以help 请求帮助 ); while(1) readcommand(); if(strcmp(command-string,create)=0)create();else if(strcmp(command-string,delete)=0

12、)mydelete(); else if(strcmp(command-string,open)=0) myopen(); else if(strcmp(command-string,close)=0) myclose(); else if(strcmp(command-string,read)=0) myread(); else if(strcmp(command-string,write)=0) mywrite(); else if(strcmp(command-string,login)=0) login(); else if(strcmp(command-string,setpass)

13、=0) setpass(); else if(strcmp(command-string,help)=0) help(); else if(strcmp(command-string,exit)=0)break; else mesg(Bad command!);void mesg(char *str) printf(n %sn,str);void init() /初始化主文件目录数组 FILE *fp; /文件指针 char tempname20,temppass20; usernum=0; /全局变量初始化 savenum=0; opennum=0; strcpy(username,); /

14、用户使用时,建立一个mainfile.txt文件,包括每个用户的用户名和口令 /然后,才能运行此程序 if(fp=fopen(mainfile.txt,r)!=NULL)/以读方式打开文件mainfile.txt while(!feof(fp)/若不是文件尾 strcpy(tempname,); /清空数组操作 fgets(tempname,20,fp); /读用户名 if(strcmp(tempname,)!=0) fgets(temppass,20,fp); tempnamestrlen(tempname)-1=0; /设置串结束符 temppassstrlen(temppass)-1=0

15、; strcpy(mainfdusernum.username,tempname); /生成mainfd数组 strcpy(mainfdusernum.password,temppass); /生成userfd数组 usernum+; /生成usernum的值 if(usernum=N)break; fclose(fp); void init_ufd(char *username) /初始化用户文件目录FILE *fp; char tempfile100,tempprot; int templength; savenum=0; opennum=0; workfile=-1; if(fp=fop

16、en(username,r+)!=NULL)while(!feof(fp) strcpy(tempfile,); fgets(tempfile,50,fp); if(strcmp(tempfile,)!=0) fscanf(fp,%c,&tempprot); fscanf(fp,%d,&templength); tempfilestrlen(tempfile)-1=0; strcpy(userfdsavenum.filename,tempfile); /文件名 userfdsavenum.protect=tempprot; /保护码 userfdsavenum.length=templengt

17、h; /文件长度 savenum+; fgets(tempfile,50,fp); char *getuser() /设置用户函数声明char username20; char temp; int i; username0=0; for(i=0;i20;)while(!kbhit(); /按用户名规则输入用户名 temp=getch(); if(isalnum(temp)|temp=_|temp=(char)13) usernamei=temp; if(usernamei=(char)13) usernamei=0; break; putchar(temp); i+; usernamei=0;

18、 return username;char *getpass() /设置口令函数声明char password20; char temp; int i; password0=0; for(i=0;i); gets(line); /输入一个命令串 for(i=0;i0) /对命令行中的子串进行处理tempend=0; newp=(COMM*)malloc(sizeof(COMM*); strcpy(newp-string,temp); newp-next=NULL; if(command=NULL) command=newp; /把各子串链成一个链表 else p=command; while(

19、p-next!=NULL) p=p-next; p-next=newp; p=command; return command;void login() /用户注册FILE *fp; int i; char password20,confirm20,tempname20; if(command-next=NULL)printf(n User Name:); strcpy(tempname,getuser(); /输入用户名并且返回之 else if(command-next-next!=NULL)mesg(Too many parameters!);return; else strcpy(tem

20、pname,command-next-string); for(i=0;i=usernum) /新用户printf(n 新用户账号,输入你的密码两次!); printf(n 密码:); strcpy(password,getpass(); /输入口令并且返回之printf(n 密码:); strcpy(confirm,getpass(); /第二次输入口令 if(strcmp(password,confirm)=0) /两次输入的口令是否相同的处理情况if(usernum=N) /用户数不能超过Nmesg(创建新账号错误!用户账号字符超过限制.n 登陆失败!); elsestrcpy(main

21、fdusernum.username,tempname); /把新用户和口令填入mainfd中 strcpy(mainfdusernum.password,password); usernum+; strcpy(username,tempname); mesg(创建新用户!n 登陆成功恭喜!); init_ufd(username); /初始化用户文件目录 fp=fopen(mainfile.txt,w+); /把新用户填入mainfile.txt文件中 for(i=0;iusernum;i+)fputs(mainfdi.username,fp); fputs(n,fp); fputs(mai

22、nfdi.password,fp); fputs(n,fp); fclose(fp); else /两次输入的口令是否相同的处理情况mesg(创建新用户失败!两次输入密码不一致!); mesg(登陆失败!); else /注册过的用户登陆printf(n 密码:); strcpy(password,getpass(); if(strcmp(mainfdi.password,password)!=0)mesg(登陆失败!输入密码错误!); elsemesg(登陆成功恭喜你!); strcpy(username,tempname); init_ufd(username);void setpass(

23、) /重新设置口令int i; FILE *fp; char oldpass20,newpass20,confirm20; if(strcmp(username,)=0) mesg(No user login!); elseprintf(n 旧密码:); strcpy(oldpass,getpass(); for(i=0;iusernum;i+)if(strcmp(mainfdi.username,username)=0) break; if(strcmp(mainfdi.password,oldpass)!=0)mesg(旧密码错误!); elseprintf(n 新密码:); strcpy

24、(newpass,getpass(); printf(n 确认密码:); strcpy(confirm,getpass(); if(strcmp(newpass,confirm)!=0)mesg(密码修改错误! 确认密码错误.请重新输入);elsestrcpy(mainfdi.password,newpass); mesg(Password changed!); fp=fopen(mainfile.txt,w+); for(i=0;inext=NULL) mesg(Too few parameters!);else /存在2个或3个参数的处理strcpy(tempfile,);tempcode

25、=r; if(strcmp(command-next-string,/r)=0)tempcode=r;type=1;else if(strcmp(command-next-string,/w)=0)tempcode=w;type=1; else if(strcmp(command-next-string,/d)=0)tempcode=d; type=1; else if(command-next-string0=/) mesg(Error! /r /w /d request!); else if(command-next-next!=NULL) mesg(Too many parameters

26、!);else strcpy(tempfile,command-next-string);if(type=1) /三个参数的情况补充if(command-next-next!=NULL)if(command-next-next-next!=NULL)mesg(Too many parameters!);else strcpy(tempfile,command-next-next-string);else mesg(Too few parameters!);if(strcmp(tempfile,)!=0)for(i=0;i=savenum) mesg(File not existed!);els

27、e /文件存在的情况for(i=0;iopennum;i+)if(strcmp(tempfile,openfdi.filename)=0)break;if(i=L) /打开的文件已经占满了5个名额mesg(Error! cannot open file! nimber of opened files limited!);else /打开处理strcpy(openfdopennum.filename,tempfile);openfdopennum.opencode=tempcode;workfile=opennum;opennum+;mesg(File open success!); void

28、myclose() /关闭文件int i,j;char tempfile100;if(strcmp(username,)=0) mesg(No user login!); elseif(command-next=NULL) mesg(Too few parameters!); else if(command-next-next!=NULL) mesg(Too many parameters!); elsestrcpy(tempfile,command-next-string);for(i=0;i=savenum) /文件不存在mesg(文件不存在!);else for(j=0;j=opennum) /文件存在了但是没有打开mesg(文件存在了但是没有打开!); else /文件存在并且打开strcpy(openfdj.filename,); openfdj.opencode= ; opennum-; mesg(文件关闭成功!);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号