操作系统课程设计--基于Linux的模拟文件系统的设计与实现 - 下载本文

删除目录 开始 遍历i节点否 是待删除目录吗? 是 是空目录吗? 是 否 遍历子目录 子目录为空吗? 是 否 是文件吗? 是 否 否 是空目录吗? 是 删除目录或文件 结束

创建目录

开始 遍历i节点区 要创建的目录是否存在 是 遍历i节点区 否 是否有空的i节点 否 是 分配一个目录i节点 结束

图2.5

10

3详细设计

3.1用户结构 typedef struct user{

char name[10]; Content *con; struct user *next; }User;

本系统可以创建10个用户,用户登陆时只要输入正确便可进入系统,否则提示失败要求重新输入。

do{ printf(\输入新用户名:\\n\ scanf(\ exist=0; head=user->next; while(head!=NULL){ if(strcmp(head->name,name)==0){ exist=1; break; } head=head->next; } if(exist==1) printf(\用户名已存在!\\n请重新输入:\ }while(exist==1); 3.2数据结构说明

a)文件结构链表 struct fnode {

char filename[FILENAME_LENGTH]; int isdir; int isopen;

char content[255]; fnode *parent; fnode *child; fnode *prev; fnode *next; };

11

b)函数介绍

void zengjiayonghu();//增加新用户 void newfile(Content *con);//创建新文件

int display_files(Content *con);//展示所有文件 void dufile(Content *con);//读取文件 void writefile(Content *con);//写入文件 void shanchufile(Content *con);删除文件

void yidongfile(User *u,Content *con);//移动文件 int zhankaiallconcent(User *u);//展示所有文件

void newcontentname(Content *c,char name[]);//更改目录名称 void newconcent(User *u);//增加新目录 void shanchuconcent(User *u);//删除目录

void xiugaiconcentname(User *u);//修改目录名称

void change_filepassword(Content *con);//修改文件保护码 int readall_files(Content *con);//读取所有文件

3.3主要功能的关键代码 a)创建文件

在用户成功的创建目录后,就可以创建文件了,创建新的文件时首先判断文件名是否已经存在,如果存在则提示重新输入,否则提示“请输入文件保护码!”,在输入文件保护码后,将创建新的文件成功。 关键代码:

do{ exist=0; printf(\请输入新文件名:\ scanf(\ strcat(f_name,tail); if(is_exist_file(con->file,f_name)) exist=1; if(exist==1) printf(\文件名已存在!\\n\ }while(exist==1);

printf(\请输入文件保护码:\\n\ scanf(\ q=fopen(f_name,\ fclose(q); while(file->next!=NULL) file=file->next; new_f=(File *)malloc(sizeof(File)); strcpy(new_f->name,f_name); strcpy(new_f->password,password); new_f->next=NULL;

12

}

file->next=new_f; con->filenum++;

printf(\添加文件成功!\\n\

b)读取文件

读取文件即查看文件中的内容,当输入要读取的文件名后,进行判断文件名称是否存在,若存在则打开文件,查看文件的内容,否侧提示“文件名不存在!”,重新选择读取的文件名,进行下一步的操作。 关键代码:

strcat(name,tail); while(file!=NULL){ if(strcmp(name,file->name)==0){ find=1; break; } file=file->next; } if(find==0){ printf(\文件名不存在!\\n\ return; }

c)写入文件

在正常的操作中,用户创建文件主要是保存一些信息;在此系统中,用户创建文件后可以在文件中写入一些内容,发挥文件的作用。首先判断用户输入的文件名是否存在,再判断用户输入的保护码是否正确,正确进入文件后便可以进入文件,进行写操作。 关键代码:

strcat(name,tail); while(file!=NULL){ if(strcmp(name,file->name)==0){ find=1; break; } file=file->next; } if(find==0){ printf(\抱歉,文件名不存在\\n\ return; }

13

do{ printf(\请输入保护码:\ scanf(\ if(strcmp(password,file->password)==0) login=1; if(login==0) printf(\保护码错误!\\n请重新输入:\ }while(login==0); printf(\现在文件已经被打开了...\\n\ write(name); printf(\文件%s写入成功!\\n\

d)移动文件

移动文件是很常用的操作,用户经常整理自己的文件,将一些文件移动到其它的目录下,此操作首先输入要移动的文件的名称,确认用户输入的文件存在后,再输入移动的目标目录,进行判断后将文件移动到此处,并提示“移动成功!”。 关键代码:

do{ exist=1; printf(\请输入你想要移动的文件名:\ scanf(\ strcat(name,tail); if(!is_exist_file(con->file,name)) exist=0; if(exist==0) printf(\该文件名不存在!\\n\ }while(exist==0); printf(\移动中...\\n\ file=con->file; f=file->next; while(f!=NULL){ if(strcmp(f->name,name)==0) break; file=file->next; f=f->next; } temp_f=f; file->next=f->next; printf(\请输入您想要移动到的目标目录名: \ scanf(\ c=u->con; while(c->next!=NULL){ if(strcmp(c->name,c_name)==0) break; c=c->next; } f=c->file;

14