文件管理系统源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文件管理系统
一、实验目的
通过设计一个多用户文件系统,了解操作系统中文件的组织与管理,熟悉文件管理所用的数据结构,加深对文件系统内部功能实现过程的理解。
二、实验内容
1.用C语言或C++语言设计一个最多包括N个用户的多用户文件系统,约定每个用户最多保存M个文件。同时限制一个用户在进入系统后,最多打开L个文件。
2.系统应具备一定的健壮性。即能够检查用户所输入命令的正确性,出错时显示出必要的信息。另外,对文件需设置必要的保护措施。
3.文件目录结构采用两级目录结构:主文件目录和用户文件目录
#include"io.h"
#include"conio.h"
#include"stdio.h"
#include"stdlib.h"
#include"malloc.h"
#include"string.h"
#include"ctype.h"
#define N 30 /*用户数*/
#define M 20 /*一个用户可保存M个文件*/
#define L 5 /*用户只能一次打开L个文件*/
typedef struct MFD /*主文件目录*/
{
char username[100];
char password[100];
FILE fp; /*文件指针*/
}MFD;
///////////
typedef struct UFD /*用户文件目录*/
{
char filename[256];
char protect; /*保护码*/
int length; /*文件长度*/
}UFD;
//////////
typedef struct OFD /*打开文件目录*/
{
char filename[256];
char opencode; /*打开保护码*/
int fp; /*读写指针*/
}OFD;
//////////
typedef struct COMM /*命令串*/
{
char string[256]; /*命令*/
struct COMM *next;/*后继指针*/
}COMM;
////////////
MFD mainfd[N]; /*主文件目录数组*/
UFD userfd[M]; /*用户文件目录数组*/
OFD openfd[L]; /*打开文件目录数组*/
////////
COMM*command; /*命令串指针*/
char username[10];
int usernum,savenum,opennum;
int workfile;
void init();
void init_ufd(char *username);/*初始化用户文件目录*/ void mesg(char *str); /*消息*/
char *getpass(); /*设置口令函数声明*/ char *getuser(); /*设置用户函数声明*/ COMM *readcommand(); /*读命令串函数声明*/ void login(); /*用户登录*/
void logout(); /*用户注销*/
void setpass(); /*设置口令*/
void create(); /*创建文件*/
void mydelete(); /*删除文件*/
void myread(); /*读文件*/
void myopen(); /*打开文件*/
void myclose(); /*关闭文件*/
void mywrite(); /*写文件*/
void help(); /*帮助*/
void dir(); /*列文件目录*/
void mycopy(); /*复制文件*/
void myrename(); /*重命名文件名*/
/////////////
void main()
{
init();
for(;;)
{
readcommand();
if(strcmp(command->string,"create")==0)
create();
else if(strcmp(command->string,"delete")==0)
mydelete();
else if(strcmp(command->string,"open")==0)
myopen();
else if(strcmp(command->string,"close")==0)
myclose();
else if(strcmp(command->string,"read")==0)
myread();
else if(strcmp(command->string,"write")==0)
mywrite();
else if(strcmp(command->string,"copy")==0)
mycopy();
else if(strcmp(command->string,"rename")==0)
myrename();
else if(strcmp(command->string,"login")==0)
login();
else if(strcmp(command->string,"setpass")==0)
setpass();
else if(strcmp(command->string,"logout")==0)
logout();
else if(strcmp(command->string,"help")==0)
help();
else if(strcmp(command->string,"dir")==0)
dir();
else if(strcmp(command->string,"exit")==0)
break;
else
mesg("Bad command!");
}
}
///////////////////
void init()
{
FILE *fp;
char tempname[20],temppass[20];
int i=0;
usernum=0;
savenum=0;
opennum=0;
strcpy(username,"");
if((fp=fopen("mainfile.txt","r"))!=NULL)
{
while(!feof(fp))
{