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

📄 fat.c

📁 硬盘扇区读写技术-修复硬盘与恢复文件随书源代码
💻 C
字号:
//********************************************
//文件名:FAT.C
//功能:1. 调用读扇区汇编子程序
//   2. 查找FAT表并建立扇区数据文件
//   3. 将找到的扇区数据用十六进制显示
//********************************************
#include<stdio.h>                             //1.
#include<conio.h>                             //2.
#include<stdlib.h>                            //3.
#include<string.h>                            //4.
#include<dos.h>                               //5.
extern RHD(int,int,int,int,char *);           //6.声明读扇区汇编子程序
void sou(void);                               //7.声明发声函数
void main(int argc,char *argv[])              //8.
{                                             //9.
  FILE *tmfp,*fp;                             //10.
  int i,c;                                    //11.
  int x,y,m;                                  //12.
  char *ch="";                                //13.
  char sh[13];                                //14.
  char fh[512];                               //15.
  unsigned char h[512];                       //16.
  unsigned long k;                            //17.
  long t=0;                                   //18.
  unsigned char s1,s2,s3,s4;                  //19.
                                              //20.
  if(argc==1)                                 //21.
  {                                           //22.
    printf("Enter FATFIND /? to get help.");  //23.
    printf("\n");                             //24.
    exit(0);                                  //25.
  }                                           //26.
  strcpy(sh,argv[1]);                         //27.
  if((strcmp(sh,"/?")==0)&&argc==2)           //28.显示帮助提示
  {                                           //29.
    printf("The syntax of FATFIND.EXE is:");  //30.
    printf("\n");                             //31.
    printf("1.FATFIND [/?] is to get help."); //32.
    printf("\n");                             //33.
    printf("2.FATFIND [/+] is find "          //34.
    "increase sector number.");               //35.
    printf("\n");                             //36.
    printf("3.FATFIND [/-] is find "          //37.
    "reduce sector number.");                 //38.
    printf("\n");                             //39.
  }                                           //40.
                                              //41.
  if((strcmp(sh,"/+")==0)                     //42.判断功能开关
   ||(strcmp(sh,"/-")==0)&&argc==2)           //43.
  {                                           //44.
    printf("Enter create file name: ");       //45.
    scanf("%s",ch);                           //46.
    printf("Enter sector number: ");          //47.
    scanf("%lu",&k);                          //48.
    textcolor(15);                            //49.
    cprintf("Press any key stop");            //50.
    textcolor(7);                             //51.
    cprintf("\n");                            //52.
    printf("\n");                             //53.
    printf("Find sector number: ");           //54.
    x=wherex();                               //55.
    y=wherey();                               //56.
    _setcursortype(_NOCURSOR);                //57.隐藏光标
    m=0;                                      //58.
    while(1)                                  //59.
    {                                         //60.
      tmfp=tmpfile();                         //61.
      fwrite(&k,4,1,tmfp);                    //62.
      rewind(tmfp);                           //63.
      fread(&s4,1,1,tmfp);                    //64.
      fread(&s3,1,1,tmfp);                    //65.
      fread(&s2,1,1,tmfp);                    //66.
      fread(&s1,1,1,tmfp);                    //67.
      fclose(tmfp);                           //68.
      RHD(s1,s2,s3,s4,ch);                    //69.调用读扇区汇编子程序
      fp=fopen(ch,"rb");                      //70.
      for(i=0;i<=511;i++)                     //71.
        h[i]=fgetc(fp);                       //72.
      fclose(fp);                             //73.
      if((h[0]==0xf8)&&(h[1]==0xff))          //74.判断前两个字节是否为f8 ff
      {                                       //75.
        m=3;                                  //76.置找到扇区标志
        break;                                //77.
      }                                       //78.
      gotoxy(x,y);                            //79.
      printf("%lu",k);                        //80.
      if(kbhit()!=0)                          //81.判断是否有键按下
      {                                       //82.
        break;                                //83.
      }                                       //84.
      if((strcmp(sh,"/+"))==0)                //85.向扇区号增加的方向查找
        k++;                                  //86.
      if((strcmp(sh,"/-"))==0)                //87.向扇区号减少的方向查找
        k--;                                  //88.
    }                                         //89.
                                              //90.
    if(m==3)                                  //91.找到扇区标志
    {                                         //92.
      printf("\n");                           //93.
      fp=fopen(ch,"rb");                      //94.
      for(i=1;i<=512;i++)                     //95.
      {                                       //96.
        c=fgetc(fp);                          //97.
        printf("%2x",c);                      //98.显示十六进制数据
        if(i%32==0)                           //99.
        printf("\n");                         //100.
      }                                       //101.
      rewind(fp);                             //102.
      for(i=0;i<=511;i++)                     //103.
      fread(&fh[i],1,1,fp);                   //104.
      fclose(fp);                             //105.
      printf("\n");                           //106.
      for(i=0;i<=511;i++)                     //107.
        t+=fh[i];                             //108.字节值累加
      printf("Total : %ld\n",t);              //109.
      x=wherex();                             //110.
      y=wherey();                             //111.
      gotoxy(x,y);                            //112.
      printf("Sector number "                 //113.
      "final is:%lu\n",k);                    //114.
      _setcursortype(_NORMALCURSOR);          //115.恢复光标
      printf("Press any key to exit");        //116.
      sou();                                  //117.调用发声函数
    }                                         //118.
    printf("\n");                             //119.
    _setcursortype(_NORMALCURSOR);            //120.
  }                                           //121.
}                                             //122.
                                              //123.
void sou(void)                                //124.发声函数
{                                             //125.
  unsigned long t;                            //126.
  unsigned i;                                 //127.
  int j;                                      //128.
  while(1)                                    //129.
  {                                           //130.
    i=1800;                                   //131.设置频率
    for(j=0;j<=2;j++)                         //132.
    {                                         //133.
      sound(i);                               //134.发声
      for(t=0;t<20000000;t++)                 //135.延时
      ;                                       //136.
      i=i+200;                                //137.
      nosound();                              //138.停止发声
    }                                         //139.
    i=i-300;                                  //140.
    sound(i);                                 //141.
    for(t=0;t<20000000;t++)                   //142.
    ;                                         //143.
    nosound();                                //144.
    for(t=0;t<100000000;t++)                  //145.
    ;                                         //146.
    if(kbhit()!=0)                            //147.
      break;                                  //148.
  }                                           //149.
}                                             //150.

⌨️ 快捷键说明

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