⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wi.cpp

📁 文件系统
💻 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 + -