typedef struct afd{//AFD结构体 char filename[20];//文件名 int protect;//文件保护码 unsigned int point;//文件读写指针 struct afd *next; }AFD;
MDF *pmdf;//全局链表头指针 UFD *pufd; AFD *pafd;
char UserUFD[20];//已经登陆成功的用户名
void initMDF()//初始化MDF表 { FILE *fp; pmdf= (MDF*)malloc(sizeof(MDF)); MDF *p = pmdf; if((fp = fopen(\打开MDF文件 puts(\ exit(1); } while (!feof(fp)){//把MDF文件中的内容装入链表 p->next = (MDF*)malloc(sizeof(MDF)); p = p->next; fscanf(fp, \ fscanf(fp, \ } p->next = NULL; fclose(fp); }
void printUFD()//打印MDF表 { UFD *p = pufd->next; puts(\文件名\\t\\t保护码\\t\\t文件长度\\n\ while (p){ printf(\ printf(\ printf(\ p=p->next; }
}
void initUFD(char *name)//初始化UFD表 { FILE *fp; pufd= (UFD*)malloc(sizeof(UFD)); UFD *p = pufd; if((fp = fopen(name, \ puts(\ exit(1); } while (!feof(fp)){//建立UFD链表 p->next = (UFD*)malloc(sizeof(UFD)); p = p->next; fscanf(fp, \ fscanf(fp, \ fscanf(fp, \ fgetc(fp); } p->next = NULL; fclose(fp); }
int checkuser()//检测登陆的用户名 { char username[20]; while(1){ puts(\请输入用户名: \\n\ scanf(\ MDF *p = pmdf; while(p){ if(strcmp(username, p->username) == 0){ strcpy(UserUFD, p->filename); initUFD(p->filename); printUFD(); return 1; } p= p->next; } puts(\同户名不存在\\n\
} }
void initAFD()//初始化AFD { pafd = (AFD*)malloc(sizeof(AFD)); pafd->next = NULL; }
bool create()//创建文件命令 { char filename[20]; UFD *p = pufd->next; AFD *pa = pafd; puts(\请输入要创建的文件名: \\n\ scanf(\ while (p){ if(strcmp(filename, p->filename) == 0){ puts(\此文件已经存在了!\\n\ return 0; } if(!p->next) break; p= p->next; } p->next = (UFD*)malloc(sizeof(UFD)); p=p->next; strcpy(p->filename, filename); p->protect = 2; p->length = 0; p->next = NULL; while(pa->next){//创建文件后加入到AFD pa=pa->next; } pa->next = (AFD*)malloc(sizeof(AFD)); pa = pa->next; strcpy(pa->filename ,filename); pa->protect = 2; pa->point = 0; pa->next = NULL;
return 1; }
bool _delete()//删除文件命令 { char filename[20]; puts(\请输入要删除的文件名: \\n\ scanf(\ UFD *p = pufd; UFD *temp; while (p->next){ if(strcmp(filename, p->next->filename) == 0){ temp = p->next; p->next = p->next->next; free(temp); printf(\文件%s删除成功!\\n\ return 1; } p= p->next; } puts(\要删除的文件不存在!\\n\ return 0; }
bool open()//打开文件命令 { char filename[20]; unsigned int protect; puts(\请输入要打开的文件名: \\n\ scanf(\ puts(\请输入要打开的文件保护类型: \\n\ scanf(\ UFD *p = pufd->next; AFD *pa = pafd->next; while (pa){ if(strcmp(filename, pa->filename) == 0){ printf(\文件%s已经打开!\\n\ return 1; } if(!pa->next) break;
pa = pa->next; } if(!pa) pa=pafd; while (p){ if(strcmp(filename, p->filename) == 0){ pa->next = (AFD*)malloc(sizeof(AFD)); pa = pa->next; strcpy(pa->filename , p->filename); pa->protect = protect; if(protect == 1) pa->point = 0; else pa->point = p->length; pa->next=NULL; printf(\文件%s已经打开!\\n\ return 1; } p= p->next; } puts(\要打开的文件不存在!\\n\ return 0; }
void close()//关闭文件命令 { char filename[20]; UFD *pu = pufd->next; puts(\请输入要关闭的文件名: \\n\ scanf(\ AFD *p = pafd; AFD *temp; while (p&&p->next){ if(strcmp(filename, p->next->filename) == 0){ temp = p->next; p->next = p->next->next; if(temp->protect == 2){ while(pu){ if(strcmp(temp->filename, pu->filename) == 0){ pu->length =temp->point; break;