操作系统实验报告
dir_buf[i].name=\ } for(int i=0;i /*此函数用于装载虚拟硬盘的数据*/ bool install(void){ /**函数声明**/ inode * getInode(unsigned int);//获取指定inode号的inode单元 bool getDataBlock(unsigned int);//获取指定数据块号下的目录或文件 int i; cout<<\ f_stream = fopen (diskName, \只读方式打开硬盘模拟文件 if(f_stream==NULL) { } cout<<\文件打开失败\return 0; //读超级块 fseek(f_stream,BLOCK_SIZE,SEEK_SET); fread(&superBlock,sizeof(struct super_block),1,f_stream); ////// cout<<\加载超级块:\inode_temp=new inode; if(!inode_temp) { cout<<\内存分配失败!\ return 0; } cur_inode=new inode; if(!cur_inode) { cout<<\内存分配失败!\ return 0; 21 操作系统实验报告 } //读取inode 位示图 fseek(f_stream,BLOCK_SIZE*2,SEEK_SET); fread(di_bitmap,BLOCK_SIZE,1,f_stream); cout<<\加载inode位示图:\//读取block 位示图 fseek(f_stream,BLOCK_SIZE*3,SEEK_SET); fread(bk_bitmap,BLOCK_SIZE,1,f_stream); cout<<\加载block位示图:\//读取账户信息的inode inode_temp=getInode(1); if(inode_temp==NULL) { cout<<\加载账户信息失败!\ return false; } //changeinode();//交换指针后 cur_inode 指向当前目录的 inode //读取账户信息 cout<<\账户信息块号:\ fseek(f_stream,DATA_START+BLOCK_SIZE*inode_temp->di_block,SEEK_SET); fread(account,BLOCK_SIZE,1,f_stream); cout<<\加载账户信息:\for(i=0;i cur_inode=getInode(0);//读取主目录的inode 当前inode指向主目录的inode if(cur_inode->di_mode!=0) { cout<<\读取主目录失败,请重新格式化!\} else 22 操作系统实验报告 } { } //将主目录读入cur_dir数组 getDataBlock(cur_inode->di_block); return true; /*此函数用于用户登陆*/ void login(){ } /*此函数用于显示功能菜单*/ void showMenu(void){ } cout<<\显示命令帮助\\n\ cout<<\文件名]\\t创建文本文件\\n\cout<<\目录名]\\t创建文件夹\\n\cout<<\文件名]\\t读取一个文件\\n\cout<<\文件名]\\t编辑一个文件\\n\ cout<<\目录名]\\t进入子目录或者上级目录\\n\cout<<\文件名]\\t显示该文件的属性\\n\cout<<\文件名]\\t删除文件\\n\ cout<<\显示当前目录下的文件和文件夹\\n\cout<<\文件名]\\t重命名\\n\cout<<\注销\\n\cout<<\退出系统\\n\ /**此函数用于用户选择功能并执行**/ bool onAction(){ void showMenu(); void showDir(); void logout(); void createFile(string str);//创建一个文件 void createDir(string str); void editFile(string str); void visit(string str); void attrib(string str); void Delete(string str);//删除一个文件 void rename(string str); bool read(string filename);//此函数用于读取一个文件 inode * getInode(unsigned int); fflush(stdin); 23 操作系统实验报告 while(true){ fflush(stdin); char str[20];//用户输入的命令 char name[20];//文件或者目录名 string namestr; cin>>str; // cout<<\// cout<<\测试:\if(strcmp(str,\ fclose(f_stream); return false; } else if(strcmp(str,\ showDir();//显示当前文件夹下的所有文件和文件夹 } else if(strcmp(str,\ showMenu(); //显示功能菜单 } else if(strcmp(str,\ logout();//注销 } else if(strcmp(str,\ cin>>namestr; createFile(namestr); } else if(strcmp(str,\ cin>>namestr; createDir(namestr);//创建文件夹 } else if(strcmp(str,\ cin>>name; read(name);//读文件 } else if(strcmp(str,\ cin>>name; editFile(name);//编辑文件 } else if(strcmp(str,\ 24 操作系统实验报告 cin>>name; visit(name);//目录访问 } else if(strcmp(str,\ cin>>name; attrib(name);//显示该文件的属性 } else if(strcmp(str,\ cin>>name; Delete(name);//删除文件 } else if(strcmp(str,\ cin>>name; rename(name);//重命名 } /**测试**/ else if(strcmp(str,\ int i; cin>>i; getInode(i);//查看inode } /*****/ else cout< /**此函数用于显示当前目录下所有文件和文件夹信息**/ void showDir(void){ cout<<\} /**此函数用于注销用户**/ void logout(void){ cout<<\} /**此函数用于创建文件夹**/ void closeFile(string str){ cout<<\} /**此函数用于编辑文件**/ void editFile(string str){ 25