操作系统实验报告 文件管理系统 源程序 下载本文

内容发布更新时间 : 2024/5/8 6:03:34星期一 下面是文章的全部内容请认真阅读。

操作系统实验报告

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