操作系统文件系统实验.docx
- 文档编号:3245448
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:38
- 大小:151.46KB
操作系统文件系统实验.docx
《操作系统文件系统实验.docx》由会员分享,可在线阅读,更多相关《操作系统文件系统实验.docx(38页珍藏版)》请在冰豆网上搜索。
操作系统文件系统实验
实验四文件系统实验
一.实验题目:
文件系统实验
二.实验目的:
阅读并调试一个简单的文件系统,模拟文件管理的工作过程。
从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。
了解设计一个n个用户的文件系统,每个用户可以保存M个文件。
用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有create、delete、open、close、read、write等命令.
三.实验设备及环境:
1.硬件设备:
PC机一台
2.软件环境:
安装Windows操作系统,C语言软件。
四.实验内容及要求:
在阅读所给文件系统源程序的基础上,画出其实现的详细流程图,并给出有关的数据结构和说明。
五.实验方法内容
1.算法流程图
(1)简单文件系统实验流程图
(2)voidExecute(inti,intlen,intcmdset)执行命令函数流程图
Y
N
Y
(3)创建文件
(4)写文件流程图
(5)修改文件执行权限
Y
(6)删除用户注册信息或文件
2.主要的常量变量
charcmd[64];//存放用户输入命令
charbuffer[36];
charuser[32];//存放当前登陆的用户名
typedefcharALFA[12];
ALFAKWORD[keynum];
structUFD{//用户文件管理模块
charfilename[32];//文件名
intsafecode;//文件保护码
longlength;//文件长度
}*curfile=NULL;
structMFD{//用户登陆信息管理模块
charusername[32];//用户名
boolfilepoint;//用户目录下的文件指针,false表示目录为空,true为该用户目录中有文件
}*curuser=NULL,*elseuser=NULL;
typedefUFDUFD;
typedefMFDMFD;
3.主要模块
voidKeyWord()//初始化命令关键字
intLoginDisplay()//登陆选项操作函数
boolLogin(intSELETE)//用户登陆,注册函数
voidDisplayUFD()//打印用户信息,包括用户的各个文件
//名称、长度和操作权限的设置信息
voidByeFile(boolBOOL)//注销函数,调用次函数用户可以退出系统
boolClearUserFile()//用户要将自己的注册目录从系统彻底删除
//首先将该用户目录下的全部文件删除
voidClearUserMes()//删除用户全部信息
voidCreatFile()//在当前用户目录下创建文件
voidDeleteFile()//删除当前目录下一个文件的操作
voidListAllFile()//显示当前用户目录下的文件信息
boolQueryModElse(boolBOOL,bool&flag)//查询其它用户目录下文件的文件
//当该文件的权限允许当前用户对其执行有关操作时,返回ture
boolQueryMod(boolBOOL)//查询权限
boolWriteRight(intlen,boolBOOL)//查看是否已经正确地写入到该文件信息中
voidWriteLengthToFile(intLen,boolBOOL)//将文件长度写入文件管理模块中
voidWriteFile()//向文件写入信息的操作
voidReadFile()//读文件函数
voidChangeMod()//修改某文件的执行权限
voidExecute(inti,intlen,intcmdset)//执行命令函数
voidCommand()//读取用户输入的命令,并将其转换成系统能识别的命令
voidmain()
4.代码
/*****************************************************************
*文件名:
Simple_file_system.c
*功能:
简单文件管理系统模拟程序
*******************************************************************/
#include
#include
#include
#include
#include"conio.h"
#include
#defineNULL0
#definekeynum10
#definegetspace(type)(type*)malloc(sizeof(type))
charcmd[64];//存放用户输入命令
charbuffer[36];//
charuser[32];//存放当前登陆的用户名
typedefcharALFA[12];
ALFAKWORD[keynum];
//------------------------------------------------------------------------------------------------
structUFD{//用户文件管理模块
charfilename[32];//文件名
intsafecode;//文件保护码
longlength;//文件长度
}*curfile=NULL;
//------------------------------------------------------------------------------------------------
structMFD{//用户登陆信息管理模块
charusername[32];//用户名
boolfilepoint;//用户目录下的文件指针,false表示目录为空,true为该用户目录中有文件
}*curuser=NULL,*elseuser=NULL;
typedefUFDUFD;
typedefMFDMFD;
voidmain();
//------------------------------------------------------------------------------------------------
voidKeyWord()//初始化命令关键字
{
strcpy(KWORD[1],"bye");strcpy(KWORD[2],"chmod");
strcpy(KWORD[3],"close");strcpy(KWORD[4],"create");
strcpy(KWORD[5],"delete");strcpy(KWORD[6],"list");
strcpy(KWORD[7],"open");strcpy(KWORD[8],"read");
strcpy(KWORD[9],"write");
}
//------------------------------------------------------------------------------------------------
intLoginDisplay()//登陆选项操作函数
{
intSELETE_1=0;
do
{
cout<<"*****请选择操作*****\n1、用户登陆2、用户注册0、退出"< cin>>SELETE_1; }while(SELETE_1<0||SELETE_1>2); system("cls"); returnSELETE_1; } //------------------------------------------------------------------------------------------------ boolLogin(intSELETE)//用户登陆,注册函数 { FILE*fp,*fp1,*fp2; charname[12]; switch(SELETE) { case1: //用户登陆 if((fp=fopen("LOGIN.exe","rb"))==NULL)//打开用户注册目录管理文件 { cout<<"\n错误: 不能打开登陆文件。 "< getch();system("cls"); returnfalse; } curuser=getspace(MFD); cout<<"\n*****登陆*****\n用户名: "; cin>>name;//输入用户登陆名 while(! feof(fp))//检查该用户是否合法 { fread(curuser,sizeof(MFD),1,fp); if(strcmp(curuser->username,name)==0) break; } if(feof(fp))//如果没有找到跟当前登陆用户名相同的管理信息,提示出错 { cout<<"\n错误: 该用户不存在。 "< fclose(fp); returnfalse; } else { fclose(fp); returntrue; } break; case2: //新用户注册 if((fp=fopen("LOGIN.exe","ab"))==NULL)//如果登陆信息管理文件不存在 fp=fopen("LOGIN.exe","wb+");//创建该信息管理文件 charname[12]; curuser=getspace(MFD); while (1) { cout<<"\n*****新用户注册*****"< cout<<"用户名: "; cin>>name;//输入用户注册名 fp1=fopen("LOGIN.exe","rb"); while(! feof(fp1))//查看该用户名是否被别的用户占用 { fread(curuser,sizeof(MFD),1,fp1); if(strcmp(curuser->username,name)==0)//该名称已经被使用 { cout<<"\n该用户已经存在,请重新输入! "< getch(); break; } } if(feof(fp1))//该名称没有被别的用户占用 { strcpy(curuser->username,name); curuser->filepoint=NULL; fwrite(curuser,sizeof(MFD),1,fp); strcpy(user,curuser->username);//生成用户文件管理模块 strcat(u
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 文件系统 实验