📄 backupbo.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 + -