操作系统文件系统实验报告后附源代码Word文档下载推荐.docx
《操作系统文件系统实验报告后附源代码Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《操作系统文件系统实验报告后附源代码Word文档下载推荐.docx(10页珍藏版)》请在冰豆网上搜索。
④能实际演示这个文件系统。
基本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。
1)设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。
MFD)和用户文件目录(UFD)。
另外,为打开
2)程序采用二级文件目录(即设置主目录文件设置了运行文件目录(AFD)。
3)为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。
4)因系统小,文件目录的检索使用了简单的线性搜索。
1,对应位为0,则表示不允
5)文件保护简单使用了三位保护码:
允许读写执行、对应位为许读写、执行。
MFD、UFD),打开文
6)程序中使用的主要设计结构如下:
主文件目录和用户文件目录(件目录(AFD)即运行文件目录,如图所示。
maa;
1登录严63111«
0:
&
\派阖\蕨苗¥
紈1;
^任贾、1Vinuxni^iTuesys.exe格申请k个bock空间ins输入用^名
rndnln#adnln否
^■BioJCk位图是否加锁
la查找是否有改,,..,.,nSEi*用户加锁嗣run否
TkAf£
?
uf1爭Hfiin
疋
#defir
Inode位图是否加锁
否,加锁
Inode空间是否已满
是否有密严gt喑桌面2数据结构的设护核n曲*
>
'
oat\etc
密码是否正确按照分找不到请失败定义找空闲白%
是,登录成功J.
e找到返回SlZ^ki地址12
PO束c>
logout
lAser■结束ie=XHaDl)os£
wd;
xi吕aloginsuccess*Trodt\etc\xiAo>
<
iir
在ionde位图顺序查
dir>
mode找空闲的inode
dij*>
inode0
passud>
ino(l找到返回iTOde地址<
dii'
inode3
inodeIrOde位图解锁
结束
申请失败
找不到审
poot\etc'
wiHao>
<
inolieinode
后在连续
出版物:
[序号]主要责任者.文献题名[J].
刊名,
出版年份,
卷号(期号):
起止页码)
[2]刘国钧,王连成.图书馆史研究[M].北京:
高等教育出版社,
1979:
15-18,
31.(专著:
[序号]主要责任者.文献题名[M].出版地:
出版者,出版
年:
起止页码.)
[3]孙品一.高校学报编辑工作现代化特征[C].中国高等学校自然科学学报研
究会.
科技编辑学论文集
(2).北京:
北京师范大学出版社,1998:
10-22.(论
文集:
[序号]主要责任者.文献题名[C]//主编.论文集名.出版地:
出
版者,
出版年:
附:
源代码
#include<
#include<
#defineBLOCKSIZ512
\n"
);
login();
showhelp();
printf("
%s>
"
cmdhead);
while
(1)
{
scanf("
%s"
&
str);
if(strcmp(str,"
exit"
)==0)
fclose(fd);
}else
return;
dir"
{showdir();
}
elseif(strcmp(str,"
bit"
showbitmap();
help"
logout"
logout();
if(Iscmd(str))
strname);
cmd_Up(str,strname);
else
{printf("
错误命令!
}printf("
s_r_blocks_count=0;
/*保留的blocks计数*/filsys.s_free_blocks_count=DATABLKNUM-5;
/*空闲的blocks计数*/[0]=50-5;
_name,"
."
dir_buf[0].d_ino=0;
_name,"
.."
dir_buf[1].d_ino=0;
etc"
dir_buf[2].d_ino=1;
dir_buf[0].d_ino=1;
strcpy(dir_buf[1].d_name,"
dir_buf[1].d_ino=0;
strcpy(dir_buf[2].d_name,"
passwd"
dir_buf[2].d_ino=2;
strcpy(dir_buf[3].d_name,"
admin"
dir_buf[3].d_ino=3;
strcpy(dir_buf[4].d_name,"
xiao"
dir_buf[4].d_ino=4;
fseek(fd,DATASTART+BLOCKSIZ,SEEK_SET);
fwrite(dir_buf,BLOCKSIZ,1,fd);
dir_buf[0].d_ino=3;
strcpy(dir_buf[1].d_name,"
dir_buf[1].d_ino=1;
fseek(fd,DATASTART+BLOCKSIZ*3,SEEK_SET);
dir_buf[0].d_ino=4;
fseek(fd,DATASTART+BLOCKSIZ*4,SEEK_SET);
_uid=1;
passwd[0].p_gid=GRUP_0;
sername,"
strcpy(passwd[0].password,"
passwd[1].p_uid=2;
passwd[1].p_gid=GRUP_1;
strcpy(passwd[1].username,"
strcpy(passwd[1].password,"
for(i=2;
i<
PWDNUM;
i++){
passwd[i].p_uid=0;
passwd[i].p_gid=GRUP_4;
strcpy(passwd[i].username,"
nothisuser"
strcpy(passwd[i].password,"
fseek(fd,DATASTART+BLOCKSIZ*2,SEEK_SET);
fwrite(passwd,BLOCKSIZ,1,fd);
ininode->
di_ino=2;
.\n"
fd=fopen(fsystemname,"
rb+"
_uid!
=0){
sername,&
pwd[i].password);
inodetemp=read_inode(0);
t\t\t<
\tinode%d\n"
dir_buf[i].d_ino);
elseif(i==1)
\t..\t\t\t<
}else
inodetemp=read_inode(dir_buf[i].d_ino);
if((inodetemp->
di_mode&
DIMODE_DIR)==DIMODE_DIR)
\t%s\t\t\t<
dir_buf[i].d_name,dir_buf[i].d_ino);
elseif((inodetemp->
DIMODE_FILE)==DIMODE_FILE)
%d
file>
\tsize
block%d\n"
dir_buf[i].d_name,inodetemp->
di_size,inodetemp->
di_block[0]);
passwd>
inode
dir_buf[i].d_name,dir_buf[i].d_ino,inodetemp->
intEnterdir(char*namestr),namestr)==0){
i=0;
break;
if(strcmp("
namestr)==0)
i=1;
if(strcmp(dir_buf[i].d_name,namestr)==0)
if(dir_buf[i].d_ino!
=-1)
_ino);
break;
i++;
}while(i<
cur_inode->
di_number);
if(i==cur_inode->
di_number)
intIscmd(charcmd[10]){
del"
if(strcmp(cmdhead,"
root"
)!
=0)
while(cmdhead[i]!
='
\0'
)
if(cmdhead[i]=='
\\'
){
itemp=i;
}i++;
cmdhead[itemp]='
;
elseif(strcmp(strname,"
strcat(cmdhead,"
\\"
strcat(cmdhead,strname);
进入目录失败!
create"
{if(creat(strname))
{del_ino=inum;
_name,strname);
fseek(fd,DATASTART+BLOCKSIZ*cur_inode->
di_block[0],SEEK_SET);
buf[0].d_ino=inum;
buf[1].d_ino=cur_inode->
di_ino;
fseek(fd,DATASTART+BLOCKSIZ*bnum,SEEK_SET);
_ino=inum;
di_block[0],
SEEK_SET);
_name,strname)!
for(;
i<
di_number;
i++)
strcpy(dir_buf[i].d_name,dir_buf[i+1].d_name);
dir_buf[i].d_ino=dir_buf[i+1].d_ino;
_name,strname)==0)
已经找到%s,inode=%d\n"
strname,dir_buf[i].d_ino);
printf("
请输入新的文件名:
fflush(stdin);
temp);
if(strlen(temp)>
=14)
新文件名过长!
重命名失败!
return-1;
if(Fd_dirfile(temp)!
=-1)_name,temp);
sername);
if(strcmp(pwd[i].username,str)==0)
str)==0)
exit(0);
if(i!
=PWDNUM)
}while
(1);
passwd:
scanf("
str);
if(strcmp(pwd[i].password,str)==0){
cur_user=&
pwd[i];
elseif(inodetemp->
di_gid==1)
由%s创建,属于普通用户组\n"
pwd[inodetemp->
di_uid-1].username);
}