内容发布更新时间 : 2025/6/21 21:27:53星期一 下面是文章的全部内容请认真阅读。
操作系统实验报告
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