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

上传人:b****3 文档编号:3093195 上传时间:2022-11-17 格式:DOCX 页数:21 大小:765.36KB
下载 相关 举报
操作系统课程设计linux下的二级文件系统.docx_第1页
第1页 / 共21页
操作系统课程设计linux下的二级文件系统.docx_第2页
第2页 / 共21页
操作系统课程设计linux下的二级文件系统.docx_第3页
第3页 / 共21页
操作系统课程设计linux下的二级文件系统.docx_第4页
第4页 / 共21页
操作系统课程设计linux下的二级文件系统.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

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

《操作系统课程设计linux下的二级文件系统.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计linux下的二级文件系统.docx(21页珍藏版)》请在冰豆网上搜索。

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

操作系统课程设计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_

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1