操作系统文件系统实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四文件系统实验
一.实验题目:
文件系统实验
二.实验目的:
阅读并调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。
了解设计一个n个用户的文件系统,每个用户可以保存M个文件。用户在一次运行中只能打开一个文
件,对文件必须设置保护措施,且至少有create、delete、open、close、read、write等命令.
三.实验设备及环境:
1. 硬件设备:PC机一台
2. 软件环境:安装Windows操作系统,C语言软件。
四.实验内容及要求:
在阅读所给文件系统源程序的基础上,画出其实现的详细流程图,并给出有关的数据结构和说明。
五. 实验方法内容
1.算法流程图
(2)void Execute(int i,int len,int cmdset)执行命令函数流程图
(3)创建文件
(4)写文件流程图
(5)修改文件执行权限
(6
2.主要的常量变量
char cmd[64]; //存放用户输入命令
char buffer[36];
char user[32];//存放当前登陆的用户名
typedef char ALFA[12];
ALFA KWORD[keynum];
struct UFD{//用户文件管理模块
char filename[32]; //文件名
int safecode; //文件保护码
long length; //文件长度
}*curfile = NULL;
struct MFD{//用户登陆信息管理模块
char username[32]; //用户名
bool filepoint; //用户目录下的文件指针,false表示目录为空,true为该用户目录中有文件
}*curuser = NULL,*elseuser=NULL;
typedef UFD UFD;
typedef MFD MFD;
3.主要模块
void KeyWord()//初始化命令关键字
int LoginDisplay() //登陆选项操作函数
bool Login(int SELETE)//用户登陆,注册函数
void DisplayUFD()//打印用户信息,包括用户的各个文件
//名称、长度和操作权限的设置信息
void ByeFile(bool BOOL)//注销函数,调用次函数用户可以退出系统
bool ClearUserFile()//用户要将自己的注册目录从系统彻底删除
//首先将该用户目录下的全部文件删除
void ClearUserMes()//删除用户全部信息
void CreatFile()//在当前用户目录下创建文件
void DeleteFile() //删除当前目录下一个文件的操作
void ListAllFile()//显示当前用户目录下的文件信息
bool QueryModElse(bool BOOL,bool &flag)//查询其它用户目录下文件的文件
//当该文件的权限允许当前用户对其执行有关操作时,返回ture
bool QueryMod(bool BOOL)//查询权限
bool WriteRight(int len,bool BOOL)//查看是否已经正确地写入到该文件信息中
void WriteLengthToFile(int Len,bool BOOL)//将文件长度写入文件管理模块中
void WriteFile()//向文件写入信息的操作
void ReadFile()//读文件函数
void ChangeMod()//修改某文件的执行权限
void Execute(int i,int len,int cmdset)//执行命令函数
void Command()//读取用户输入的命令,并将其转换成系统能识别的命令
void main()
4.代码
/***************************************************************** * 文件名: Simple_file_system.c
* 功能: 简单文件管理系统模拟程序
*******************************************************************/
#include
#include
#include
#include
#include "conio.h"
#include
#define NULL 0
#define keynum 10
#define getspace(type) (type*)malloc(sizeof(type))
char cmd[64]; //存放用户输入命令
char buffer[36];//
char user[32];//存放当前登陆的用户名
typedef char ALFA[12];
ALFA KWORD[keynum];
//------------------------------------------------------------------------------------------------
struct UFD{//用户文件管理模块
char filename[32]; //文件名
int safecode; //文件保护码
long length; //文件长度
}*curfile = NULL;
//------------------------------------------------------------------------------------------------
struct MFD{//用户登陆信息管理模块
char username[32]; //用户名
bool filepoint; //用户目录下的文件指针,false表示目录为空,true为该用户目录中有文件
}*curuser = NULL,*elseuser=NULL;
typedef UFD UFD;
typedef MFD MFD;
void main();
//------------------------------------------------------------------------------------------------
void KeyWord()//初始化命令关键字
{
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");
}
//------------------------------------------------------------------------------------------------
int LoginDisplay() //登陆选项操作函数
{
int SELETE_1 = 0;
do
{
cout<<" *****请选择操作*****\n1、用户登陆 2、用户注册 0、退出"< cin>>SELETE_1; }while(SELETE_1<0 || SELETE_1>2); system("cls"); return SELETE_1; } //------------------------------------------------------------------------------------------------ bool Login(int SELETE)//用户登陆,注册函数 { FILE *fp,*fp1,*fp2; char name[12]; switch(SELETE) { case 1://用户登陆 if((fp = fopen("LOGIN.exe","rb")) == NULL)//打开用户注册目录管理文件 { cout<<"\n错误:不能打开登陆文件。"< getch();system("cls"); return false;