二级文件系统Word文档下载推荐.doc
- 文档编号:13175774
- 上传时间:2022-10-07
- 格式:DOC
- 页数:19
- 大小:226KB
二级文件系统Word文档下载推荐.doc
《二级文件系统Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《二级文件系统Word文档下载推荐.doc(19页珍藏版)》请在冰豆网上搜索。
write写文件
2.列目录时要列出文件名,物理地址,保护码和文件长度
二、实验目的
通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。
三、开发环境
Windows操作系统
MicrosoftVisual C++
四、分析设计
实验原理
通过程序模拟Linux文件系统,用一个二进制文件(FileSystem.disk)来模拟磁盘.设计一个多用户的二级文件系经统、实现一般的创建文件、目录,删除文件、目录,切换目录,打开、关闭文件、读写文件等操作。
文件系统,包含格式化,显示文件(目录),创建文件等几个简单命令的实现,而且能完成超级块的读写,节点的读写等过程.本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户账号下的文件。
另外,为了简单本文件系统未考虑文件共享、文件系统安全以及管道文件与设备文件等特殊内容。
1.程序执行流程图:
开始
初始化
选择程序
删除目录、文件
查看目录、文件
进入指定目录
返回上一目录级
查询
创建目录、文件
格式化
结束
2.数据块的分配和回收
开始
系统是否有空块?
返回当前空闲块地址;
超级块空闲指针加1
开启新的块组,将其地址信息读入超级块;
返回该块组首地址
结束
超级块中是否有空块?
设计FileSystem类负责管理磁盘空间和磁盘内存I节点,负责对磁盘空间和磁盘数据进行优化管理。
并提代接口言方法供用户或程序调用。
内存
System
用户11
磁盘
用户21
用户31
用户n1
五、打印的源程序及附上的注释
#include"
xd.h"
//文件管理
voidcreateFile(charfileName[],intlength,charfileKind[]);
//创建文件
voidfileWrite(charfileName[]);
//写文件
voidfileCat(charfileName[]);
//读文件
voidfileRen(charfileName[],charrename[]);
//重命名文件
voidfileClose(charfileName[]);
//关闭已打开的文件
voiddelFile(charfileName[]);
//删除文件
intrequestDist(int&
startPostion,intmaxLength);
//磁盘分配查询
voidinitDisk();
//初始化磁盘
voidfreeDisk(intstartPostion);
//磁盘空间释放
//用户管理
voiduserCreate();
intlogin();
intuserID=-1;
//用户登录的ID号,值为-1时表示没有用户登录
//用户注册
voiduserCreate()
{
charc;
charuserName[10];
inti;
if(used<
MaxUser)
{
cout<
<
"
请输入用户名:
;
for(i=0;
c=getch();
i++)
{
if(c==13)break;
else
userName[i]=c;
printf("
%c"
c);
}
userName[i]='
\0'
i<
used;
if(!
strcmp(userTable[i].userName,userName))
{
cout<
\n"
该用户名已存在,创建用户失败\n"
//system("
pause"
);
return;
}
strcpy(userTable[used].userName,userName);
请输入密码:
userTable[used].password[i]=c;
*"
userTable[used].password[i]='
创建用户成功\n"
used++;
//system("
}
else
创建用户失败,用户已达到上限\n"
fflush(stdin);
}
//登录
intlogin()
charname[10],psw[10];
inti,times;
cout<
请输入用户名:
for(i=0;
if(c==13)break;
else
name[i]=c;
printf("
name[i]='
if(!
strcmp(userTable[i].userName,name))
break;
if(i==used)
\n您输入的用户名不存在\n"
return-1;
for(times=0;
times<
3;
times++)
memset(psw,'
sizeof(psw));
\n请输入密码:
psw[i]=c;
cout<
strcmp(psw,userTable[i].password))
printf("
用户登录成功\n"
break;
if(i==used)
您输入的密码错误,您还有%d次输入机会\n"
2-times);
if(times==2)exit(0);
elsebreak;
returni;
//磁盘初始化
voidinitDisk()
diskHead=(diskNode*)malloc(sizeof(diskNode));
diskHead->
maxlength=MaxDisk;
useFlag=0;
start=0;
next=NULL;
//分配磁盘
startPostion,intmaxLength)
intflag=0;
//标记是否分配成功
diskNode*p,*q,*temp;
p=diskHead;
while(p)
if(p->
useFlag==0)//磁盘块未被使用,且剩余长度大于要创建文件的长度
startPostion=p->
start;
q=(diskNode*)malloc(sizeof(diskNode));
q->
start=p->
maxlength=maxLength;
useFlag=1;
diskHead->
start+maxLength;
//剩余磁盘空间头指针后移
maxlength=p->
maxlength-maxLength;
//剩余磁盘空间长度减少
flag=1;
temp=p;
if(diskHead->
next==NULL)diskHead->
next=q;
while(temp->
next)temp=temp->
next;
temp->
p=p->
returnflag;
//创建文件
voidcreateFile(charfileName[],intlength)
//inti,j;
time_trawtime;
intstartPos;
UFD*fileNode,*p;
for(p=userTable[userID].user->
p!
=NULL;
p=p->
next)
strcmp(p->
file->
fileName,fileName))
文件重名,创建文件失败\n"
//system("
return;
if(requestDist(startPos,length))
fileNode=(UFD*)malloc(sizeof(UFD));
fileNode->
file=(fileTable*)malloc(sizeof(fileTable));
//这一步必不可少,因为fileNode里面的指针也需要申请地址,否则fileNode->
file指向会出错
strcpy(fileNode->
fi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 文件系统