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

📄 backupbo.c

📁 硬盘扇区读写技术-修复硬盘与恢复文件随书源代码
💻 C
字号:
//********************************************
//文件名:BACKUPBO.C
//功能:1. 调用读扇区汇编子程序
//      2. 将分区表和引导扇区的数据写入文件加以保存
//********************************************
#include<stdio.h>                         //1.
#include<stdlib.h>                        //2.
extern RHD(int,int,int,int,char *);       //3.声明读扇区汇编子程序
void main()                               //4.
{                                         //5.
  FILE *tmfp,*fp,*bafp;                   //6.
  char sh[512];                           //7.
  char tmp[13];                           //8.
  char file[3];                           //9.
  int i,name=1;                           //10.文件名从1开始
  unsigned long k=0;                      //11.从0号扇区开始
  unsigned long data1,data2;              //12.
  unsigned char s1,s2,s3,s4;              //13.
                                          //14.
  printf("Sector number: %lu\n",k);       //15.显示扇区号
  bafp=fopen("senumber.txt","wb");        //16.建立备查文件
  fprintf(bafp,"Boot sector number:\n");  //17.
  fprintf(bafp,"%lu\n",k);                //18.扇区号写入文件
  tmfp=tmpfile();                         //19.
  fwrite(&k,4,1,tmfp);                    //20.
  rewind(tmfp);                           //21.
  fread(&s4,1,1,tmfp);                    //22.
  fread(&s3,1,1,tmfp);                    //23.
  fread(&s2,1,1,tmfp);                    //24.
  fread(&s1,1,1,tmfp);                    //25.
  fclose(tmfp);                           //26.
  tmpnam(tmp);                            //27.返回临时文件名
  RHD(s1,s2,s3,s4,tmp);                   //28.调用读扇区汇编子程序
  fp=fopen(tmp,"rb");                     //29.
  for(i=0;i<=511;i++)                     //30.
    sh[i]=fgetc(fp);                      //31.将字符读入数组
  fseek(fp,470,0);                        //32.移动文件指针
  fread(&data1,4,1,fp);                   //33.读一个双字的值
  fclose(fp);                             //34.
  itoa(name,file,10);                     //35.数转字符串
  fp=fopen(file,"wb");                    //36.以写方式建立文件
  for(i=0;i<=511;i++)                     //37.
    fputc(sh[i],fp);                      //38.将字符输出到文件
  fclose(fp);                             //39.
  name++;                                 //40.文件名增1
  k=k+63;                                 //41.计算引导记录扇区号
  printf("Sector number: %lu\n",k);       //42.显示扇区号
  fprintf(bafp,"%lu\n",k);                //43.将扇区号写入文件
  tmfp=tmpfile();                         //44.
  fwrite(&k,4,1,tmfp);                    //45.
  rewind(tmfp);                           //46.
  fread(&s4,1,1,tmfp);                    //47.
  fread(&s3,1,1,tmfp);                    //48.
  fread(&s2,1,1,tmfp);                    //49.
  fread(&s1,1,1,tmfp);                    //50.
  fclose(tmfp);                           //51.
  itoa(name,file,10);                     //52.数转字符串
  RHD(s1,s2,s3,s4,file);                  //53.调用读扇区汇编子程序
  name++;                                 //54.文件名增1
  if(data1==0)                            //55.如果字段值为0
    exit(0);                              //56.退出
                                          //57.
  k=data1;                                //58.下一个盘符的分区表扇区号
  while(1)                                //59.
  {                                       //60.
    printf("Sector number: %lu\n",k);     //61.
    fprintf(bafp,"%lu\n",k);              //62.
    tmfp=tmpfile();                       //63.
    fwrite(&k,4,1,tmfp);                  //64.
    rewind(tmfp);                         //65.
    fread(&s4,1,1,tmfp);                  //66.
    fread(&s3,1,1,tmfp);                  //67.
    fread(&s2,1,1,tmfp);                  //68.
    fread(&s1,1,1,tmfp);                  //69.
    fclose(tmfp);                         //70.
    RHD(s1,s2,s3,s4,tmp);                 //71.调用读扇区汇编子程序
    fp=fopen(tmp,"rb");                   //72.
    for(i=0;i<=511;i++)                   //73.
      sh[i]=fgetc(fp);                    //74.
    fseek(fp,470,0);                      //75.移动文件指针
    fread(&data2,4,1,fp);                 //76.读一个双字的值
    fclose(fp);                           //77.
    itoa(name,file,10);                   //78.
    fp=fopen(file,"wb");                  //79.
    for(i=0;i<=511;i++)                   //80.
      fputc(sh[i],fp);                    //81.
    fclose(fp);                           //82.
    name++;                               //83.
    k=k+63;                               //84.计算引导记录扇区号
    printf("Sector number: %lu\n",k);     //85.
    fprintf(bafp,"%lu\n",k);              //86.
    tmfp=tmpfile();                       //87.
    fwrite(&k,4,1,tmfp);                  //88.
    rewind(tmfp);                         //89.
    fread(&s4,1,1,tmfp);                  //90.
    fread(&s3,1,1,tmfp);                  //91.
    fread(&s2,1,1,tmfp);                  //92.
    fread(&s1,1,1,tmfp);                  //93.
    fclose(tmfp);                         //94.
    itoa(name,file,10);                   //95.
    RHD(s1,s2,s3,s4,file);                //96.调用读扇区汇编子程序
    name++;                               //97.
    if(data2==0)                          //98.如果字段值为0
      break;                              //99.跳出循环
    k=data1+data2;                        //100.计算第三个盘符的分区表扇区号
  }                                       //101.
  fclose(bafp);                           //102.
  remove(tmp);                            //103.删除临时文件名
}                                         //104.

⌨️ 快捷键说明

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