一、设计题目模拟unix文件系统的设计与实现二、设计目的:本课程设计是学习完《操作系统原理》课程后,进行的一次全面的综合训练,通过课程设计,更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强动手能力。通过本课程设计掌握文件系统的工作原理,理解文件系统的主要数据结构。学习较为复杂的Linux或windows下的编程。三、设计要求1、设计一个简单的文件系统,包含格式化、显示文件(目录)、创建文件、登录等几个简单命令的实现,而且能完成超级块的读写、节点的读写等过程。编写一个基本体现文件系统理论的程序。在节点的使用上,主要模仿Linux的EXT2文件系统。2.程序流程参考如下:四、设计思想说明通过c++模拟Linux文件系统,利用系统内存分成文件系统的可用块数。设计用户结构体存放用户系统,创建文件结构体存放文件信息,通过命令可以对创建、删除、登陆用户,对文件有创建、删除、更改、读、写等操作。在存储文件时使用位矢图法。五、文件系统结构的说明六、数据结构的说明//文件或目录struct file{ struct file * parent;//父块指针 struct file * boy;//子块指针 struct file * hou;//同级的前一个指针 struct file * qian;//同级的后一个指针 char name[9];//文件、目录名 char text[disks];//文件内容 int way; int kj; };//用户struct user{ char username[unsize];//用户名 char usepassword[passize];//用户密码 struct file * fumenu;//链表组指针 };struct kz{ struct file * diz; int free; }; struct user yhbiao[usercounts]; struct kz disk[disks]; int yhcount=0; int dangqianyh; int kb; struct file * now; struct file * now2; char iput[20]; char iput2[20]; int over; char load[100];七、程序清单:#include #include #include #define disks 512//定义盘块数#define usercounts 8#define unsize 11#define passize 7extern int begin();extern void command();extern void clearbuf();extern int commandjiexi();extern void files(char *name,int kb);extern void menu(char *name,int kb);extern void fileliebiao();extern void menugaibian(char name[10]);extern int rol(int kb);//文件或目录struct file{ struct file * parent;//父块指针 struct file * boy;//子块指针 struct file * hou;//同级的前一个指针 struct file * qian;//同级的后一个指针 char name[9];//文件、目录名 char text[disks];//文件内容 int way; int kj; };//用户struct user{ char username[unsize];//用户名 char usepassword[passize];//用户密码 struct file * fumenu;//链表组指针 };struct kz{ struct file * diz; int free; }; struct user yhbiao[usercounts]; struct kz disk[disks]; int yhcount=0; int dangqianyh; int kb; struct file * now; struct file * now2; char iput[20]; char iput2[20]; int over; char load[100];//主函数void main() { char *ipnut; int i,tui,j; int cs; cs=begin(); if (cs==0) cout<<"n Welcome to my UNIX Files System ! n"; else {ipnut=(char *)malloc(sizeof(char)*8); biao: //主界面 cout<< "n"; cout<<" creat menu: md menu's name ** creat file: creat file's name n"; cout<<" show menu: dir ** open file: open file's name n"; cout<<" change menu: cd dirname ** close file: close file's name n"; cout<<" back menu: cd .. ** write file: write file's name n"; cout<<" delete menu: rm dirname ** read file: read file's name n"; cout<<" login: login ** delete file: del file's name n"; cout<<" register: register ** change user: exit n"; cout<<" logout: logout ** for hlp: hlp n"; cout<< "n"; cout<< "n"; cout<< "n Please input Command: " ; do { cin>>ipnut ; if(strcmp(ipnut,"register")==0)//判断输入的是否为注册的命令 { kb=1; rol(kb); goto biao; } else if(strcmp(ipnut,"login")==0)//判断登陆的是否为登陆命令 {kb=0; if( rol(kb) == 1) goto biao; break; } else if(strcmp(ipnut,"logout")==0) goto biao2; else {cout<<"n Wrong command ! n";goto biao;} }while( 1 ) ; do { tui=commandjiexi(); if(tui == 1 ) break; if (tui==2) goto biao; }while(1) ; biao2:; } }int begin(){ int i,j; for(i=0;i