二级目录文件系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
// 新二级文件管理系统.cpp : Defines the entry point for the console application. //
#include "stdafx.h"
#include
#include
#include
#include
#include
#define MaxUser 20 //定义最大MDF主目录文件
#define MaxDisk 512*1024 //模拟最大磁盘空间
#define commandAmount 8 //对文件操作的指令数
//存储空间管理有关结构体和变量
char disk[MaxDisk]; //模拟512K的磁盘存储空间
typedef struct distTable //磁盘块结构体
{
int maxlength;//磁盘最大长度
int start;//磁盘起始地址
int useFlag;//磁盘是否使用的标志
distTable *next;
}diskNode;
diskNode *diskHead;//磁盘节点头指针
struct fileTable //文件块结构体
{
char fileName[10];//文件名
int strat; //文件在磁盘存储空间的起始地址
int length; //文件内容长度
int maxlength; //文件的最大长度
char fileKind[3]; //文件的属性——读写方式
struct tm *timeinfo;//时间类型的指针,为了获取文件创建的时间而设置bool openFlag; //判断是否有进程打开了该文件
//fileTable *next;
};
//两级目录结构体
typedef struct user_file_directory //用户文件目录文件UFD
{
//char fileName[10];
fileTable *file;
user_file_directory *next;
}UFD;
//UFD *headFile;
typedef struct master_file_directory //主文件目录MFD
{
char userName[10];
char password[10];
UFD *user;
}MFD;
MFD userTable[MaxUser];
int used=0; //定义MFD目录中用已有的用户数
//文件管理
void fileCreate(char fileName[],int length,char fileKind[]); //创建文件
void fileWrite(char fileName[]); //写文件
void fileRead(char fileName[]); //读文件
void fileDir(char UserName[]); //显示某一用户的所有文件
void fileClose(char fileName[]); //关闭已打开的文件
void fileDel(char fileName[]); //删除文件
int requestDist(int &startPostion,int maxLength); //磁盘分配查询
void initDisk(); //初始化磁盘
void freeDisk(int startPostion); //磁盘空间释放
void diskShow(); //显示磁盘使用情况
//用户管理
void userCreate();
int login();
int userID=-1; //用户登录的ID号,值为-1时表示没有用户登录
//主函数
int main()
{
char order[commandAmount][10];//定义一个指令二维数组,指令长度不能超过10 strcpy(order[0],"create");
strcpy(order[1],"del");
strcpy(order[2],"read");
strcpy(order[3],"write");
strcpy(order[4],"dir");
strcpy(order[5],"close");
strcpy(order[6],"return");
strcpy(order[7],"exit");
char
command[50],command_str1[10],command_str2[10],command_str3[5],command_str4[3];
int i,k,j;
int length;
initDisk(); //初始化磁盘
for(i=0;i { userTable[i].user=(UFD *)malloc(sizeof(UFD)); userTable[i].user->next=NULL; } while(1) { printf("********************************************\n"); printf(" 欢迎进入系统\n"); printf(" \n"); printf(" 1、Creat user\n"); printf(" \n"); printf(" 2、login\n"); printf("********************************************\n"); printf("Please chooce the function key:>"); int choice; scanf("%d",&choice); if(choice==1) userCreate(); else if(choice==2) userID=login(); else printf("您的输入有误,请重新选择\n"); while(userID!=-1) { fflush(stdin); printf("———————————————————————————————————————\n"); printf(" create-创建格式:create a1 1000 rw---将创建名为a1,长度为1000字节可读可写的文件\n"); printf(" del-删除格式:del a1---将删除名为a1的文件\n"); printf(" read-查看文件内容格式:read a1---显示a1的内容\n"); printf(" write-写入格式:write a1\n"); printf(" dir-显示文件格式:dir aaa---将显示aaa用户的所有文件\n"); printf(" close-关闭文件格式:close a1---将关闭文件a1\n"); printf(" return-退出用户,返回登录界面\n"); printf(" exit-退出程序\n"); printf("————————————————————————————————————————\n"); printf("please imput your command:>"); gets(command); int select; for(i=0;command[i]!=' '&&command[i]!='\0';i++) //command_str1