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

📄 新建 文本文档.txt

📁 操作系统的进程管理、设备管理、文件管理的动态演示(C版)
💻 TXT
📖 第 1 页 / 共 2 页
字号:
/*win-tc下运行通过*/
#include "Mouse1.c"
static int  sign_count;
int read_disk(int sector, void* buf);
int write_disk(int sector, void* buf);

static int  sign_count;
void G_init();
void close_disk(void);

int main()
{
    int x,y;
    int x1,y1;
    int i;
    int size1;
    char *var;
    x=x1=6;
    y=y1=51;

       
    if (!init_disk())
    {
        perror("vdisk.dat");
        getch();
        return -1;
    }

   if (!init_fs())
    {
        printf("init_fs() error!\n");
        getch();
        return -2;
    }

    G_init();
    Msinit();
    arrow();

    while(1)
    {
      if(MSget(&x,&y))
        {
         putimage(x1,y1,rar,XOR_PUT);
         for(i=0;i<6;i++)
            {
              if(ISinbox(Menu[i].x,Menu[i].y,Menu[i].x+80,Menu[i].y+25)&&(!Menu[i].flag))
                {
                     Menu[i].flag=1;
                     setcolor(RED);
                     setlinestyle(SOLID_LINE,0,5);
                     rectangle(Menu[i].x,Menu[i].y,Menu[i].x+80,Menu[i].y+25);
                     outtextxy(Menu[i].x+20,Menu[i].y+10,Menu[i].str);
                     break;
                 }


              if((!ISinbox(Menu[i].x,Menu[i].y,Menu[i].x+80,Menu[i].y+25)&&Menu[i].flag))
              {
                    Menu[i].flag=0;
                    setcolor(YELLOW);
                    setlinestyle(SOLID_LINE,0,5);
                    rectangle(Menu[i].x,Menu[i].y,Menu[i].x+80,Menu[i].y+25);
                    setcolor(YELLOW);
                    outtextxy(Menu[i].x+20,Menu[i].y+10,Menu[i].str);
                    break;
              
               }
          }

        putimage(x,y,rar,XOR_PUT);
        x1=x;
        y1=y;
      }

          if(LMSpress())
           {  for(i=0;i<6;i++)
                {   if(ISinbox(Menu[i].x,Menu[i].y,Menu[i].x+80,Menu[i].y+25))
                    choose=i;
                }
           }

       switch(choose)
        {   case 0:choose=-1;creat_file();break;
            case 1:choose=-1;read_file();break;
            case 2:choose=-1;write_file();break;
            case 3:choose=-1;add_file();break;
            case 4:choose=-1;del_file();break;
            case 5:choose=-1; cleardevice();closegraph();
                              return 0;
            default :choose=-1;break;
        }
    }

    free(rar);
    cleardevice();  /**/
    closegraph();
    restorecrtmode();



    return 0;
}

void G_init()
{   int i=0;
    int gdriver=DETECT ,gmode;
    registerbgidriver(EGAVGA_driver);
    initgraph(&gdriver, &gmode, "");
    setbkcolor(LIGHTBLUE);
    cleardevice();


    setcolor(YELLOW);
    setlinestyle(SOLID_LINE,2,YELLOW);
    rectangle(5,50,635,475);
    rectangle(5,5,635,45);
    setfillstyle(10,YELLOW);
    bar(8,8,632,41);


    strcpy(Menu[0].str,"Creat");
    strcpy(Menu[1].str,"Read");
    strcpy(Menu[2].str,"Write");
    strcpy(Menu[3].str,"Add");
    strcpy(Menu[4].str,"Del");
    strcpy(Menu[5].str,"Exit");

    setcolor(YELLOW);
    for(;i<6;i++)
    {
        Menu[i].x=i*100+25;
        Menu[i].y=12;
        Menu[i].flag=0;
        setfillstyle(1,7);
        bar3d(Menu[i].x,Menu[i].y,Menu[i].x+80,Menu[i].y+25,1,4);
        settextstyle(2,0,0);
        setcolor(YELLOW);
        outtextxy(Menu[i].x+20,Menu[i].y+10,Menu[i].str);
    }

   setfillstyle(SOLID_FILL,BLUE);
   bar(0,5,4,475);
   bar(0,476,640,480);
   bar(636,5,640,480);
   bar(0,0,640,4);
   bar(0,46,640,49);
   setcolor(YELLOW);
   rectangle(0,0,639,479);
}

int init_fs(void)
{   int i;
    struct sign
    {char ch1;
    char ch2;}  sign;
    fseek(disk, 1*SECTOR_SIZE, SEEK_SET);
    fread(&sign,sizeof(sign),1,disk) ;
    if(sign.ch1==0&&sign.ch2==0)  /*判断是不是第一次读写文件*/
        sign_count=0;

    else
    {
        fseek(disk, 1*SECTOR_SIZE, SEEK_SET);
        fread(&sign_count,sizeof(sign_count),1,disk) ;
        for(i=0;i<=sign_count;i++)
        {
            fseek(disk, i*sizeof(struct FCB), SEEK_SET);
            fread(&FCB[i],sizeof(struct FCB),1,disk);
        }

     }

   return 1;


}

int my_read(const char* filename, void* buf, int size)
{       char s[10];
        int i;
        for(i=0;i<=sign_count;i++)   /*通过比较名字查找扇区*/
        {
        if(strcmp(FCB[i].file_name,filename)==0)
        break;
        }

        if(i>sign_count)
        {
        sprintf(s,"%s","No found");
        outtextxy(200,200,s);
        getch();
        setfillstyle(SOLID_FILL,BLACK);
        bar(200,200,420,230);

        return 0;
        }

    read_disk(FCB[i].point_sector,buf);

    if(FCB[i].file_size<size)  /*判断是否越界*/
    return  FCB[i].file_size;
    else
    {
        return 0;

    }

}

int my_write(const int m, void* buf, int size)   /*允许一个文件最多占一个扇区*/
{

 /*    char dump[SECTOR_SIZE] = {0} ;
    for(m=0;m<=sign_count;m++)
    {
    if(strcmp(FCB[m].file_name,filename)==0&&sign_count>0)
        {
        fseek(disk, (m+2)*SECTOR_SIZE, SEEK_SET);
        fwrite(dump, SECTOR_SIZE, 1, disk);
        FCB[m].point_sector =m+2;
        FCB[m].file_size=size;
        write_disk(m+2,  buf);
        fseek(disk, m*sizeof(FCB[m]), SEEK_SET);
        fwrite(&FCB[m],sizeof(FCB[m]),1,disk);
        return 1;
        }
    }
   */
     if (sign_count<=SECTOR_SIZE/sizeof(FCB[1]))
        {
          /*把文件信息保存在结构体里 并把文件信息保存到第一个扇区上*/
        FCB[m].file_size=size;
        /*把信息写入文件*/

        write_disk(FCB[m].point_sector,buf);

        /*保存文件信息到第0个扇区*/
        fseek(disk, m*sizeof(FCB[m]), SEEK_SET);
        fwrite(&FCB[m],sizeof(FCB[m]),1,disk);

        }
        else if(sign_count>SECTOR_SIZE/sizeof(FCB[1]))
        {

            return 0;
       }
}

int write_file(void)
{
    char filename[MAX_FINENAME_LEN]={0};
    char buf[MAX_BUF_LEN]={0};
    char s[10]={"No found"};
    int rtn=0;
    int m,n;

    if(get_filename(filename))
    {
      for(m=0;m<=sign_count;m++)   /*通过比较名字查找扇区 看有没有重名字的 如果有则覆盖*/
          {if(strcmp(FCB[m].file_name,filename)==0&&sign_count>0)
                  break;

            }

      if(m>sign_count)
      {
            outtextxy(200,200,s);
            getch();
            setfillstyle(SOLID_FILL,BLACK);
            bar(200,200,420,230);
            return 0;
      }
        n = get_file_content(buf);
        rtn = my_write(m,buf,n);
    }
    else
    {
        rtn = 0;
    }

    return rtn;
}

int read_file(void)
{
    char filename[MAX_FINENAME_LEN]={0};
    char buf[MAX_BUF_LEN]={0};
    int rtn=0;


    if(get_filename(filename))
    {
        int i;
        int x=0,y=0;
        char s[10]={0};
        char ch[1];
        rtn = my_read(filename, buf, MAX_BUF_LEN);

      if(rtn)
      {
        setcolor(YELLOW);
        sprintf(s,"%s","File_C:");
        outtextxy(400,320,s);
        setcolor(RED);
        rectangle(400,330,600,450);
        setcolor(GREEN);

       for (i=0; i<rtn; i++)
        {
         if(410+10*x>620)
          {  x=0;
             y++;
          }
         sprintf(ch,"%c",buf[i]);
         outtextxy(410+8*x,335+y*8,ch);
         x++;
        }

            free(s);
            free(ch);
       }

    }
    else
    {
        rtn = 0;
    }

    if(rtn)
     getch();
     setfillstyle(SOLID_FILL,BLACK);
     bar(400,320,600,450);


    return rtn;
}

int get_filename(char* filename)
{
    int len=0;
    char s[10]={0};
    int  c;
    sprintf(s,"%s","File_n:");
    outtextxy(200,200,s);
    rectangle(200,210,360,230);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -