操作系统课程设计linux下的二级文件系统.docx
《操作系统课程设计linux下的二级文件系统.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计linux下的二级文件系统.docx(21页珍藏版)》请在冰豆网上搜索。
![操作系统课程设计linux下的二级文件系统.docx](https://file1.bdocx.com/fileroot1/2022-11/17/c8a2b1c0-02be-4bfb-9551-aa9fd726ca74/c8a2b1c0-02be-4bfb-9551-aa9fd726ca741.gif)
操作系统课程设计linux下的二级文件系统
学生课程设计报告
实验课名称:
操作系统
实验项目名称:
文件系统设计
专业名称:
计算机科学与技术
班级:
-----------
学号:
-----------
学生姓名:
-----------
教师姓名:
-----------
2014年6月30日
一、课程设计的目的
二、课程设计的内容及要求
内容
要求
三、实现原理
四、关键算法实现流程图
流程图
关键算法
五、软件运行环境及限制
六.结果输出及分析
七.心得体会
1.课程设计的目的
本课程设计是学习完《计算机操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让我更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强了我的动手能力。
二.课程设计的内容及要求
1.实验内容
通过一个简单的二级文件系统设计,加深对文件系统的内部功能以及内部实现的理解。
要求模拟采用二级目录结构的磁盘文件系统的文件操作,能实现以下几条命令,用输入命令来模拟用户程序中调用的文件操作:
Login用户登录
Dir列文件目录(列出文件名、物理地址、保护码和文件长度)
Create创建文件
Delete删除文件
Open打开文件
Close关闭文件
Read读文件
Write写文件
源文件可以进行读写保护
2.实验要求
文件系统管理中用到的数据结构有:
①首先应确定文件系统的数据结构:
主目录、子目录及活动文件等。
主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。
②用户创建的文件,可以编号存储于磁盘上。
如:
…并以编号作为物理地址,在目录中进行登记。
三.实现原理
首先,实现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/ke",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);
}
2.用户注册具体实现
intregist(char*name,char*passwd){
UserMsgum;
intcount=0,size=sizeof(UserMsg);
intfd=open("/home/lhx/study/ke",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;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;
}
=creat(ubuf,tentoe(mode));
if(==-1){
printf("创建失败,该文件已存在\n");
}else{
printf("创建成功\n");
}
close();
}elseif(strcmp(resbuf,"type")==0){
=open(ubuf,O_RDONLY);
if(==-1){
printf("该文件不存在!
\n");
}else{
charbuf[1025];
intcount;
printf("'%s'文件的内容:
\n",ubuf);
while
(1){
count=read();
if(count==0){
break;
}
buf[count]=0;
printf("%s",buf);
}
}
}elseif(strcmp(resbuf,"delete")==0){
=unlink(ubuf);
if(!
=0){
printf("删除失败,文件可能不存在\n");
}else{
printf("删除文件'%s'成功\n",ubuf);
}
}elseif(strcmp(resbuf,"mkdir")==0){
=mkdir(ubuf,0751);
if(!
=0){
printf("创建目录失败,目录可能已经存在了\n");
}else{
printf("创建目录'%s'成功\n",ubuf);
}
}elseif(strcmp(resbuf,"rmdir")==0){
=rmdir(ubuf);
if(!
=0){
printf("删除目录失败,目录可能不存在或者目录非空\n");
}else{
printf("删除目录'%s'成功\n",ubuf);
}
}elseif(strcmp(resbuf,"cd")==0){
chardpath[50];
sprintf(dpath,"%s%s",upath,ubuf);
strcpy(upath,dpath);
=chdir(dpath);
if(!
=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");
}
5.软件运行环境及限制
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_