📄 file.h
字号:
unsigned short search_file(unsigned short Ino)//在打开文件表中查找是否已打开文件
{
unsigned short fopen_table_point=0;
while(fopen_table_point<16&&fopen_table[fopen_table_point++]!=Ino);
if(fopen_table_point==16)return 0;
return 1;
}
////
void read_file(char tmp[9])//读文件
{
unsigned short flag,i,j,k,m=0,n=0,num1,num2;
flag=reserch_file(tmp,1,&i,&j,&k); //返回文件目录项的信息
if(flag)
{
if(search_file(i))
{
reload_inode_entry(i);
if(!(inode_area[0].i_mode&4))//i_mode:111b:读,写,执行
{
printf("The file %s can not be read!\n",tmp);
return;
}
if(inode_area[0].i_blocks<7)
{ //printf("\n\n\n\n\n\n\n\%d\n\n\n\n",inode_area[0].i_blocks);
//for(n=0;n<6;n++)printf(" %d ",inode_area[0].i_block[n]);
for(m=0;m<inode_area[0].i_blocks;m++)
{
reload_block(inode_area[0].i_block[m]);
Buffer[512]='\0';
printf("%s",Buffer);
}
}
else if(inode_area[0].i_blocks>=7&&inode_area[0].i_blocks<263)
{ //printf("\n\n\n\n\n\n\n\%d\n\n\n\n",inode_area[0].i_blocks);
//for(n=0;n<6;n++)printf(" %d ",inode_area[0].i_block[n]);
for(m=0;m<6;m++)
{
reload_block(inode_area[0].i_block[m]);
Buffer[512]='\0';
printf("%s",Buffer);
}
//printf("\n\n\n\n\n\n\n\%d\n\n\n\n",m);
memset(index_buf,'\0',sizeof(index_buf));
reload_index_block(inode_area[0].i_block[6]);
for(;m<inode_area[0].i_blocks;m++)
{
reload_block(index_buf[m-6]);
Buffer[512]='\0';
printf("%s",Buffer);
//printf("\n\n\n\n\n\n\n\%d\n\n\n\n",m);
}
//for(m=6;m<inode_area[0].i_blocks;m++)printf(" %d ",index_buf[m-6]);
}
else if(inode_area[0].i_blocks>=263&&inode_area[0].i_blocks<=3837)
{
if(inode_area[0].i_blocks==263)reload_index1_block(inode_area[0].i_block[7]);
for(num1=0;num1<=(inode_area[0].i_blocks-262)/512;num1++)//index_buf1[num1]
{
reload_index_block(num1);
for(num2=0;num2<=(inode_area[0].i_blocks-262)%512;num2++)
{
reload_block(index_buf[num2]);
Buffer[512]='\0';
printf("%s",Buffer);
}
}
}
else printf("The max size of file is 2MB\n");
if(flag==0)printf("The file %s is empty!\n",tmp);
}
else printf("The file %s has not been opened!\n",tmp);
}
else printf("The file %s not exists!\n",tmp);
}
////
void write_file(char tmp[9])//写文件
{
unsigned short flag,i,j,k,success,m=0,num1,num2,t1,t2,t3;
unsigned long size=0;
flag=reserch_file(tmp,1,&i,&j,&k);
if(flag)
{
if(search_file(dir[k].inode))
{
reload_inode_entry(dir[k].inode);
if(!(inode_area[0].i_mode&2))//i_mode:111b:读,写,执行
{
printf("The file %s can not be writed!\n",tmp);
return;
}
//if(i_blocks)
if(inode_area[0].i_blocks<=6)
{
while(m<inode_area[0].i_blocks)remove_block(inode_area[0].i_block[m++]);
}
else if(inode_area[0].i_blocks>6&&inode_area[0].i_blocks<=262)
{
m=0;
while(m<6)remove_block(inode_area[0].i_block[m++]);
memset(index_buf,'\0',sizeof(index_buf));
reload_index_block(inode_area[0].i_block[6]);
while(m<inode_area[0].i_blocks)
{
//printf("%d\n",m);
remove_block(index_buf[m-6]);
m++;
}
}
inode_area[0].i_blocks=0;
while(1)
{
buf[size]=getchar();
if(buf[size]=='#')break;
size++;
if(size==512)
{
if(inode_area[0].i_blocks<6)
{ success=inode_area[0].i_block[inode_area[0].i_blocks]=alloc_block();
if(success==0)
{
printf("write file failed\n");
return ;
}
memcpy(Buffer,buf,BLOCK_SIZE);
Buffer[512]='\0';
update_block(inode_area[0].i_block[inode_area[0].i_blocks]);
inode_area[0].i_blocks++;
}
else if(inode_area[0].i_blocks>=6&&inode_area[0].i_blocks<262)
{
if(inode_area[0].i_blocks==6)
{ success=inode_area[0].i_block[6]=alloc_block();
memset(index_buf,'\0',sizeof(index_buf));
if(success==0)
{
printf("write file failed\n");
return ;
}
}
index_buf[(inode_area[0].i_blocks)-6]=alloc_block();
memcpy(Buffer,buf,BLOCK_SIZE);
update_block(index_buf[(inode_area[0].i_blocks)-6]);
inode_area[0].i_blocks++;
update_index_block(success);
}
else if(inode_area[0].i_blocks>=262&&inode_area[0].i_blocks<3837)//二级索引
{
if(inode_area[0].i_blocks==262)
{
t1=inode_area[0].i_block[7]=alloc_block();
if(t1==0)
{
printf("write file failed\n");
return ;
}
num2=0;
memset(index_buf1,'\0',sizeof(index_buf1));
}
num1=(inode_area[0].i_blocks-262)/256;//一级索引的数组号
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -