




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学生课程设计报告实验课名称:操作系统实验项目名称:文件系统设计专业名称:计算机科学与技术班级:-学号:-学生姓名:-教师姓名:- 2014 年 6 月 30 日一、课程设计的目的二、课程设计的内容及要求内容要求三、实现原理四、关键算法实现流程图流程图关键算法五、软件运行环境及限制 六结果输出及分析七心得体会1 课程设计的目的本课程设计是学习完计算机操作系统课程后,进行的一次全面的综合训练,通过课程设计,让我更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强了我的动手能力。二课程设计的内容及要求1 实验内容通过一个简单的二级文件系统设计,加深对文件系统的内部功能以及
2、内部实现的理解。要求模拟采用二级目录结构的磁盘文件系统的文件操作,能实现以下几条命令,用输入命令来模拟用户程序中调用的文件操作:Login 用户登录Dir 列文件目录(列出文件名、物理地址、保护码和文件长度)Create 创建文件Delete 删除文件Open 打开文件Close 关闭文件Read 读文件Write 写文件源文件可以进行读写保护2实验要求文件系统管理中用到的数据结构有:首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2并以编号作为物理地
3、址,在目录中进行登记。三实现原理 首先,实现Login用户登录,(用户名:lhx密码:12358)必须登录成功才能进入文件系统进行查看,进入后,通过树状展示文件目录(默认文件目录是homelhxkefile),利用命令行的方式进行注册、登录、各种各样的文件操作。四关键算法实现流程图流程图:关键算法:1.用户登录功能的实现typedef struct userMsgchar loginName20;char loginPasswd20;UserMsg;int login(char* name,char* passwd)UserMsg um;int count = 0,size = sizeof(
4、UserMsg),nres,pres;int fd = 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)return 1;if( nres = 0 && pres !=
5、 0)return 0;count+;lseek(fd,SEEK_SET,size*count);lseek(fd,SEEK_SET,0);close(fd);2. 用户注册具体实现int regist(char* name,char* passwd)UserMsg um;int count = 0,size = sizeof(UserMsg);int fd = open("/home/lhx/study/kefile/login.dat",O_WRONLY|O_APPEND);if(fd = -1)return -1;strcpy(um.loginName,name);s
6、trcpy(um.loginPasswd,passwd);lseek(fd,SEEK_END,0);count = write(fd,&um,size);if(count != size)return -1;return 1;3. 查看目录下文件int listdtl(char* pname)struct dirent* dlist;int tmp,count;char fpath50,*fname;count = scandir(pname,&dlist,NULL,alphasort);if(count = -1)return -1;printf("%10st%10
7、st%10st%10st%10sn","编号","类型","所有者ID","大小","文件名");for(tmp = 0;tmp < count;tmp+)struct stat st;sprintf(fpath,"%s/%s",pname,dlisttmp->d_name);stat(fpath,&st);switch(dlisttmp->d_type)case DT_DIR:fname = "目录"break;cas
8、e DT_LNK:fname = "软链接"break;case DT_BLK:fname = "块设备"break;case DT_REG:fname = "普通文件"break;default:fname = "其他类型"break;printf("%10lut%10st%10ut%10lut%10sn",st.st_ino,fname,st.st_uid,st.st_size,dlisttmp->d_name);return 0;4. 文件创建、目录创建、目录删除、文件删除等实现if
9、(strcmp(resbuf,"create")=0)int mode = atoi(pbuf);if(mode = 0)printf("无法识别的文件权限n");continue;filedesc = creat(ubuf,tentoe(mode);if(filedesc = -1)printf("创建失败,该文件已存在n");elseprintf("创建成功n");close(filedesc);else if(strcmp(resbuf,"type") = 0)filedesc = ope
10、n(ubuf,O_RDONLY);if(filedesc = -1)printf("该文件不存在!n");elsechar buf1025;int count;printf("'%s'文件的内容:n",ubuf);while(1)count = read(filedesc,buf,1024);if(count = 0)break;bufcount = 0;printf("%s",buf);else if(strcmp(resbuf,"delete") = 0)filedesc = unlink(ub
11、uf);if(filedesc != 0)printf("删除失败,文件可能不存在n");elseprintf("删除文件'%s'成功n",ubuf);else if(strcmp(resbuf,"mkdir") = 0)filedesc = mkdir(ubuf,0751);if(filedesc != 0)printf("创建目录失败,目录可能已经存在了n");elseprintf("创建目录'%s'成功n",ubuf);else if(strcmp(resb
12、uf,"rmdir") = 0)filedesc = rmdir(ubuf);if(filedesc != 0)printf("删除目录失败,目录可能不存在或者目录非空n");elseprintf("删除目录'%s'成功n",ubuf);else if(strcmp(resbuf,"cd") = 0)char dpath50;sprintf(dpath,"%s%s",upath,ubuf);strcpy(upath,dpath);filedesc = chdir(dpath);i
13、f(filedesc != 0)printf("更改工作目录失败!n");elseprintf("当前工作目录:%sn",dpath);else if(strcmp(resbuf,"dir") = 0)if(strcmp(ubuf,"-nl") = 0)DIR* dir;struct dirent* drt;dir = opendir(upath);while(1)drt = readdir(dir);if(drt = NULL)break;printf("%st",drt->d_name
14、);printf("n");closedir(dir);else if(strcmp(ubuf,"-l") = 0)listdtl(upath);elseprintf("不能识别的选项'%s'!n",ubuf);continue;elseprintf("未能识别的命令,请核对!n");5 软件运行环境及限制1.运行环境运行环境:linux使用语言:c语言编程工具:Kate2. 具体演示2.1注册新用户 lxc密码12358 2.2 登录文件系统 lxc 密码123582.3 创建文件1.c并查看当前
15、目录下的文件信息2.4创建新目录 dirc2.5 删除目录 dirc2.6 查看文件1.c的内容2.7删除文件 1.c七心得体会操作系统课程设计,自己通过查找资料、复习课本、编程调试,写实验报告等环节,进一步掌握了以前学到的知识,并且还对操作系统应用有了更深入的认识与掌握。比如对树的展示有了很好的学习,对二级文件系统也有了很好的了解,如何解决实现里面功能的各种问题。通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。附件(代码)mfun.h#ifndef _
16、MFUN_H_#define _MFUN_H_#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <fcntl.h>#include <string.h>#include <dirent.h>typedef struct userMsgchar loginName20;char loginPasswd20;UserMsg;int login(char* name,char* passwd)UserMsg um;int count = 0,size
17、 = sizeof(UserMsg),nres,pres;int fd = 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)return 1;if( nres = 0 &&am
18、p; pres != 0)return 0;count+;lseek(fd,SEEK_SET,size*count);lseek(fd,SEEK_SET,0);close(fd);int regist(char* name,char* passwd)UserMsg um;int count = 0,size = sizeof(UserMsg);int fd = open("/home/lhx/study/kefile/login.dat",O_WRONLY|O_APPEND);if(fd = -1)return -1;strcpy(um.loginName,name);st
19、rcpy(um.loginPasswd,passwd);lseek(fd,SEEK_END,0);count = write(fd,&um,size);if(count != size)return -1;return 1;int tentoe(int num)int res;if(num > 999 | num <0)return -1;res = 64*num/100 + 8*(num/10%10) +num%10;return res;int listdtl(char* pname)struct dirent* dlist;int tmp,count;char fpa
20、th50,*fname;count = scandir(pname,&dlist,NULL,alphasort);if(count = -1)return -1;printf("%10st%10st%10st%10st%10sn","编号","类型","所有者ID","大小","文件名");for(tmp = 0;tmp < count;tmp+)struct stat st;sprintf(fpath,"%s/%s",pname,dlist
21、tmp->d_name);stat(fpath,&st);switch(dlisttmp->d_type)case DT_DIR:fname = "目录"break;case DT_LNK:fname = "软链接"break;case DT_BLK:fname = "块设备"break;case DT_REG:fname = "普通文件"break;default:fname = "其他类型"break;printf("%10lut%10st%10ut%10lut
22、%10sn",st.st_ino,fname,st.st_uid,st.st_size,dlisttmp->d_name);return 0;#endiffile.c#include "mfun.h"#include <errno.h>int isLogin;int main()char resbuf20,ubuf20,pbuf20,upath50;printf("-文件系统演示课设-n");while(!isLogin)printf("操作说明:n");printf("1:登陆 格式: logi
23、n username passwordn");printf("2:注册 格式: regist username passwordn");printf("请输入命令:");scanf("%s %s %s",resbuf,ubuf,pbuf);if(strcmp(resbuf,"login") = 0)int lres = login(ubuf,pbuf);if(lres = -1)printf("用户'%s'不存在,请核对信息或注册n",ubuf);continue;el
24、se if(lres = 0)printf("密码与'%s'不匹配,请核对n",ubuf);continue;elseprintf("登陆成功n");isLogin = 1;sprintf(upath,"/home/lhx/study/kefile/%s/",ubuf);lres = chdir(ubuf);if(lres!=0)printf("进入目录失败n");printf("Error:%sn",strerror(errno);elseprintf("当前工作目录
25、:%sn",upath);system("clear");else if(strcmp(resbuf,"regist") = 0)int rres = regist(ubuf,pbuf);if(rres = -1)printf("注册失败,请重试n");elseprintf("注册成功,赶快登陆系统演示吧n");mkdir(ubuf,0741);elseprintf("您输入的命令无法识别,请重试n");printf("-文件操作演示-n");while(1)int
26、 filedesc;printf("-n");printf("创建文件:create filename mode(eg:666)n");printf("查看文件内容:type filename -nn");printf("删除文件:delete filename -nn");printf("创建目录:mkdir dirname -nn");printf("删除目录:rmdir dirname -nn");printf("察看当前目录下的文件:dir option(-
27、l:detail,-nl) -nn");printf("进入目录:cd dirname -nn");printf("请输入操作命令:");scanf("%s %s %s",resbuf,ubuf,pbuf);if(strcmp(resbuf,"create")=0)int mode = atoi(pbuf);if(mode = 0)printf("无法识别的文件权限n");continue;filedesc = creat(ubuf,tentoe(mode);if(filedesc =
28、 -1)printf("创建失败,该文件已存在n");elseprintf("创建成功n");close(filedesc);else if(strcmp(resbuf,"type") = 0)filedesc = open(ubuf,O_RDONLY);if(filedesc = -1)printf("该文件不存在!n");elsechar buf1025;int count;printf("'%s'文件的内容:n",ubuf);while(1)count = read(filedesc,buf,1024);if(count = 0)break;bufcount = 0;printf("%s",buf);else if(strcmp(resbuf,"delete") = 0)filedesc = unlink(ubuf);if(filedesc != 0)printf("删除失败,文件可能不存在n");elseprintf("删除文件'%s'成功n",ubuf);else if(strcmp(resbuf,"mkdi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 抖音商户直播投流ROI评估与优化制度
- 全球生物制药行业2025年创新药研发管线与靶点深度报告
- 八大物流企业绿色物流实践与行业规范制定报告
- 黑龙江中医药大学《药用植物学实验》2023-2024学年第一学期期末试卷
- 公众参与机制在2025年环境影响评价中的实践与反思报告
- 2025届江苏省无锡市青阳初级中学七年级数学第一学期期末监测试题含解析
- 安庆医药高等专科学校《医学微生物与临床微生物检验学》2023-2024学年第一学期期末试卷
- 内蒙古自治区赤峰市翁牛特旗乌敦套海中学2024年九年级化学第一学期期末复习检测试题含解析
- 2024-2025学年天津市河西区新华圣功学校九上化学期末复习检测试题含解析
- 黑龙江幼儿师范高等专科学校《中国文化通论》2023-2024学年第一学期期末试卷
- 公司员工公积金管理制度
- 门窗店员工管理制度
- 护士职业精神课件
- 护理领域的职业发展与前景展望
- 2025年天津高考数学试卷试题真题及答案详解(精校打印)
- 美团外卖员工合同范本
- GB 45671-2025建筑防水涂料安全技术规范
- 2025上海济光职业技术学院辅导员考试试题及答案
- 2024年江苏三支一扶真题
- 主、被动防护网施工方案-图文
- 2025届广东省东莞市东华中学八年级数学第二学期期末检测试题含解析
评论
0/150
提交评论