📄 模拟磁盘.cpp
字号:
#include "disk.h"
extern disk DISK;
disk::disk_open(fstream i){
iof=i;
}
disk::disk(){}
void disk::format(){
char *disktemp=new char[1048576];
for(int k=0;k<1048576;k++)
disktemp[k]=0x0;
for(int i=1;i<=1024;i++){
disktemp[i*1024-1]=block_end;
disktemp[i*1024-2]=block_end;
disktemp[i*1024-3]=block_end;
disktemp[i*1024-4]=block_end;
}
for(i=0;i<100;i++)
iof.write(disktemp,1048576);
}
/*int disk::buffer_readbyname(char*name){
char dir_item[16];
iof.read(dir_item,16);
int inode_num;
while(dir_item[15]!=block_end){
inode_num=int(dir_item[14])*(int)pow(2,8)+int(dir_item[15]);
dir_item[14]='\0';
if(!strcmp(dir_item,name))break;
iof.read(dir_item,16);
}
if(dir_item[15]==block_end){
return -1;
}
return inode_num;
}*/
void disk::block_to_buffer(int block_num,int buffer_location){
iof.seekg(block_num*1024+buffer_location,ios::beg);
}
/*
void disk::buffer_readname(){
char dir_item[16];
iof.read(dir_item,16);
while(dir_item[15]!=block_end){
dir_item[14]='\0';
cout<<"filename:"<<dir_item<<endl;
iof.read(dir_item,16);
}
}*/
void disk::installfilesystem(){
iof.seekp(0,ios::beg);
bootblock bb;
iof.write((char*)&bb,sizeof(bootblock));
superblock_disk sb;
iof.write((char*)&sb,sizeof(superblock));
freebitmap fb(DISK.iof);
for(int i=0;i<64;i++)
fb.freebitmap_set(i);//由boot块到inodelist_disk块共用了64块
///////////////////装根目录
int k=fb.freebitmap_applyfor();
fb.freebitmap_set(k);
inode itemp;
itemp.inode_ini();
itemp.address[0]=k;
itemp.file_size=2;
itemp.inode_num=0;
itemp.extend3=0;
itemp.extend4=0;
inodelist_disk ild(DISK.iof);
int j=ild.inodelist_disk_applyfor();
ild.inodelist_disk_write(j,itemp);//根据inode号写表
///////////////////////
folder ftemp(DISK.iof,itemp);
ftemp.folder_makedir();
}
////test1 inode 0写进与inode 0输出一不一样
/////测试当前路径
/////测试openfilemanager
/////测试folderapplyfor
/////测试用户平台的makedir指令
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -