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

📄 新建 文本文档.txt

📁 操作系统的进程管理、设备管理、文件管理的动态演示(C版)
💻 TXT
📖 第 1 页 / 共 2 页
字号:

    while(len<9)
    {  c=bioskey(0);
       if(c==ENTER)
       break;
       setcolor(YELLOW);
       filename[len]=(char)c;
       len++;
       sprintf(s,"%c",c);
       outtextxy(202+10*len,215,s);
    }
     setfillstyle(SOLID_FILL,BLACK);
     bar(200,200,360,230);

    if (filename[len-1] == '\n')
    {
        filename[len-1] = '\0';
        len--;
    }


    free(s);
    return len;
}


int creat_file()
{
    int m=0;
    int c;
    char filename[10]={0};
    char error[12]={0};
    char dump[256]={0};

    sprintf(error,"%s","File_n:");
    outtextxy(200,200,error);
    rectangle(200,210,360,230);
    while(m<9)
    {  c=bioskey(0);
       if(c==ENTER)
       break;
       setcolor(YELLOW);
       filename[m]=(char)c;
       m++;
       sprintf(error,"%c",c);
       outtextxy(202+10*m,215,error);
    }
     setfillstyle(SOLID_FILL,BLACK);
     bar(200,200,360,230);

    for(m=0;m<=sign_count;m++)
      {
        if(strcmp(FCB[m].file_name,filename)==0&&sign_count>0)
        {
            sprintf(error,"%s","Cover? y/n");
            outtextxy(200,200,error);

            c=bioskey(0);
            setfillstyle(SOLID_FILL,BLACK);
            bar(200,200,420,230);

            if((char)c=='y')
              {
                fseek(disk, (m+2)*SECTOR_SIZE, SEEK_SET);
                fwrite(dump, SECTOR_SIZE, 1, disk);
                FCB[m].point_sector =m+2;
                FCB[m].file_size=0;
                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]))
       return 0;

    sprintf(error,"%s","Owner:");
    outtextxy(200,200,error);
    rectangle(200,210,360,230);
    m=0;
    while(m<9)
    {  c=bioskey(0);
       if(c==ENTER)
       break;
       setcolor(YELLOW);
       FCB[sign_count].usr_name[m]=(char)c;
       m++;
       sprintf(error,"%c",c);
       outtextxy(202+10*m,215,error);
    }

     setfillstyle(SOLID_FILL,BLACK);
     bar(200,200,360,230);


     FCB[sign_count].property=2;
     FCB[sign_count].file_size=0;
     strcpy(FCB[sign_count].file_name,filename);

     FCB[sign_count].point_sector =sign_count+2;

     getdate(&d);
     sprintf(filename,"%d.%2d.%2d",d.da_year,d.da_mon,d.da_day);
     strcpy(FCB[sign_count].time,filename);

     fseek(disk, sign_count*sizeof(FCB[sign_count]), SEEK_SET);
     fwrite(&FCB[sign_count],sizeof(FCB[sign_count]),1,disk);
     sign_count++;    /*记录文件所用扇区的个数*/
     fseek(disk, 1*SECTOR_SIZE, SEEK_SET);
     fwrite(&sign_count,sizeof(sign_count),1,disk);  /*把扇区的个数保存到磁盘第1个扇区上*/


}

int del_file()
{
    int m=0;
    int c;
    char filename[20]={0};
    char error[12]={0};
    char dump[256]={0};

    sprintf(error,"%s","File_n:");
    outtextxy(200,200,error);
    rectangle(200,210,360,230);

    while(m<9)
    {  c=bioskey(0);
       if(c==ENTER)
       break;
       setcolor(YELLOW);
       filename[m]=(char)c;
       m++;
       sprintf(error,"%c",c);
       outtextxy(202+10*m,215,error);
    }
     setfillstyle(SOLID_FILL,BLACK);
     bar(200,200,360,230);

    
    for(m=0;m<=sign_count;m++)
      {
        if(strcmp(FCB[m].file_name,filename)==0&&sign_count>0)
        {
            sprintf(error,"%s","DEL? y/n");
            outtextxy(200,200,error);
            c=bioskey(0);
            setfillstyle(SOLID_FILL,BLACK);
            bar(200,200,420,230);

            if((char)c=='y')
             {
                 fseek(disk, (m+2)*SECTOR_SIZE, SEEK_SET);
                 fwrite(dump, SECTOR_SIZE, 1, disk);

                for(;m<=sign_count-1;m++)
                 {strcpy(FCB[m].usr_name,FCB[m+1].usr_name);
                  strcpy(FCB[m].file_name,FCB[m+1].file_name);
                  FCB[m].point_sector=FCB[m+1].point_sector;
                  FCB[m].file_size=FCB[m+1].file_size;
                  strcpy(FCB[m].time,FCB[m+1].time);
                  FCB[m].property=FCB[m+1].property;
                  fseek(disk, m*sizeof(FCB[m]), SEEK_SET);
                  fwrite(&FCB[m],sizeof(FCB[m]),1,disk);
                  }

                 sign_count--;
                 fseek(disk, 1*SECTOR_SIZE, SEEK_SET);
                 fwrite(&sign_count,sizeof(sign_count),1,disk);

             }

            return 1;
        }

      }

    if(m>sign_count)
    {
        sprintf(error,"%s","No found");
        outtextxy(200,200,error);
        getch();
        setfillstyle(SOLID_FILL,BLACK);
        bar(200,200,420,230);
        return 0;
    }






}

int add_file()
{


}

int get_file_content(char* buf)
{
    int ch, count=0;
    int x=0,y=0;
    char s[10]={0};
    setcolor(YELLOW);
    sprintf(s,"%s","File_c");
    outtextxy(180,70,s);
    setcolor(RED);
    rectangle(180,80,500,400);
    setcolor(GREEN);

    while ((ch = getch()) != '~')
    {
        buf[count] = ch;
        sprintf(s,"%c",ch);
        if(185+10*x>492)
         {  x=0;
            y++;
         }
        outtextxy(185+10*x,85+y*10,s);
        count++;
        x++;
    }
     setfillstyle(SOLID_FILL,BLACK);
     bar(180,70,500,400);

    free(s);

    return count;
}



int init_disk(void)
{
    char dump[SECTOR_SIZE] = {0};
    int i;
   disk = fopen("vdisk.dat", "r+b");
   if(disk == NULL)
    {
        disk = fopen("vdisk.dat", "w+r");
            if (disk == NULL)
                return 0;

            for (i=0; i<TOTAL_SECTOR; i++)
                { fseek(disk,i*SECTOR_SIZE,SEEK_SET);
                  fwrite(dump, SECTOR_SIZE, 1, disk);
                 }
    }

    return (int)disk;
}

void close_disk(void)           /*关闭文件*/
{
    fclose(disk);
}

int read_disk(int sector, void* buf)
/* 把磁盘的第sector个扇区内容读入到buf
   sector从0开始编号
   运行正确返回非0值,错误返回0 */
{
    if (!init_disk())
        return 0;

    fseek(disk, sector*SECTOR_SIZE, SEEK_SET);  /*SEEK代表0 将位置指针移到离文件头sector*SECTOR_SIZE个字节处*/
    return fread(buf, SECTOR_SIZE, 1, disk);
}

int write_disk(int sector, void* buf)
/* 把buf中SECTOR_SIZE个字节的数据写到磁盘的第sector个扇区
   sector从0开始编号
   运行正确返回非0值,错误返回0 */
{
    if (!init_disk())
        return 0;

    fseek(disk, sector*SECTOR_SIZE, SEEK_SET);
    return fwrite(buf, SECTOR_SIZE, 1, disk);
}


int draw_FCB(char *usr_name,char *file_name ,int point_sector,int size,char *time,int property)
{
    char s[15]={0};
    setcolor(YELLOW);
    sprintf(s,"%s","FCB");
    outtextxy(20,70,s);
    setcolor(RED);
    rectangle(20,80,170,400);

    line(80,80,80,400);

    for(i=0;i<=4;i++)
    {
        line(20,134+i*54,170,134+i*54);
    }

    settextjustify(0,3);
    setcolor(GREEN);
    sprintf(s,"%s","USR_NA");
    outtextxy(25,100,s);
    sprintf(s,"%s",usr_name);
    outtextxy(85,100,s);

    sprintf(s,"%s","FIL_NA");
    outtextxy(25,154,s);
    sprintf(s,"%s",file_name);
    outtextxy(85,154,s);

    sprintf(s,"%s","SECOTR");
    outtextxy(25,208,s);
    sprintf(s,"%d",point_sector);
    outtextxy(85,208,s);

    sprintf(s,"%s","SIZE");
    outtextxy(30,262,s);
    sprintf(s,"%d",size);
    outtextxy(85,262,s);

    sprintf(s,"%s","TIME");
    outtextxy(30,316,s);
    sprintf(s,"%s",time);
    outtextxy(85,316,s);

    sprintf(s,"%s","PORERTY");
    outtextxy(22,370,s);
    sprintf(s,"%d",property);
    outtextxy(85,370,s);




 return 1;




}

⌨️ 快捷键说明

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