操作系统课程设计linux下的二级文件系统.docx
- 文档编号:27230389
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:23
- 大小:789.86KB
操作系统课程设计linux下的二级文件系统.docx
《操作系统课程设计linux下的二级文件系统.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计linux下的二级文件系统.docx(23页珍藏版)》请在冰豆网上搜索。
操作系统课程设计linux下的二级文件系统
操作系统课程设计-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) 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); 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语言 编程工具: Kate 2.具体演示 2.1注册新用户lxc密码12358 2.2登录文件系统lxc密码12358 2.3创建文件1.c并查看当前目录下的文件信息 2.4创建新目录dirc 2.5删除目录dirc 2.6查看文件1.c的内容 2.7删除文件1.c 七.心得体会 操作系统课程设计,自己通过查找资料、复习课本、编程调试,写实验报告等环节,进一步掌握了以前学到的知识,并且还对操作系统应用有了更深入的认识与掌握。 比如对树的展示有了很好的学习,对二级文件系统也有了很好的了解,如何解决实现里面功能的各种问题。 通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。 附件(代码) mfun.h #ifndef_MFUN_H_ #define_MFUN_H_ #include #include #include #include #include #include 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) 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/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; } inttentoe(intnum){ intres; if(num>999||num<0){ return-1; } res=64*num/100+8*(num/10%10)+num%10; returnres; } 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;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; } #endif file.c #include"mfun.h" #include intisLogin; intmain() { charresbuf[20],ubuf[20],pbuf[20],upath[50]; printf("------文件系统演示课设------\n"); while(! isLogin){ printf("操作说明: \n"); printf("1: 登陆格式: login[username][password]\n"); printf("2: 注册格式: regist[username][password]\n"); printf("请输入命令: "); scanf("%s%s%s",resbuf,ubuf,pbuf); if(strcmp(resbuf,"login")==0){ intlres=login(ubuf,pbuf); if(lres==-1){ printf("用户'%s'不存在,请核对信息或注册\n",ubuf); continue; }elseif(lres==0){ printf("密码与'%s'不匹配,请核对\n",ubuf); continue; }else{ printf("登陆成功\n"); isLogin=1; sprintf(upath,"/home/lhx/study/kefile/%s/",ubuf); lres=chdir(ubuf); if(lres! =0){ printf("进入目录失败\n"); printf("Error: %s\n",strerror(errno)); }else{ printf("当前工作目录: %s\n",upath); } system("clear"); } }elseif(strcmp(resbuf,"regist")==0){ intrres=regist(ubuf,pbuf); if(rres==-1){ printf("注册失败,请重试\n"); }else{ printf("注册成功,赶快登陆系统演示吧\n"); mkdir(ubuf,0741); } }else{ printf("您输入的命令无法识别,请重试\n"); } } printf("---------文件操作演示----------\n"); while (1){ intfiledesc; printf("--------------------------------------------------\n"); printf("创建文件: create[filename][mode](eg: 666)\n"); printf("查看文件内容: type[filename]-n\n"); printf("删除文件: delete[filename]-n\n"); printf("创建目录: mkdir[dirname]-n\n"); printf("删除目录: rmdir[dirname]-n\n"); printf("察看当前目录下的文件: dir[option](-l: detail,-nl)-n\n"); printf("进入目录: cd[dirname]-n\n"); printf("请输入操作命令: "); scanf("%s%s%s",resbuf,ubuf,pbuf); 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("不能识别的选项'%
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 linux 二级 文件系统
![提示](https://static.bdocx.com/images/bang_tan.gif)