最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

文件系统实验 模拟设计文件操作

来源:动视网 责编:小OO 时间:2025-09-25 16:16:37
文档

文件系统实验 模拟设计文件操作

实验五文件系统实验一.目的要求.用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。要求设计一个n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。二.例题:设计一个N个用户的文件系统,每次用户可保存L个文件,一次运行用户可以打开S个文件。程序采用二级文件目录(即设置主目录MFD)和用户文
推荐度:
导读实验五文件系统实验一.目的要求.用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。要求设计一个n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。二.例题:设计一个N个用户的文件系统,每次用户可保存L个文件,一次运行用户可以打开S个文件。程序采用二级文件目录(即设置主目录MFD)和用户文
实验五  文件系统实验

一 .   目的要求 

  .  用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。 

   要求设计一个 n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。

  二 .   例题: 

 

 设计一个N个用户的文件系统,每次用户可保存L个文件,一次运行用户可以打开S个文件。

  

 程序采用二级文件目录(即设置主目录MFD)和用户文件目录(UFD)。另外,为打开文件设置了运行文件目录,用户已打开文件表UOF.。

   为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作

 

 算法与框图: 

  

   因系统小,文件目录的检索使用了简单的线性搜索。 

   文件保护简单使用了保护码:允许读写执行、对应位为 1,对应位为2,和对应位为3。 

   程序中使用的主要设计结构如下: 

   主文件目录和用户文件目录( MFD、UFD) 

   打开文件目录( UOF)(即运行文件目录)

主文件目录MFD:    

用户名用户文件数用户已打开文件数用户文件目录地址用户已打开文件目录地址
A
B
C
D
用户文件目录UFD

文件名文件属性记录长度文件地址标志(是否空表目)
用户已打开文件表UOF

文件名文件属性记录长度状态(打开/建立)

读指针写指针标志(是否空表目)

二、实验要求:

显示初始的文件目录表、输入的文件操作命令和每条命令执行后的UOF文件,程序运行后打印所有用户的文件目录表。

假定文件系统提供的文件操作有建立文件(CREATE),打开文件(OPEN),关闭文件(CLOSE),读文件(READ),写文件(WRITE)和删除文件(DELETE),在模拟程序中可以从键盘上输入文件操作命令来模拟各用户程序中所调用的各种文件操作,用一个结束命令(end)停止程序执行。主程序结构流图如下:

用输入命令来模拟用户程序中调用的文件操作,这些命令的格式和和要求如下:①建立文件:create(文件名,文件长度,文件属性)

②写文件:write(文件名,记录号)

有两种情况,第一种是在执行create后要求写,第二种是在执行open后要求写,即对一个已存在的文件进行修改。

③关闭文件:close(文件名),对某个文件不需要再读或写时,用户应关闭文件。

④打开文件:open(文件名,操作类型),其中操作类型指出文件打开后,用户将对文件进行读或写。约定操作类型与文件属性不符合或正处于“建立”状态的文件不允许打开。

⑤读文件:read(文件名,读长度),由于文件采用索引,可顺序读,也可随机读,自行设计流图。

⑥删除文件 delete(文件名),从相应的用户文件目录UFD中将文件控制块删除,收回该文件占用的存储区域。自行设计流程。

#include "string.h"

#include "stdio.h"

#include "conio.h"

#include "stdlib.h"

#define L 6  /* 用户最多保存的文件数 */

#define N 5 /* 系统可同时管理的用户数*/

int U; 

typedef int   SX;/*文件属性 1为只读,2为写,3为可读可写*/

typedef int  ZT;/*文件状态 1为建立,2为打开,3为关闭*/

typedef int FLAG;/*是否空表目,0为空,1为非空*/

static int memo[128]={10,20,30,40,50,60,70,80,90,100,110,120,130,140,150};

 /*用户文件目录*/

 struct FCB

{  

    char filename[20];/*文件名*/

    SX  access;/*文件属性*/

    int length;/*记录长度*/

    int address[5];/*文件地址*/

    FLAG flag;/*是否空表目,0为空*/    

};

/*用户已打开文件表*/

struct  UOF1 

{  

    char filename[20];/*文件名*/

    SX  access;/*文件属性*/

    int length;/*记录长度*/

    ZT flag1;/*状态*/

    int write;/*写指针*/

        int read;/*读指针*/

    FLAG flag;

    int address[5];/*文件地址*/

};

struct FCB UFD[N][L] ={{{"abc",2,3,{10,20,30},1},{"def",1,3,{40,50,60},1},{"wj",3,3,{70,80,90},1}},

                       {{"xyz",1,1,{100},1},{"aaa",2,1,{110},1}},

                       {{"yyx",1,1,{100},1},{"ccb",1,1,{120},1}},

                       {{"ddd",1,3,{40,50,60},1}}

                       };

struct UOF1  UOF[N][L]={{"abc",2,3,2,0,0,1,{10,20,30}},{"ccb",1,1,2,0,0,1,{120}}};

struct MFD1

{char username[10];

 int count;

 int opencont;

 struct FCB *userfaddr;

 struct UOF1 *openfaddr;

};

struct MFD1   MFD[N]={"A",3,0,UFD[0],UOF[0],"B",2,0,UFD[1],UOF[1],"C",2,0,UFD[2],UOF[2],"D",1,0,UFD[3],UOF[3]};

/*在UFD中找空白表项*/

 selectUFD()

{ int i;

  struct FCB *P=MFD[U].userfaddr;

for(i=0;i   if(P[i].flag==0) break;

   if(i/*在UOF中找空白表项*/

 selectUOF()

{ int j;

  struct UOF1 *P=MFD[U].openfaddr;

for(j=0;j   if(P[j].flag==0) break;

   if(j/*建立文件函数*/  

void creat(/*char filename[],int L,SX access*/)

{  

    struct FCB *P=MFD[U].userfaddr;

        int I,J;

        int j,le,address;  

    char s[20];

    char ac;

    printf("请输入文件名\\n");

    scanf("%s",s);

        

for(j=0;j        if(strcmp(P[j].filename,s)==0)

        {

            printf("有同名文件,不能创建!\\n");

            break;  

        }

    if(j==L)

    {

        printf("文件长度:\\n");

        scanf("%d",&le);    getchar();

        printf("文件属性:\\n");

        scanf("%d",&ac); getchar();

        I=selectUFD();

        J=selectUOF();/*找空登记项,*/    

        strcpy(UFD[U][I].filename,s);

        UFD[U][I].length=le;

        UFD[U][I].access=ac;

        UFD[U][I].flag=1;

        strcpy(UOF[U][J].filename,s);

        UOF[U][J].length=le;

        UOF[U][J].access=ac;

        UOF[U][J].flag=1;

        

        printf("请输入第一个地址\\n");

        scanf("%d",&address);

for(j=0;j<128;j++)

        {

            if(memo[j]==0)

            { 

                memo[j]=address;

                break; 

            }

                     

        }

        UFD[U][I].address[0]=address;

    UOF[U][J].flag1=1;

        UOF[U][J].write=address;

        MFD[U].count++;

        MFD[U].opencont++;

        printf("\\n文件创建成功!\\n");

    }

}    /*以上已调试完成!20101115*/

/*关闭文件函数*/

 void close()

 {    int i;

    char name[20];

    char noname[20]="00000000";

    printf("请输入文件名:\\n");

    scanf("%s",name);

for(i=0;i if(strcmp(UOF[i]->filename,name)==0)

if(UOF[i]->flag1==1)

{UOF[i]->flag1=3;}

else if(UOF[i]->flag1==2)

{strcpy(noname,UOF[i]->filename);

UOF[i]->access=0;

UOF[i]->length=0;

UOF[i]->write=0;

UOF[i]->flag=0;

                printf("文件成功关闭\\n");break;

               }

           else printf("文件已经关闭!\\n") ;  

}

/*CLOSE 已经调试完成!*/

/*打开文件函数*/

void open()

{   

    char na[20];

    int c;

    int x,m,j,i;

    printf("请输入要打开的文件名 \\n");

    getchar();     gets(na) ;

    printf("你想对文件进行写还是读操作?\\n");

    scanf("%d",&c);  getchar();

for(i=0;i    {

        if(strcmp(UFD[U][i].filename,na)==0)

        {  

            m=i;

            for(j=0;j<5;j++)

            {

                if(strcmp(UOF[U][j].filename,na)==0)

                {          

                    if(UOF[U][j].flag1==1)

                    {

                        printf("文件正在被创建,不能打开!\\n");

                        break;

                    }

                    else

                    {           

                        printf("文件已经打开\\n");

                        break;

                    }

                }

            }

            if(j==5)  /*UOF中没有该文件,即:该文件尚未打开*/

            {

                if(UFD[U][m].access==c)

                {

                    for(x=0;x<5;x++)

                        if(UOF[U][x].flag==0)

                        {  

                            strcpy(UOF[U][x].filename,UFD[U][m].filename);

                            UOF[U][x].length=UFD[U][m].length;

                            UOF[U][x].access=UFD[U][m].access;

                            UOF[U][x].flag1=2;

                            UOF[U][x].flag=1;

                            UOF[U][x].read=UFD[U][m].address[0];

                            UOF[U][x].write=UFD[U][m].address[0];

                            printf("文件打开成功\\n");   break;

                        }

                }

                 else   printf("操作不合法,不能打开!\\n");  break;    

             }

             }

    if(i==L)

        printf("文件不存在,不能打开!\\n");

 }

}

/*OPEN()已调试完!*/

/*写文件函数*/

 void write()

 {

    char nam[20];

    int i,j,n,b,e,k;

     

    int m=-1; 

    

    static int ad[5];

    printf("请输入要进行写操作的文件名 \\n");

    getchar();gets(nam);

for(i=0;i<5;i++)

    { 

      if(strcmp(UOF[U][i].filename,nam)==0)

      { 

         if(UOF[U][i].flag1==1)/*文件为建立状态*/

        {   

        m=i;

for(e=1;elength;e++)

          {

              printf("输入地址%d\\n",e);

                    scanf("%d",&ad[e]);

for(k=0;k<20;k++)

                         if(ad[e]==memo[k])

               { 

                 printf("the address%d is wrong and input another one\\n",e);

                             scanf("%d",&ad[e]); break;

               }

             for(j=0;j<128;j++)

            {

              if(memo[j]==0)

                { 

                memo[j]=ad[e];

                                break; 

                }

            }

                     UOF[U][m].address[e]=ad[e];

UOF[m]->write=ad[e];

                   }

        printf("写文件成功!\\n");

                break;

             }

           else /*不是建立状态*/

               if(UOF[U][i].access==1)

                  {printf("操作不合法,不能写!\\n");break;}

               else  

                  {

            printf("是顺序修改吗?1为顺序,0为非顺序 1/0?\\n");

            scanf("%d",&n);

            if(n==1)

            {

               for(e=0;e                 {

                UOF[U][m].write=UOF[U][m].address[e] ;

                                printf("本记录%d修改完成!,UOF[m].address[e]\\n");

                             }

                            printf("写文件成功!\\n");

                            break;

                         }     

                     else

                        {printf("想修改哪条记录?\\n");

             scanf("%d",&b);

             printf("the %d record is %d",b,UOF[U][m].address[b]);

             UOF[U][m].write=UOF[U][m].address[b] ;

                         printf("本记录%d修改完成!,UOF[m].address[e]\\n");

             printf("写文件成功!\\n");

                         break;

                        }

        

          }

                        

       }

   }                    

           if(i==5) printf("文件尚未建立或打开,不能写! \\n");   

    

}

 void read()

 {char nam[20];

    int i,le,m=-1;

    static int ad[5];

    int  ipaddress;

    printf("请输入要进行读操作的文件名 \\n");

    getchar();gets(nam);

    printf("请输入读长度\\n");

    scanf("%d",&le);

    for(i=0;i<5;i++)/*检查文件是否已经打开*/

      if(strcmp(UOF[U][i].filename,nam)==0)

      m=i;

    if(i==5)  printf("文件尚未打开,不能读!\\n");

    else

    {ipaddress=UOF[U][m].read;

for(i=0;i     printf("%d",ipaddress++);

    UOF[U][m].read=ipaddress;

    printf("读文件成功!\\n");

    }

 }

 delet()

 { char noname[20]="00";

   struct FCB *P=MFD[U].userfaddr;

   int I;

   int j,i;  

    char s[20];

    

    printf("请输入文件名\\n");

    scanf("%s",s);

        

for(j=0;j        if(strcmp(P[j].filename,s)==0)

        {

            printf("有该文件!\\n");

            I=j;

               for(i=0;i<20;i++)/*检查文件是否已经打开*/

if(strcmp(UOF[i]->filename,s)==0)

{strcpy(noname,UOF[i]->filename);

UOF[i]->access=0;

UOF[i]->length =0;

UOF[i]->write =0;

UOF[i]->flag=0;

              }

            strcpy(noname,UFD[I]->filename);

UFD[I]->access=0;

UFD[I]->length=0;

UFD[I]->address[0]=0;

UFD[I]->flag=0;

        }

        

            printf("文件不存在,或文件已经撤销!\\n");

 }

/*显示函数*/

void print_UFD()

    int i ;

    printf("num  filename access  length   flag      ad1    ad2     ad3    ad4      ad5   \\n ");

for(i=0;i<5;i++)

        printf("\\n%d\%s\%3d\%3d\%3d\%3d\%3d\%3d\%3d\%3d\\n",i,UFD[U][i].filename,UFD[U][i].access,UFD[U][i].length,UFD[U][i].flag,UFD[U][i].address[0],UFD[U][i].address[1],UFD[U][i].address[2],UFD[U][i].address[3],UFD[U][i].address[4]);

}

void print_UOF()

{  

      int i;

      printf("num filename access length       flag  write   read   flag1    \\n  ");

for(i=0;i<5;i++)

          printf("\\n%1d\%s\%d\%d\%d\%d\%d\%dn",i,UOF[U][i].filename,UOF[U][i].access,UOF[U][i].length,UOF[U][i].flag,UOF[U][i].write,UOF[U][i].read,UOF[U][i].flag);

}

void main()

{    

    char  name[20];   

    int i,a;

    printf("please  welcome  to  file  mangment .\\n");

    printf("\\nplease input the user\\n") ;

 LL:scanf("%s",name);  getchar();

for(i=0;i    {     

        if(strcmp(MFD[i].username,name)==0)

        {

            U=i;

            while(1)

            {

                printf("\\n-----------weclome-------------\\n");

                                printf("1:建立文件操作.\\n");

                printf("2:打开文件操作.\\n");

                printf("3:关闭文件操作.\\n") ;

                printf("4:读文件操作.\\n");

                printf("5:写文件操作。\\n");

                printf("6:撤消文件操作\\n");

                printf("0:结束.\\n");

                                printf("7: 命令错误!\\n");

                printf("-------------------------------\\n");

                printf("\\n请选择操作命令:\\n");

                scanf("%d",&a);

                switch(a)

                {   

                    case 1:creat(); print_UOF();break;

                    case 2: open();break;

                    case 3: close();break;

                    case 4: read();break;

                    case 5: write();break;

                    case 6:delet();break;

                    case 0:exit(0);

                                        case 7:printf("error\\n");

                    default:break;

                }

            }

        }

    }

printf("无此用户\\n");

printf("请再次输入用户名!\\n");

goto LL;

}

  

文档

文件系统实验 模拟设计文件操作

实验五文件系统实验一.目的要求.用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。要求设计一个n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。二.例题:设计一个N个用户的文件系统,每次用户可保存L个文件,一次运行用户可以打开S个文件。程序采用二级文件目录(即设置主目录MFD)和用户文
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top