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.