操作系统文件系统设计文档Word下载.docx
- 文档编号:22097940
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:13
- 大小:75.15KB
操作系统文件系统设计文档Word下载.docx
《操作系统文件系统设计文档Word下载.docx》由会员分享,可在线阅读,更多相关《操作系统文件系统设计文档Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
dir列文件目录
create创建文件
delete删除文件
open打开文件
close关闭文件
read读文件
write写文件
(2)列目录时要列出文件名、物理地址、保护码和文件长度;
(3)源文件可以进行读写保护。
提示:
(1)首先应确定文件系统的数据结构:
主目录、子目录及活动文件等。
主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。
(2)用户创建的文件,可以编号存储于磁盘上。
如file0,file1,file2...并以编号作为物理地址,在目录中进行登记
1.3系统开发运行环境
WindowsXP系统,VisualC++6.0
二系统分析设计
2.2基本原理
本系统是模拟实现多用户多的文件系统,在系统出现登录后,输入用户与口令,在用户登录系统后,可以添加2个普通用户。
普通用户的命令与系统管理员的系统命令具体实现是一样的。
此模拟系统提供了10个命令,并根据命令的含义与要求,用C/C++编程来完成所有具体操作。
该系统可以模拟完成用户的登陆和验证,新建文件,打开文件,读文件,写文件,关闭文件,删除文件,查看文件,退出系统,注销用户,切换用户等系统功能。
2.3数据结构设计
系统管理员
typedefstructuser//系统管理员
{charname[5];
//登录用户名
charpassword[10];
//登录密码
}user;
用户文件目录
structUFD
{charfname[5];
//文件名
charproper[2];
//文件属性,R或RW
intlength;
//记录长度
intaddr;
//文件地址
};
用户已打开文件表
structUOF
{
charfname[5];
charproper[2];
//文件属性,r或rw
intlength;
charstate[5];
//状态:
new,open
intread;
//读指针
intwrite;
//写指针
主文件目录
structMFD
{charUsername[5];
//用户名
structUFDUserDirec[L];
//用户文件目录
structUOFOpenUser[S];
//已打开文件目录
intcount;
//每个用户拥有的存在的文件计数
}MFD[N];
2.4程序流程图
失败重新登录
成功
用户命令
三程序代码以及运行结果
系统管理员登陆以及验证:
boollogin(char*name,char*pwd)
{
if((strcmp(name,admin.name)==0)&
&
(strcmp(pwd,admin.password)==0))
{returntrue;
}
returnfalse;
}
创建新用户
boolNewUser(charuser[])
{inti=0;
while(strcmp(MFD[i].Username,"
"
)!
=0&
(i<
N))//查看MFD,检测用户数是否已满
{i++;
}
if(i>
=N){//如果用户数已满
cout<
<
用户数已满.你必须删除一个用户才继续新建用户"
endl;
return0;
}
else{//如果用户数未满,则建立新用户
strcpy(MFD[i].Username,user);
NOU++;
//用户数加1
用户"
user<
创建成功."
//提示当前用户创建成功
系统现有的用户数:
"
NOU<
//显示系统现有的用户数
return1;
}
注销用户
voidLogout(inta)
{//注销用户,清除所有文件的登记栏
stringstr;
chartemp[5]="
;
for(inti=0;
i<
L;
i++)
{//对UFD中的文件名MFD[a].UserDirec[i].fname进行处理
str=static_cast<
string>
(MFD[a].UserDirec[i].fname);
strcpy(MFD[a].UserDirec[i].fname,str.substr(0,4).c_str());
for(intj=0;
j<
S;
j++)//如果UFD中的文件名与UOF中的文件名相同
{//对UOF中的文件名UOF[i].fname进行处理
(MFD[a].OpenUser[j].fname);
strcpy(MFD[a].OpenUser[j].fname,str.substr(0,4).c_str());
//清除UOF中信息
if(strcmp(MFD[a].UserDirec[i].fname,MFD[a].OpenUser[j].fname)==0)
{strcpy(MFD[a].OpenUser[j].fname,"
);
//清除UOF中文件名
strcpy(MFD[a].OpenUser[j].proper,"
//清除UOF中文件属性
MFD[a].OpenUser[j].length=0;
//清除UOF中记录长度
strcpy(MFD[a].OpenUser[j].state,"
//清除UOF中文件状态
MFD[a].OpenUser[j].read=0;
//清除UOF中读指针
MFD[a].OpenUser[j].write=0;
//清除UOF中写指针
//清除UFD中信息
strcpy(MFD[a].UserDirec[i].fname,"
//清除UFD中文件名
strcpy(MFD[a].UserDirec[i].proper,"
//清除UFD中文件属性
MFD[a].UserDirec[i].length=0;
//清除UFD中记录长度
MFD[a].UserDirec[i].addr=0;
//清除UFD中文件地址
strcpy(temp,MFD[a].Username);
strcpy(MFD[a].Username,"
//清除MFD中的用户名
MFD[a].count=0;
//该用户下的文件数清零
NOU--;
//用户数减1
temp<
注销成功"
//提示注销成功
系统当前用户数:
}
新建文件
voidCreate(inta){
inti=0;
charfilename[5];
charproperty[3];
//文件属性
chartemp[2];
//文件属性的临时变量
//临时变量
Re:
请输入创建文件名(长度为4)文件属性(r,rw):
//提示输入
文件名:
//输入要创建的文件名
cin>
>
filename;
if(strlen(filename)>
4)gotoRe;
//如果文件名长度不符合要求,则要求重新输入
loop:
文件属性(r,rw):
//输入文件属性,读或是读写
property;
strcpy(temp,property);
//将属性字符串赋值给temp
if(!
(strcmp(temp,"
rw"
)==0||strcmp(temp,"
r"
)==0))//检查属性是否正确
{cout<
文件属性设置错误.请重新设置:
rorrw"
//属性错误,重新输入
gotoloop;
//对文件名filename进行处理
(filename);
strcpy(filename,str.substr(0,4).c_str());
//对MFD[a].UserDirec[i].fname文件名进行处理
while((strcmp(MFD[a].UserDirec[i].fname,filename)!
=0)&
L))/*查用户的UFD,检测该文件是否重名*/
{i++;
}
=L){//无重名文件
if(MFD[a].count>
=L)//如果用户文件目录UFD已满,则提示文件满的信息
{cout<
用户"
MFD[a].Username
<
文件目录UFD已满."
//当用户文件目录UFD未满时
else{
intj=0;
intk=0;
while(strcmp(MFD[a].UserDirec[j].fname,"
(j<
L))/*在UFD中寻找空登记栏,并登记*/
{j++;
MFD[a].count++;
//用户的文件计数器加1
strcpy(MFD[a].UserDirec[j].fname,filename);
//UFD中登记文件名
MFD[a].UserDirec[j].length=Record;
//UFD记录长度
strcpy(MFD[a].UserDirec[j].proper,temp);
//UFD中文件属性
srand((unsigned)time(NULL));
//产生随机数
i=rand()%100;
//找一磁盘空闲块并赋值给i
MFD[a].UserDirec[j].addr=i;
//在UFD登记栏中置文件地址为i
//提示文件在UFD中建立成功
文件:
filename<
已经成功建立\n文件数量:
MFD[a].count<
//显示建立成功
while(strcmp(MFD[a].OpenUser[k].fname,"
(k<
S))/*在UOF中寻找空登记栏*/
{k++;
//如果用户已打开文件表UOF未满
if(k<
S){//在UOF中登记文件的相关信息
strcpy(MFD[a].OpenUser[k].fname,filename);
//UOF中文件名
MFD[a].OpenUser[k].length=Record;
//UOF中记录长度
strcpy(MFD[a].OpenUser[k].proper,temp);
//UOF中文件属性
strcpy(MFD[a].OpenUser[k].state,"
new"
//修改状态为建立
MFD[a].OpenUser[k].write=i;
//修改写指针为i
//提示文件在UOF中建立成功
//cout<
已经成功打开\n"
}//如果用户已打开文件表UOF已满,提示文件满的信息
else{//
用户已打开文件表UOF已满."
else//提示文件同名,不能建立
文件同名不能建立"
打开文件
写文件
读文件
删除文件
系统帮助命令
四实习心得体会
这次操作系统实习为期三周的学习时间,虽然时间比较短,但是还是有点收获的。
实习之前,是操作系统课程学习,学习的都是课本的理论知识。
在没有接触操作系统课程之前,个人的见识真是少啊。
我以为操作系统就是WindowsXP这么一种操作系统,还没想到操作系统竟然还有这么多的呢。
课堂上讲的操作系统就是Linux操作系统,可是课本的理论知识学习的比较模糊,很多概念都不理解。
经过这次操作系统实习之后,个人在虚拟机里不断的练习Linux系统各种命令。
由于个人这次实习,所选的题目是:
文件系统模拟设计,所以个人在这方面操作比较多,经常动手练习那些Linux系统常用的文件系统命令,逐渐熟悉理解了这个文件系统的各种命令。
不过,对于Linux系统还有很多知识是不懂的,如果将来打算从事Linux系统软件开发的哇,那么还是需要慢慢学习Linxu系统的。
通过这次实习,促使个人开始接触了解这个Linux系统,也对Linux系统有了一点兴趣。
五参考文献
现代操作系统(第2版)
作者:
(荷)AndrewS.Tanenbaum[作译者介绍]
译者:
陈向群马洪兵出版社:
机械工业出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 文件系统 设计 文档
![提示](https://static.bdocx.com/images/bang_tan.gif)