操作系统实验三--文件管理Word格式.doc
《操作系统实验三--文件管理Word格式.doc》由会员分享,可在线阅读,更多相关《操作系统实验三--文件管理Word格式.doc(35页珍藏版)》请在冰豆网上搜索。
![操作系统实验三--文件管理Word格式.doc](https://file1.bdocx.com/fileroot1/2022-10/4/78e4fda5-4aad-475c-9953-8ccb3658256a/78e4fda5-4aad-475c-9953-8ccb3658256a1.gif)
(2)删除文件
当已不再需要某文件时,可将它从文件系统中删除。
在删除时,系统应该先从目录中找到要删除的文件的目录项,使之成为空项,然后回收该文件所占用的存储空间。
(3)读文件
在读一个文件时,须在相应的系统调用中给出文件名和应该读入的内存目标地址。
此时,系统同样要查找目录,找到制定的目录项,从中得到被读文件在外存中的位置。
在目录项中,还有一个指针用于对文件的读/写。
(4)写文件
在写一个文件时,须在相应的系统调用中给出该文件名及该文件在内存中的(源)地址。
为此,也同样须先查找目录,找到指定文件的目录项,在利用目录中的写指针进行写操作。
(5)截断文件
如果一个文件的内容已经陈旧而需要全部更新文件的内容时,一种方法是将此文件删除,再重新创建一个新文件。
但如果文件名及其属性均无改变时,则可采取另一种所谓的截断文件的方法,此即将原有文件的长度设置为0,或说放弃原有的文件内容。
(6)设置文件的读/写位置
前述的文件读/写操作,都只提供了对文件顺序存取的手段,即每次都是从文件的始端读或写。
设置文件读/写位置的操作,用于设置文件读/写指针的位置,以便每次读/写文件时,不是从其始端而是从所设置的位置开始操作。
也正因如此,才能改顺序存取为随机存取。
3.设计实现:
1)流程图
2)详细设计
源代码
#include<
stdio.h>
string.h>
conio.h>
stdlib.h>
time.h>
#defineMaxUser100//定义最多有100个用户
#defineMaxDisk512*1024//定义磁盘空间大小
#definecommandAmount//对文件操作的指令数
//存储空间管理有关结构体和变量
chardisk[MaxDisk];
//模拟512K的磁盘存储空间
typedefstructdistTable//磁盘块结构体
{
intmaxlength;
intstart;
intuseFlag;
distTable*next;
}diskNode;
diskNode*diskHead;
typedefstructfileTable//文件快结构体
charfileName[10];
//文件在磁盘存储空间的起始地址
intlength;
//文件内容长度
//文件的最大长度
charfileKind[3];
//文件的属性--读写方式
structtm*timeinfo;
boolopenFlag;
//判断是否有进程打开了文件
};
intused=0;
//定义MFD目录中用已有的用户数
//两级目录结构体
typedefstructuser_file_directory//用户文件目录文件UFD
fileTable*file;
user_file_directory*next;
}UFD;
typedefstructmaster_file_directory//主目录文件
charuserName[10];
charpassword[10];
UFD*user;
}MFD;
MFDuserTable[MaxUser];
intuserID=-1;
//用户登录的ID号,值为-1时表示没有用户登录
//文件管理
voidfileCreate();
//创建文件
voidfileDelet();
//删除文件
voidfileWrite();
//写文件
voidfileRead();
//读文件
voidfileRename();
//重命名文件
voidfileFind();
//查询文件
voidfileDir();
//显示某一用户所有文件
voidfileClose();
//关闭已打开的文件
voidfileChange();
//修改文件的读写方式
intrequestDist(int&
stratPostion,intmaxlength);
//磁盘分配查询
voidinitDisk();
//初始化磁盘
voidfreeDisk(intstartPostion);
//磁盘空间释放
voiddiskShow();
//显示磁盘使用情况
voidinitFile();
//用户管理
voiduserCreate();
intlogin();
voiduserDelet();
voiduserFind();
//用户登陆主界面
voidwebUser();
//用户内部界面
voidwebFile();
intmain()
initDisk();
initFile();
webUser();
return0;
}
voidwebUser()
inti;
while
(1)
{
printf("
************************************************************\n"
);
1.创建用户2.登陆用户 \n"
3.删除用户4.查看用户 \n"
0.退出系统 \n"
请输入操作号\n"
scanf("
%d"
&
i);
switch(i)
{
case0:
exit(0);
break;
case1:
userCreate();
case2:
userID=login();
if(userID!
=-1)
{
webFile();
}
break;
case3:
userDelet();
case4:
userFind();
default:
printf("
您输入的命令有误,请重新选择\n"
system("
pause"
cls"
}
}
voiduserCreate()
charc;
if(used<
MaxUser)
请输入用户名:
"
for(i=0;
c=_getch();
i++)
if(c==13)break;
else
userName[i]=c;
%c"
c);
userName[i]='
\0'
;
i<
used;
if(!
strcmp(userTable[i].userName,userName))
printf("
\n"
该用户名已存在,创建用户失败\n"
system("
return;
strcpy(userTable[used].userName,userName);
请输入密码:
userTable[used].password[i]=c;
*"
userTable[userID].password[i]='
创建用户成功\n"
used++;
system("
else
创建用户失败,用户已达到上限\n"
fflush(stdin);
intlogin()
charname[10],psw[10];
inti,times;
printf("
请输入用户名:
for(i=0;
if(c==13)break;
else
name[i]=c;
name[i]='
i<
used;
if(!
strcmp(userTable[i].userName,name))
if(i==used)
\n您输入的用户名不存在\n"
return-1;
for(times=0;
times<
3;
times++)
memset(psw,'
sizeof(psw));
\n请输入密码:
psw[i]=c;
strcmp(psw,userTable[i].password))
用户登录成功\n"