操作系统课程设计Linux二级文件系统设计Word文档格式.docx
《操作系统课程设计Linux二级文件系统设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计Linux二级文件系统设计Word文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
write写文件
cd进出目录
2.列目录时要列出文件名,物理地址,保护码和文件长度
3.源文件可以进行读写保护
【实验环境】
C++
DevCpp
【设计思路】
本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。
另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。
首先应确定文件系统的数据结构:
主目录、子目录及活动文件等。
主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。
用户创建的文件,可以编号存储于磁盘上。
如:
file0,file1,file2…并以编号作为物理地址,在目录中进行登记。
结构体:
typedefstruct/*thestructureofOSFILE*/
{
intfpaddr;
/*filephysicaladdress*/
intflength;
/*filelength*/
intfmode;
/*filemode:
0-ReadOnly;
1-WriteOnly;
2-ReadandWrite;
3-Protect;
*/
charfname[MAXNAME];
/*filename*/
}OSFILE;
//存放重要信息
typedefstruct/*thestructureofOSUFD*/
charufdname[MAXNAME];
/*ufdname*/
OSFILEufdfile[MAXCHILD];
/*ufdownfile*/
}OSUFD;
//用户下面的文件
typedefstruct/*thestructureofOSUFD'
LOGIN*/
/*ufdname*/
charufdpword[8];
/*ufdpassword*/
}OSUFD_LOGIN;
typedefstruct/*fileopenmode*/
intifopen;
/*ifopen:
0-close,1-open*/
intopenmode;
/*0-readonly,1-writeonly,2-readandwrite,3-initial*/
}OSUFD_OPENMODE;
主要的函数说明:
voidLoginF();
/*LOGINFileSystem用户登录*/
voidDirF();
/*DirFileSystem列目录*/
voidCdF();
/*ChangeDir改变目录*/
voidCreateF();
/*CreateFile创建文件*/
voidDeleteF();
/*DeleteFile删除文件*/
voidModifyFM();
/*ModifyFileMode修改*/
voidOpenF();
/*OpenFile打开文件*/
voidCloseF();
/*CloseFile关闭文件*/
voidReadF();
/*ReadFile读文件*/
voidWriteF();
/*WriteFile写文件*/
voidQuitF();
/*QuitFileSystem离开文件系统*/
voidhelp();
其他重要函数:
voidclrscr()//清屏
intExistD(char*dirname)/*WhetherDirNameExist,Exist-i,NotExist-0*/
intExistF(char*filename)/*WhetherFileNameExist,Exist-i,NotExist-0*/
intFindPANo()/*findoutphysicaladdressnum*/
voidSetPANo(intRorW)/*Setphysicaladdressnum,0-read,1-write*/
voidInputPW(char*password)/*inputpassword,use'
*'
replace*/
char*ltrim(char*str)/*removetheheadingblanks.去除左空白*/
char*rtrim(char*str)/*removethetrailingblanks.去除右空白*/
intWriteF1()/*writefile相当于置换文件*/
程序流程说明:
整体流程:
开始
Login(Name/Pw/Cpw)
创
建
文件
打开文件
删除文件
写
更改目录
修改文件属性
读文件
关闭文件
退出系统
清屏
添加
覆盖
结束
各部分功能流程:
Open:
Open
获取文件名
文件是否存在?
(file>
0)
文件名不存在
获取文件
置为打开状态
并获取文件模式
打开文件成功
N N
Y
Delete:
Delete
主目录是否为空?
Y
确认删除文件在用户目录下!
N
用户是否在用户目录下?
只能修改用户目录下的文件!
接收删除文件名
文件被打开或被保护?
Y
打开或被保护状态不可删除
获取物理块号
文件向前移动
删除文件,文件数减一
删除文件成功!
Write:
Write
用户是否在目录下?
文件不存在!
Y
确认该文件被打开
文件权限为只写或读写
N
文件为只读和保护,不允许写!
获取路径
0—追加,1—覆盖?
1
追加
文件写入成功!
Close:
Close
请确认要关闭的文件是在用户目录下!
Y
罗列已经打开的文件
获取物理地址
文件是否处于关闭状态?
该文件已被关闭
N
文件成功关闭
【源程序清单】
voidOpenF()/*OpenFile*/
printf("
\n\nC:
\\%s>
"
strupr(dirname));
//显示当前路径
intfcoun,i;
//定义两个整形变量
charfname[MAXNAME],fmode[25];
//定义两个字符串变量
intfmod;
//文件模式
\nPleaseinputFileName:
);
gets(fname);
//接收打开文件的文件名
ltrim(rtrim(fname));
//去除左右空白
if(ExistF(fname)<
0) //判断文件是否存在
{ //不存在
printf("
\nError.文件名\'
%s\'
不存在\n"
fname);
wgetchar=1;
}else{ //存在
i=ExistD(username);
//获取用户物理信息
for(inta=0;
a<
fcount[i];
a++) //遍历用户文件
{
if(strcmp(fname,ufd[i]->
ufdfile[a].fname)==0)//找到文件
{
fcoun=a;
break;
}
}
ifopen[i][fcoun].ifopen=1;
//将文件状态置为打开状态
PleaseinputOpenMode(0-ReadOnly,1-WriteOnly,2-ReadandWrite,3-Protect):
//打开文件模式
gets(fmode)