📄 allse.c
字号:
//********************************************
//文件名:ALLSE.C
//功能:对扇区数据进行十六进制读、字符读、
// 备份、拷贝、搬移、写入、清零操作
//********************************************
#include<stdio.h> //1.
#include<bios.h> //2.
#include<string.h> //3.
#include<stdlib.h> //4.
void main(int argc,char *argv[]) //5.使用命令行参数
{ //6.
char h[512]; //7.存放扇区数据
char ch[13]; //8.存放文件名
char sh[13]; //9.存放程序开关字符串
FILE *fp; //10.
int i,c; //11.
int cyl,head,sector; //12.定义柱面、磁头、扇区变量
int cyl1,head1,sector1; //13.定义目的变量
//14.
if(argc==1) //15.命令行参数等于1时
{ //16.
printf("Enter ALLSE /? to get help."); //17.输出提示
printf("\n"); //18.
exit(0); //19.
} //20.
//21.
strcpy(sh,argv[1]); //22.拷贝程序开关字符串
if((strcmp(sh,"/?")==0)&&argc==2) //23.比较开关字符串
{ //24.
printf("The syntax of ALLSE.EXE is:"); //25.输出提示
printf("\n"); //26.
printf("1.ALLSE [/?] is to get help."); //27.
printf("\n"); //28.
printf("2.ALLSE [/rh] is read sector."); //29.
printf("\n"); //30.
printf("3.ALLSE [/rc] is read sector."); //31.
printf("\n"); //32.
printf("4.ALLSE [/b] is backup sector."); //33.
printf("\n"); //34.
printf("5.ALLSE [/c] is copy sector."); //35.
printf("\n"); //36.
printf("6.ALLSE [/m] is move sector."); //37.
printf("\n"); //38.
printf("7.ALLSE [/w] is write sector."); //39.
printf("\n"); //40.
printf("8.ALLSE [/cle] is clear sector."); //41.
printf("\n"); //42.
exit(0); //43.
} //44.
//45.
if((strcmp(sh,"/rh")==0) //46. 比较开关字符串
||(strcmp(sh,"/RH")==0)&&argc==2) //47.
{ //48.
printf("Enter cylinder number: "); //49.输出提示
scanf("%d",&cyl); //50.输入柱面号
printf("Enter head number: "); //51.输出提示
scanf("%d",&head); //52.输入磁头号
printf("Enter sector number: "); //53.输出提示
scanf("%d",§or); //54.输入扇区号
biosdisk(0x02,0x80,head,cyl,sector,1,h); //55.读扇区数据
fp=tmpfile(); //56.打开一个临时文件
for(i=0;i<=511;i++) //57.将扇区数据输出到文件
fputc(h[i],fp); //58.
rewind(fp); //59.文件指针回到开头
for(i=1;i<=512;i++) //60.
{ //61.
c=fgetc(fp); //62.
printf("%2x",c); //63.用16进制输出到屏幕
if(i%32==0) //64.输出32个字节换行
printf("\n"); //65.
} //66.
fclose(fp); //67.关闭文件
printf("\n"); //68.
} //69.
//70.
if((strcmp(sh,"/rc")==0) //71. 比较开关字符串
||(strcmp(sh,"/RC")==0)&&argc==2) //72.
{ //73.
printf("Enter cylinder number: "); //74.
scanf("%d",&cyl); //75.
printf("Enter head number: "); //76.
scanf("%d",&head); //77.
printf("Enter sector number: "); //78.
scanf("%d",§or); //79.
biosdisk(0x02,0x80,head,cyl,sector,1,h); //80.
for(i=1;i<=512;i++) //81.
{ //82.
printf("%c ",h[i-1]); //83.将字符输出到屏幕
if(i%32==0) //84.输出32个字符换行
printf("\n"); //85.
} //86.
printf("\n"); //87.
} //88.
//89.
if((strcmp(sh,"/b")==0) //90. 比较开关字符串
||(strcmp(sh,"/B")==0)&&argc==2) //91.
{ //92.
printf("Enter cylinder number: "); //93.
scanf("%d",&cyl); //94.
printf("Enter head number: "); //95.
scanf("%d",&head); //96.
printf("Enter sector number: "); //97.
scanf("%d",§or); //98.
printf("Enter file name: "); //99.
scanf("%s",ch); //100.输入文件名
fp=fopen(ch,"wb"); //101.用二进制写方式打开文件
biosdisk(0x02,0x80,head,cyl,sector,1,h); //102.读扇区数据
for(i=0;i<=511;i++) //103.
fwrite(&h[i],1,1,fp); //104.将扇区数据写入文件
fclose(fp); //105.关闭文件
printf("\n"); //106.
} //107.
//108.
if((strcmp(sh,"/c")==0) //109. 比较开关字符串
||(strcmp(sh,"/C")==0)&&argc==2) //110.
{ //111.
printf("Enter SOURCE cylinder number: "); //112.
scanf("%d",&cyl); //113.
printf("Enter SOURCE head number: "); //114.
scanf("%d",&head); //115.
printf("Enter SOURCE sector number: "); //116.
scanf("%d",§or); //117.
biosdisk(0x02,0x80,head,cyl,sector,1,h); //118.读源扇区数据
printf("\n"); //119.
printf("Enter TARGET cylinder number: "); //120.
scanf("%d",&cyl1); //121.
printf("Enter TARGET head number: "); //122.
scanf("%d",&head1); //123.
printf("Enter TARGET sector number: "); //124.
scanf("%d",§or1); //125.
biosdisk(0x03,0x80,head1,cyl1,sector1,1,h);//126.将数据写到目的扇区
printf("\n"); //127.
} //128.
//129.
if((strcmp(sh,"/m")==0) //130.比较开关字符串
||(strcmp(sh,"/M")==0)&&argc==2) //131.
{ //132.
printf("Enter SOURCE cylinder number: "); //133.
scanf("%d",&cyl); //134.
printf("Enter SOURCE head number: "); //135.
scanf("%d",&head); //136.
printf("Enter SOURCE sector number: "); //137.
scanf("%d",§or); //138.
biosdisk(0x02,0x80,head,cyl,sector,1,h); //139.读源扇区数据
printf("\n"); //140.
printf("Enter TARGET cylinder number: "); //141.
scanf("%d",&cyl1); //142.
printf("Enter TARGET head number: "); //143.
scanf("%d",&head1); //144.
printf("Enter TARGET sector number: "); //145.
scanf("%d",§or1); //146.
biosdisk(0x03,0x80,head1,cyl1,sector1,1,h);//147.将数据写到目的扇区
for(i=0;i<=511;i++) //148.
h[i]=0; //149.将数组元素赋0值
biosdisk(0x03,0x80,head,cyl,sector,1,h); //150.将源扇区清0
printf("\n"); //151.
} //152.
//153.
if((strcmp(sh,"/w")==0) //154. 比较开关字符串
||(strcmp(sh,"/W")==0)&&argc==2) //155.
{ //156.
printf("Enter cylinder number: "); //157.
scanf("%d",&cyl); //158.
printf("Enter head number: "); //159.
scanf("%d",&head); //160.
printf("Enter sector number: "); //161.
scanf("%d",§or); //162.
printf("Enter file name: "); //163.
scanf("%s",ch); //164.输入文件名
if((fp=fopen(ch,"rb"))==NULL) //165.测试文件是否存在
{ //166.
printf("File open fail !"); //167.
exit(0); //168.
} //169.
for(i=0;i<=511;i++) //170.
fread(&h[i],1,1,fp); //171.将文件数据读入数组
biosdisk(0x03,0x80,head,cyl,sector,1,h); //172.将数据写入扇区
printf("\n"); //173.
fclose(fp); //174.
} //175.
//176.
if((strcmp(sh,"/cle")==0) //177. 比较开关字符串
||(strcmp(sh,"/CLE")==0)&&argc==2) //178.
{ //179.
printf("Enter cylinder number: "); //180.
scanf("%d",&cyl); //181.
printf("Enter head number: "); //182.
scanf("%d",&head); //183.
printf("Enter sector number: "); //184.
scanf("%d",§or); //185.
for(i=0;i<=511;i++) //186.
h[i]=0; //187.将数组元素赋0值
biosdisk(0x03,0x80,head,cyl,sector,1,h); //188.将扇区清0
} //189.
} //190.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -