⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 file.h

📁 用c语言编程
💻 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 + -