文章标题

来源:互联网 发布:电信宽带刷新端口 编辑:程序博客网 时间:2024/06/08 11:23

操作系统实验 (HUST)
实验名称 文件管理
可用代码:

#include<iostream>#include<string.h>#define max 6#define N max*maxusing namespace std;/******************************************************************/struct block{    int blocknumber;//第m个文件块所占的个数    int indexblock[100];//第m个文件所在总盘块的索引}block[100];/******************************************************************/struct file{    char name[10];    int length;    int filestart;//标记第m个文件的所占盘块的第一个位置    int fileend;//标记第m个文件的所占盘块的最后一个位置}file[100];/******************************************************************/int bitvector[max][max];//位示图int m=0;//用来标记文件个数/******************************************************************/void allocate(struct file f);//分配函数void free(struct file f,char nametest);//回收/删除函数void printcontents();//显示目录void  printbitvector();//显示位示图/******************************************************************/int main(){    /*************************************/    cout<<"实验目的"<<endl;    cout<<"1.对已分配盘块采用索引方式管理"<<endl;    cout<<"2.空闲盘块采用位示图管理"<<endl;    cout<<"3.实现分配,回收"<<endl;    for(int i=0;i<100;i++)//所有文件初始化    {        file[i].length=0;    }    cout<<"初始化位示图..."<<endl<<endl;    for( int i=0;i<max;i++)    {        for(int j=0;j<max;j++)            bitvector[i][j]=0;    }    printbitvector();    int temp;//检测输入临时变量    /*************************************/    while(1)    {        cout<<"1.创建文件"<<endl<<"2.删除文件"<<endl<<"3.显示位示图"<<endl<<"4.显示目录"        <<endl<<"5.退出系统"<<endl;        cin>>temp;        struct file f;//定义临时变量f用来做中间操作        char nametest;        if(temp==1)        {            cout<<"请输入文件名:"<<endl;            cin>>f.name;            cout<<"请输入文件长度:"<<endl;            int templength;            cin>>templength;            f.length=templength;            int n=0;            for(int i=0;i<max;i++)            {                for(int j=0;j<max;j++)                {                    if(bitvector[i][j]==0)                        n++;                }            }            //当前空闲盘块数            if(n>f.length)                allocate(f);            else                cout<<"磁盘空间不足,分配失败"<<endl;        }        else if(temp==2)        {            cout<<"请输入文件名:"<<endl;            cin>>nametest;//根据名字来查找删除文件,回收空间            free(f,nametest);        }        else if(temp==3)        {            printbitvector();        }        else if(temp==4)        {            printcontents();        }else{            return 0;}    }    return 0;}/******************************************************************/void allocate(struct file f)//文件分配{    file[m]=f;    int k=0,l=0;    for(int i=0;i<max;i++)//在总盘块中找到,满足创建文件所需长度的块区域。    {        for(int j=0;j<max;j++)        {            if(bitvector[i][j]==0&&k<file[m].length)            {                bitvector[i][j]=1;//修改位示图                block[m].indexblock[l]=i*max+j;                l++;k++;            }            else if(bitvector[i][j]==0&&k==file[m].length)            {                bitvector[i][j]=0;                block[m].blocknumber=i*max+j;                k++;            }        }    }    file[m].filestart=block[m].blocknumber-file[m].length;//标记第m个文件的所占盘块的第一个位置    file[m].fileend=block[m].blocknumber-1;//标记第m个文件的所占盘块的最后一个位置    m++;}/******************************************************************/void free(struct file f,char nametest){    int a,b;    for(int i=0;i<m;i++)    {        if(*file[i].name==nametest)//找到与所输入删除的文件名相符的文件        {            for(int j=file[i].filestart;j<=file[i].fileend;j++)//修改位示图            {                a=j/max;//行                b=j%max;//列                bitvector[a][b]=0;            }            while(i<m)//循环,将i之前的file依次往前挪一个位置            {                file[i]=file[i+1];                i++;            }            m--;//将文件个数减掉一个。        }    }}/******************************************************************/void printcontents(){    cout<<"文件目录:"<<endl;    cout<<"Filename\t"<<"Length"<<endl;    for(int i=0;i<m;i++)    {        cout <<file[i].name<<"\t\t"<< file[i].length<<endl;    }}/******************************************************************/void  printbitvector(){    cout<<"位示图:"<<endl;    for(int ii=0;ii<max;ii++)    {        for(int jj=0;jj<max;jj++)        {            cout<<bitvector[ii][jj]<<" ";        }        cout<<endl;    }}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 和的面迟迟不发怎么办 做面条的面发了怎么办 发不起来的面团怎么办 如果婚后买房离婚后财产怎么办 空腹体检前喝水了怎么办 莆田市风俗婴儿死了怎么办后事 上司给你换不好岗位怎么办 领导要把我调走怎么办 美国上庭遇法官退休案子怎么办 夫妻一套房离婚户囗怎么办 正营生不了副团怎么办 浅色衣服被染色了怎么办 解大便解不出来怎么办 强拆挖掘机被村民扣押怎么办 小孩哭的时候接不上气怎么办 昆明市长信箱发不出去怎么办 中国公民在香港想去澳门怎么办 面包车不给贴膜怎么办 在香港海关被扣怎么办 发现被医院骗了怎么办 白皮子科染上血怎么办 宝宝头发里长湿疹怎么办 婴儿头发里长湿疹怎么办 宝宝解小便地方有湿疹怎么办 婴儿湿疹怎么办长在脸上 广州奥龙堡游泳卡过期了怎么办 大学生在学校当兵户口怎么办 茶叶梗枕头太硬怎么办 茶梗枕头太硬怎么办 照片放久了变红怎么办 乳腺萎缩和韧带松弛怎么办 航海王启航服务器爆满怎么办 LOL记分板没了怎么办 辅导孩子做作业没有耐心怎么办 宝宝住院三天回家不吃母乳怎么办 锁频君把应用变暗了怎么办 95的油加成92的怎么办 倒库一边宽了怎么办 倒库老是倒不好怎么办 倒库方向打早了怎么办 倒库左边小了怎么办