www.pudn.com > TP333.3_S886.rar > ALLSE.C
//******************************************** //文件名:ALLSE.C //功能:对扇区数据进行十六进制读、字符读、 // 备份、拷贝、搬移、写入、清零操作 //******************************************** #include//1. #include //2. #include //3. #include //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.