操作系统课程设计-linux下的二级文件系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

学生课程设计报告实验课名称:操作系统实验项目名称:文件系统设计专业名称:计算机科学与技术班级:-----------学号:-----------学生姓名:-----------教师姓名:-----------2014年6月30日一、课程设计的目的..........................二、课程设计的内容及要求...................内容..........................................要求..........................................三、实现原理.................................四、关键算法实现流程图.....................流程图........................................关键算法......................................五、软件运行环境及限制.....................六.结果输出及分析..........................七.心得体会.................................一.课程设计的目的本课程设计是学习完《计算机操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让我更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强了我的动手能力。二.课程设计的内容及要求1.实验内容通过一个简单的二级文件系统设计,加深对文件系统的内部功能以及内部实现的理解。要求模拟采用二级目录结构的磁盘文件系统的文件操作,能实现以下几条命令,用输入命令来模拟用户程序中调用的文件操作:Login用户登录Dir列文件目录(列出文件名、物理地址、保护码和文件长度)Create创建文件Delete删除文件Open打开文件Close关闭文件Read读文件Write写文件源文件可以进行读写保护2.实验要求文件系统管理中用到的数据结构有:①首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。②用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2…并以编号作为物理地址,在目录中进行登记。三.实现原理首先,实现Login用户登录,(用户名:lhx密码:12358)必须登录成功才能进入文件系统进行查看,进入后,通过树状展示文件目录(默认文件目录是\home\lhx\kefile),利用命令行的方式进行注册、登录、各种各样的文件操作。四.关键算法实现流程图流程图:关键算法:1.用户登录功能的实现typedefstructuserMsg{charloginName[20];charloginPasswd[20];}UserMsg;intlogin(char*name,char*passwd){开始登录验证是否成功?新建目录删除目录右键进行选择操作属性打开文件结束是否新建文件UserMsgum;intcount=0,size=sizeof(UserMsg),nres,pres;intfd=open(/home/lhx/study/kefile/login.dat,O_RDONLY);if(fd==-1){return-1;}while(1){if(read(fd,&um,size)size){return-1;}nres=strcmp(name,um.loginName);pres=strcmp(passwd,um.loginPasswd);if(nres==0&&pres==0){return1;}if(nres==0&&pres!=0){return0;}count++;lseek(fd,SEEK_SET,size*count);}lseek(fd,SEEK_SET,0);close(fd);}2.用户注册具体实现intregist(char*name,char*passwd){UserMsgum;intcount=0,size=sizeof(UserMsg);intfd=open(/home/lhx/study/kefile/login.dat,O_WRONLY|O_APPEND);if(fd==-1){return-1;}strcpy(um.loginName,name);strcpy(um.loginPasswd,passwd);lseek(fd,SEEK_END,0);count=write(fd,&um,size);if(count!=size){return-1;}return1;}3.查看目录下文件intlistdtl(char*pname){structdirent**dlist;inttmp,count;charfpath[50],*fname;count=scandir(pname,&dlist,NULL,alphasort);if(count==-1)return-1;printf(%10s\t%10s\t%10s\t%10s\t%10s\n,编号,类型,所有者ID,大小,文件名);for(tmp=0;tmpcount;tmp++){structstatst;sprintf(fpath,%s/%s,pname,dlist[tmp]-d_name);stat(fpath,&st);switch(dlist[tmp]-d_type){caseDT_DIR:fname=目录;break;caseDT_LNK:fname=软链接;break;caseDT_BLK:fname=块设备;break;caseDT_REG:fname=普通文件;break;default:fname=其他类型;break;}printf(%10lu\t%10s\t%10u\t%10lu\t%10s\n,st.st_ino,fname,st.st_uid,st.st_size,dlist[tmp]-d_name);}return0;}4.文件创建、目录创建、目录删除、文件删除等实现if(strcmp(resbuf,create)==0){intmode=atoi(pbuf);if(mode==0){printf(无法识别的文件权限\n);continue;}filedesc=creat(ubuf,tentoe(mode));if(filedesc==-1){printf(创建失败,该文件已存在\n);}else{printf(创建成功\n);}close(filedesc);}elseif(strcmp(resbuf,type)==0){filedesc=open(ubuf,O_RDONLY);if(filedesc==-1){printf(该文件不存在!\n);}else{charbuf[1025];intcount;printf('%s'文件的内容:\n,ubuf);while(1){count=read(filedesc,buf,1024);if(count==0){break;}buf[count]=0;printf(%s,buf);}}}elseif(strcmp(resbuf,delete)==0){filedesc=unlink(ubuf);if(filedesc!=0){printf(删除失败,文件可能不存在\n);}else{printf(删除文件'%s'成功\n,ubuf);}}elseif(strcmp(resbuf,mkdir)==0){filedesc=mkdir(ubuf,0751);if(filedesc!=0){printf(创建目录失败,目录可能已经存在了\n);}else{printf(创建目录'%s'成功\n,ubuf);}}elseif(strcmp(resbuf,rmdir)==0){filedesc=rmdir(ubuf);if(filedesc!=0){printf(删除目录失败,目录可能不存在或者目录非空\n);}else{printf(删除目录'%s'成功\n,ubuf);}}elseif(strcmp(resbuf,cd)==0){chardpath[50];sprintf(dpath,%s%s,upath,ubuf);strcpy(upath,dpath);filedesc=chdir(dpath);if(filedesc!=0){printf(更改工作目录失败!\n);}else{printf(当前工作目录:%s\n,dpath);}}elseif(strcmp(resbuf,dir)==0){if(strcmp(ubuf,-nl)==0){DIR*dir;structdirent*drt;dir=opendir(upath);while(1){drt=readdir(dir);if(drt==NULL){break;}printf(%s\t,drt-d_name);}printf(\n);closedir(dir);}elseif(strcmp(ubuf,-l)==0){listdtl(upath);}else{printf(不能识别的选项'%s'!\n,ubuf);continue;}}else{printf(未能识别的命令,请核对!\n);}五.软件运行环境及限制1.运行环境运行环境:linux使用语言:c语言编程工具:Kate2.具体演示2.1注册新用户lxc密码123582.2登录文件系统lxc密码123582.3创建文件1.c并查看当前目录下的文件信息2.4创建新目录dirc2.5删除目录dirc2.6查看文件1.c的内容2.7删除文件1.c七.心得体会操作系统课程设计,自己通过查找资料、复习课本、编程调试,写实验报告等环节,进一步掌握了以前学到的知识,并且还对操作系统应用有了更深入的认识与掌握。比如对树的展示有了很好的学习,对二级文件系统也有了很好的了解,如何解决实现里面功能的各种问题。通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。附件(代码)mfun.h#ifndef_MFUN_H_#define_MFUN_H_#includestdio.h#includeunistd.h#includestdlib.h#includefcntl.h#includestring.h#includedirent.htypedefstructuserMsg{charloginName[20];charloginPasswd[20];}UserMsg;intlogin(char*name,char*passwd){UserMsgum;intcount=0,size=sizeof(UserMsg),nres,pres;intfd=open(/home/lhx/study/kefile/login.dat,O_RDONLY);if(fd==-1){return-1;}while(1){if(read(fd,&um,size)size){return-1;}nres=strcmp(name,um.loginName);pres=strcmp(passwd,um.loginPasswd);if(nres==0&&pres==0){return1;}if(nres==0&&pres!=0){return0;}count++;lseek(fd,SEEK_SET,size*count);}lseek(fd,SEEK_SET,0);close(fd);}intregist(char*name,char*passwd){UserMsgum;intcount=0,size=sizeof(UserMsg);intfd=open(/home/lhx/study/kefil

1 / 19
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功