没有合适的资源?快使用搜索试试~ 我知道了~
文件系统的模拟_java课设_含可运行程序.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 127 浏览量
2022-06-11
16:16:56
上传
评论
收藏 565KB DOC 举报
温馨提示
试读
29页
文件系统的模拟_java课设_含可运行程序
资源推荐
资源详情
资源评论
课程设计说明书 NO.1
文件系统的模拟
一、课程设计目的:
操作系统课程设计是计算机科学与技术专业的重要实践性教学环节。在进行了专业
基础课程和操作系统原理课程学习的基础上,设计或分析一个实际的操作系统旨在加
深对计算机硬件结构和系统软件的认识,初步掌握操作系统组成模块和应用接口的使
用方法,提高进行设计和系统分析的能力,为毕业设计及以后的实践打下良好的基
础。
二、课程设计的开发语言:
VISUAL C++
三、功能描述:
该系统能实现如下功能:建立文件、打开文件、读文件、写文件、关闭文件、删
除文件、建立目录、显示目录内容、显示文件内容、结束系统。
四、方案论证:
4.1 概要设计:
图 1、 系统功能图
文件系统提供的文件操作有建立文件(create)、删除文件(delete)、条件读取文件
(read)、写入文件(write)、查询文件的属性(ask)、显示文件所有内容(type)、重命
沈 阳 大 学
课程设计说明书 NO.2
名文件(ren)、关闭文件(close)。可以通过键盘输入命令来模拟文件的操作。通过
exit 命令退出程序。
4.1.1 创建文件操作
由于创建文件必须要有文件名,所以空路径和路径“\”在此成为错误。而且正因为
如此,在此模块中需要分解出文件名,再把不含文件名的路径传递给“查找模块”,其
次,其中涉及了创建文件的操作,它包括:在找到目录中的 nextf 中添加一项并把文
件的指针指向目录,即给文件赋值等操作。本模拟程序规定文件名不得多于 10 个字
符。
4.1.2 创建目录操作
创建目录与创建文件非常相似,唯一不同之处仅仅在于目录比文件多两个
*next[100]和*nextf[100],创建时为了以后便于操作将前面两指针均置为NUL
L。由于和创建文件操作非常相似,在原理和流程中,只需将取文件名该为目录名。
4.1.3 删除文件操作
删除文件必须有文件名,所以不允许空路径或路径文“/”在此模块中分解出文件
名,对不含文件名的路径进行处理。删除操作在找到上一级目录后,再找出上一级目
录,将之后的指针向前移一位,文件被删除。
4.1.4 删除目录操作
删除目录操作比删除文件操作复杂的多,路径名可以为空,表明删除当前目录当
被删除的目录下存在文件或目录时,要让用户确定是否删除,当对当前目录或当前目
录以上的目录进行删除后,当前目录和当前目录以下的目录都要被修改,若路径名不
为空时,寻找它的上一级目录的过程与删除文件时寻找上一级目录的过程相似。
4.1.5 修改密码操作
首先输入用户名,通过调用查找功能找到该用户,将此用户的密码输入,若输入
的
密码与原来的密码相同,则进入修改修改时对密码进行确认若两次输入相同则修改成
功,否则修改失败。
4.1.6 查询当前目录信息操作
此模块先调用分解路径为目录模块,再判断是绝对路径还是相对路径,分别处理
沈 阳 大 学
课程设计说明书 NO.3
后再统一的根据路径找到所需目录后,返回指向它的指针,否则提示出错信息并设置
相应的标志位。对路径的判断按照以下原则:若以“/”打头的则按照绝对路径处理,否
则将第一个目录与当前目录依次比较,若有相同泽按照绝对路径处理否则按照出错处
理。
4.1.7 查看文件块号
文件的内存空间为 1000 块,每当创建一个文件分配连续的存储块号给此文件,
查看的时候先输入要查询的文件名根据用户输入的文件名找到此文件和相应的块号。
4.2 详细设计:删除目录操作比删除文件操作复杂的多,路径名可以为空,表明删除当前目录当被
删除的目录下存在文件或目录时,要让用户确定是否删除,当对当前目录或当前目录以上的目录
进行删除后,当前目录和当前目录以下的目录都要被修改,若路径名不为空时,寻找它的上一级
目录的过程与删除文件时寻找上一级目录的过程相似。
void CreateFile(char *filename) /*建立文件*/
{
int c,j=0;
int fileindex;
memset(buffer,'\0',1024);
while(FindFile(filename)!=-1)
{
cout<<"已存在相同名称的文件,请改名字"<<endl;
cin>>filename;
}
fileindex=FindBfile();
//cout<<"fileindex"<<fileindex<<endl;
if(fileindex==-1)
{
cout<<"文件名称空间已满!"<<endl;
return;
}
struct File *fp;
fp=(struct File*)(disk+200*sizeof(struct DIR)+Blocksize+200*sizeof(struct INODE)
+fileindex*sizeof(struct File));
strcpy(fp->is_busy,"1");
strcpy(fp->filename,filename);
strcpy(fp->parentdir,CurDir);
fp->i_index=FindBInode();
沈 阳 大 学
课程设计说明书 NO.4
//cout<<"blankinode"<<fp->i_index<<endl;
if(fp->i_index==-1)
{
cout<<"inode 区空间已满!创建文件失败!"<<endl;
return;
}
struct INODE *p;
p=readinode(fp->i_index);
strcpy(p->is_busy,"1");
Gettime(p->buildtime);
strcpy(p->owner,CurUser);
strcpy(p->lctime,p->buildtime);
//p->i_num=index;
cout<<"choose 文件权限:其他用户可 1 读写,2 只读,3 不可见"<<endl;
cin>>c;
switch(c)
{
case 1:strcpy(p->mode,"wrwr");break;
case 2:strcpy(p->mode,"wr0r");break;
case 3:strcpy(p->mode,"wr00");break;
default:cout<<"input error!"<<endl;
}
cout<<"开始写文件......按 ctrl+D 结束输入!....长度最长为 1024........"<<endl;
int i=0;
char cc;
while((cc=getchar())!=4)
{buffer[i++]=cc;}
//cout<<"buffer"<<buffer<<endl;
p->head=createdata();
p->fsize=strlen(buffer);
struct FILEDATA *pp;
pp=p->head;
while(pp)
{for(int i=0;i<512;++i)
{
(char)disk[512*Blocksize+pp->blocknum*512+i]=buffer[i+j*512];
}
pp=pp->next;
j++;
}
cout<<"File is built sucessfully!"<<endl;
cout<<CurPath;
}
沈 阳 大 学
课程设计说明书 NO.5
struct INODE *open(char filename[]) /*打开文件*/
{
int filenum;
filenum=FindFile(filename);
if(-1==filenum)
{
cout<<"不存在此文件!请检查输入文件名是否正确!"<<endl;
return NULL;
}
else
{
struct File *p;
p=(struct File*)(disk+200*sizeof(struct DIR)+Blocksize+200*sizeof(struct
INODE)+filenum*sizeof(struct File));
struct INODE *ip;
ip=(struct INODE*)(disk+200*sizeof(struct DIR)+Blocksize+p->i_index*sizeof(struct INODE));
return ip;
}
/*add your codes here*/
}
void read(char filename[],struct INODE *ptr)
{
//cout<<"asdf"<<endl;
if(NULL==ptr)
{
cout<<"文件"<<filename<<"尚未打开,不能读写!"<<endl;
return;
}
else
{
char buf1[512];
memset(buf1,'\0',512);
//char buf2[512];
struct FILEDATA *p;
p=ptr->head;
//cout<<"tst buf1"<<endl;
//cout<<readblock(p->blocknum)<<endl;
strcpy(buf1,readblock(p->blocknum));
p=p->next;
while(p!=NULL)
{
cout<<"++"<<endl;
strcat(buf1,readblock(p->blocknum));
沈 阳 大 学
剩余28页未读,继续阅读
资源评论
omyligaga
- 粉丝: 54
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功