📄 wi.cpp
字号:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define N 2 //用户可同时管理文件个数
#define L 5 //用户最多在磁盘上保存个数
#define S 3 //用户可同时打开或建立文件个数
#define M 100 //磁盘中有空闲块个数
struct node{ //空闲块结构体
int addr; //空闲块地址
char c; //空闲块内容
struct node *n_next; //空闲块链指针
}nod[M],*nod_str[M];
struct ufd{ //用户文件结构体
char f_name[10]; //文件名
char f_attr[3]; //文件属性
int re_len; //记录长度
struct node *n_next; //文件地址指针
struct ufd *d_next; //用户文件目录链指针
}*ufd_tail[N],uf[N*L],*uf_str[N*L];
struct uof{ //用户打开文件结构体
char f_name[10]; //文件名
char f_attr[3]; //文件属性
int re_len; //记录长度
char status; //状态
struct node *r_poi;//读指针
struct node *w_poi; //写指针
struct uof *f_next; //用户打开文件目录表链指针
}*uof_tail[N],uo[N*S],*uo_str[N*S];
struct mfd{ //主文件目录结构体
char u_name[15]; //用户名
struct ufd *d_next; //UFD链首指针
struct uof *f_next; //UOF链首指针
int uof_len; //UOF长度
int ufd_len; //UFD长度
}mfd[N];
char order[30]; //指令数组
int ip; //用户名对应的号
int jp; //指令数组中的指针
int uf_sp; //可用用户文件指针
int uo_sp; //可用已打开文件指针
int nod_sp; //可用空闲块指针
void init_str(); //初始化磁盘空闲块数组
void init_mfd(); //初始化主文件目录表
void init_ufd_uof(); //初始化用户文件目录和用户已打开文件目录表
int create_f(); //创建文件
int open_f(); //打开文件
int close_f(); //关闲文件
int read_f(); //读文件操作
int write_f(); //写文件操作
int delete_f(); //撤消文件操作
int help(); //帮助
void main(){
int i,key1=0,key2; //key为开关变量
//key1为0表示继续循环,而key1为1表示退出循环
//key2为0表示继续使用该用户,否则返回到上层选择另外的用户
char u_name[15],operate[7];
printf("\n");
printf("\n\n");
printf(" 可用指令:help,create,open,read,write,close,delete,cd..\n\n");
for(i=0;i<8;i++)
printf("========");
printf("\n\n");
for(i=0;i<N*L;i++)
uf_str[i]=&uf[i];
uf_sp=N*L-1; //初始化可用文件指针
for(i=0;i<N*S;i++)
uo_str[i]=&uo[i];
uo_sp=N*S-1; //初始化已打开文件指针
for(i=0;i<M;i++)
nod_str[i]=&nod[i]; //初始化空闲块指针
printf("查找磁盘中的空闲块号!\n");
init_str();
printf("\n\n初始化主文件目录表!\n");
init_mfd();
printf("\n\n初始化用户文件目录表和用户已打开文件目录表!\n");
init_ufd_uof();
while(key1!=1){
key2=0;
printf("\n\n请输入用户名:");
scanf("%s",u_name);
for(ip=0;ip<N;ip++)
if(strcmp(mfd[ip].u_name,u_name)==0)
break;
if(ip>=N)
printf("无此用户!\n");
else{
while(key2!=1){
printf("请输入命令:");
scanf("%s",order);
i=0;
jp=0;
while(order[jp]!='(' && i<6 && order[jp]!='\0' && order[jp]!='-')
operate[i++]=order[jp++];
operate[i]='\0';
printf("正在分析指令!\n");
if(strcmp(operate,"create")==0){
printf("正在创建文件!\n");
create_f();
}
else
if(strcmp(operate,"open")==0){
printf("正在打开文件!\n");
open_f();
}
else
if(strcmp(operate,"close")==0){
printf("正在关闭文件!\n");
close_f();
}
else
if(strcmp(operate,"read")==0){
printf("正在读文件!\n");
read_f();
}
else
if(strcmp(operate,"write")==0){
printf("正在写文件!\n");
write_f();
}
else
if(strcmp(operate,"delete")==0){
printf("正在撤消文件!\n");
delete_f();
}
else
if(strcmp(operate,"cd..")==0 && order[i]=='\0'){
printf("正在返回上层管理!\n");
key2=1;
printf("\n");
}
else
if(strcmp(operate,"end")==0 && order[i]=='\0'){
printf("正在退出文件管理!\n");
key1=1;
key2=1;
printf("\n");
printf("\n\n");
for(i=0;i<8;i++)
printf("========");
printf("\n\n");
printf(" 退出成功!感谢你使用本程序!\n\n");
for(i=0;i<8;i++)
printf("========");
printf("\n\n");
}
else
if(strcmp(operate,"help")==0){
printf("正在打开帮助文件!\n");
help();
}
else printf("输入命令有误!\n");
}//while
} //else
} //while
} //main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -