洛阳理工学院操作系统实验报告.docx
《洛阳理工学院操作系统实验报告.docx》由会员分享,可在线阅读,更多相关《洛阳理工学院操作系统实验报告.docx(9页珍藏版)》请在冰豆网上搜索。
洛阳理工学院操作系统实验报告
阳理工学院实验报告用纸
计算机系B090501班姓名袁乐平学号B09050103成绩
实验
名称
文件管理
同组人
日期
12.6
一、实验目的
通过这次实验,掌握文件系统的用户管理,掌握普通文件、目录文件管理的的基本原理。
二、实验原理
使用文件系统的用户要通过用户名、密码的验证,对不同用户设置不同(自己相应)的子目录,如图(a)所示。
MFD是主文件目录,Power是存放用户名、密码的文件,简单起见此处用数组代替;UFD0,UFD1,…,UFD9是10个用户目录,用户0的目录(UFD0)下包含文件f1.txt,…,f7.c。
图(b)是创建目录、文件以及删除目录、文件所用的存储数据结构。
三、实验内容
#include
#include
#include
#include
typedefstructuser
{
charUName[8];//用户名
charPassword[10];//密码
}Access;
typedefstructFilenode{
charFName[10];
structFilenode*next;
}File;
typedefstructMFDnode{
charUName[8];
structMFDnode*right;
File*down;
}DFlink;
Accesspower[10];
DFlink*head;
voidinitPower(){
inti;
printf("请输入用户信息:
\n");
for(i=0;i<5;i++){
printf("请输入用户名:
");
gets_s(power[i].UName);
printf("请输入密码:
");
gets_s(power[i].Password);
}
}
voidinitHead(){
inti;
DFlink*m,*n;
m=(DFlink*)malloc(sizeof(DFlink));
m->right=NULL;
m->down=NULL;
head=m;
for(i=0;i<5;i++)
{
n=(DFlink*)malloc(sizeof(DFlink));
strcpy_s(n->UName,power[i].UName);
m->right=n;
n->right=NULL;
n->down=NULL;
m=n;
}
}
intlogging(){
charname[8],password[10];
inti=0;intj=0;
printf("请输入登录的用户名:
");
gets_s(name);
while(i<2&&strcmp(power[i].UName,name)!
=0)
i++;
if(i<5)
{
printf("请输入密码:
");
gets_s(password);
while(strcmp(power[i].Password,password)!
=0&&j<3)
{
printf("密码不正确,请重新输入:
");
gets_s(password);
j++;
}
if(j==3)
{
printf("密码输入错误超过三次,禁止输入\n");
return-1;
}
else{
returni;
}
}
else
{
return-1;
}
}
voidfileCreate(intindex){
charname1[8];
DFlink*n;
File*s,*p;
intj;
strcpy_s(name1,power[index].UName);
n=head->right;
while(n!
=NULL&&strcmp(n->UName,name1)!
=0)
n=n->right;
if(n!
=NULL){
s=(File*)malloc(sizeof(File));
n->down=s;
s->next=NULL;
for(j=0;j<3;j++){
p=(File*)malloc(sizeof(File));
printf("请输入所包含的文件:
");
gets_s(p->FName);
s->next=p;
p->next=NULL;
s=p;
}
}
else
printf("没有该用户名!
\n");
}
voidfileDelete(intindex){
charname1[8];
charname2[8];
DFlink*n;
File*s,*p;
strcpy_s(name1,power[index].UName);
n=head->right;
while(n!
=NULL&&strcmp(n->UName,name1)!
=0)
n=n->right;
if(n!
=NULL){
printf("请输入要删除的文件名:
");
gets_s(name2);
s=n->down;
p=s->next;
while(p!
=NULL&&strcmp(p->FName,name2)!
=0){
s=s->next;
p=p->next;
}
if(p!
=NULL)
s->next=p->next;
else
printf("没有该文件名!
\n");
}
else
printf("没有该用户名!
\n");
}
voidprint(intindex)
{
charname[8];
DFlink*n;
File*s,*p;
strcpy_s(name,power[index].UName);
n=head->right;
while(n!
=NULL&&strcmp(n->UName,name)!
=0)
n=n->right;
if(n!
=NULL){
s=n->down;
p=s->next;
printf("包含的文件为:
");
while(p!
=NULL)
{
printf("%s",p->FName);
p=p->next;
}
}
}
voidmain(){
intf=1;
chara;
intj;
while(f){
printf("\n");
printf("i用户初始化\n");
printf("c创建文件\n");
printf("d删除文件\n");
printf("e退出\n");
printf("请选择:
");
scanf_s("%c",&a);
getchar();
switch(a){
case'i':
initPower();
initHead();
break;
case'c':
j=logging();
fileCreate(j);
print(j);
break;
case'd':
j=logging();
fileDelete(j);
print(j);
break;
case'e':
f=0;
break;
}
}
}
四、原始数据记录
输入数据:
用户名密码文件名
aaa111a1a2a3
bbb222b1b2b3
ccc333c1c2c3
ddd444d1d2d3
fff555f1f2f3
五、结论
预期的输出:
用户初始化:
创建文件:
(为了简洁,只截两个用户名的文件的创建)
删除文件:
(为了简洁,只截一个用户名的文件)
实际输出数据与预期的输出相同(不相同)
实际输出数据与预期的输出相同。
第页