模拟unix文件系统代码(2)

2025-07-16

}

for (int i=0;i

for (int i=0;i

act_inode_list[i]=NULL; sys_list[i]=-1;

//向虚拟磁盘写文件; void write_disk(FILE *fp) { }

//从虚拟磁盘读数据 void read_disk(FILE *fp) {

fp =fopen(\,\); for (int i=0;i

fread(&superblock,sizeof(class super_block),1,fp); for (int i=0;i

fread(inode[i],sizeof(class i_node),1,fp); fread(memory[i],sizeof(class block),1,fp); int i;

fp =fopen(\,\); for (int i=0;i

fwrite(&superblock,sizeof(class super_block),1,fp); for (int i=0;i

fwrite(inode[i],sizeof(class i_node),1,fp); }

for (int i=0;i

fclose(fp);

fwrite(direct[i],sizeof(class dir),1,fp); fwrite(memory[i],sizeof(class block),1,fp);

}

}

for (int i=0;i

fclose(fp);

fread(direct[i],sizeof(class dir),1,fp);

//创建文件

int creat_file(string filename,int cur_dir_id,int mod=0,int style=1) {

}

int k =direct[i]->i_num; //标志目录项中i节点号

direct[i]->file_name =filename;//标记目录项(文件)名称

direct[i]->p_id =cur_dir_id;//标记当前目录(文件)所在目录

inode[k]->file_style=style; //标记file 类型0表示目录1表示文件;//默认为表示创inode[k]->file_length=0;//文件长度 目录项文件长度为0; inode[k]->i_mod=mod;

//创建文件是不分配内存,在写文件时候在分配;

}

for (int i=0;i

if (direct[i]->i_num==-1) //表示此目录项位未被使用; {

for (int j=0;j

if(superblock.i_node_num[j]!=1) {

direct[i]->i_num =j; superblock.i_node_num[j]=1; j=DIR_NUM;

for (int i=0;i

if (direct[i]->p_id==cur_dir_id&&filename == { }

cout<<\文件名\<

direct[i]->file_name&&inode[direct[i]->i_num]->file_style==style)

建文件

}

}

}

if (cur_dir_id!=-1) {

inode[direct[cur_dir_id]->i_num]->file_length++; }

return i;//返回创建后文件的目录项的id

return -1;

//创建目录

int creat_dir(string direct,int cur_dir_id) { }

void display_cur_dir(int cur_dir_id) { }

//初始化root目录 int init_root() {

int cur_dir_id =-1;

return creat_dir(\,cur_dir_id); list temp;

while (cur_dir_id!=-1&&direct[cur_dir_id]->p_id != -1) {

temp.push_front(\+direct[cur_dir_id]->file_name); cur_dir_id=direct[cur_dir_id]->p_id; }

temp.push_front(\+direct[cur_dir_id]->file_name); list::iterator theIterator;

for( theIterator = temp.begin(); theIterator != temp.end(); theIterator++ )

cout << *theIterator; int dir_id;

return dir_id;

{ }

return cur_dir_id;

if ((dir_id=creat_file(direct,cur_dir_id,0,0))== -1)

}

int* allocat(int length) { int *p; }

bool recycle(int *p)//要记得修改superblock bat_map 的块的状态.. { }

//删除文件

bool del_file(string filename,int cur_dir_id) {

for (int i=0;i

int k =direct[i]->i_num; int n=p[MAX_FILE_BLOCKS-1]; if (n>10) { }

{ n=10; } { }

superblock.bat_map[p[i]]='0'; memory[p[i]]->data[j]=0; for (int j=0;j<64;j++)

}

}

p= new int[MAX_FILE_BLOCKS]; for (int j=0;j

{

if (superblock.bat_map[i]=='0') { p[j]=i;

superblock.bat_map[i]='1'; i = MEM_NUM; }

for (int i=0;i

p[MAX_FILE_BLOCKS-1]=length; return p;

for (int i=0;i

return true;

if

(filename==direct[i]->file_name&&inode[k]->file_style==1&&direct[i]->p_id==cur_dir_id)//查找filename 的目录项 }

cout<<\文件\<file_name<<\中!!!!!\<

//删除目录项

bool del_dir(string dir_name,int cur_dir_id) {

for (int i=0;i

int k =direct[i]->i_num; if

{

//判断i节点是不是文件项 //判断找到的目录项是不是当前目录下的文件; }

recycle(inode[k]->file_address); //回收i节点占用的盘块 for (int i=0;i

////////////////////////////// inode[k]->file_length=-1; inode[k]->file_style=-1; superblock.i_node_num[k]=0;

direct[i]->i_num =-1; ///这一段是恢复当前目录项和磁盘i 节点到初direct[i]->file_name=\;

direct[i]->p_id=-1;///////////////////////////// return true;

inode[k]->file_address[i]=-1;

始状态

(direct[i]->file_name==dir_name&&inode[k]->file_style==0&&direct[i]->p_id==cur_dir_id)//判断文件名是否匹配和文件类型是否正确;

{

for (int j=0;j

if (i==direct[j]->p_id) {

cout<<\删除的目录项\<


模拟unix文件系统代码(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:县人民政府机构改革动员会_主持词

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219