硬盘数据恢复导航
RAID数据恢复导航
 | 网站首页 | 数据恢复资料 | 数据恢复软件 | 咨询留言 | 数据恢复博客 | 数据恢复论坛 | 
数据恢复软件下载
数据恢复服务 数据恢复 数据恢复报价 数据恢复培训 数据恢复实验室 数据恢复研究成果 数据恢复服务联系方式
您现在的位置: 北亚数据恢复技术站 >> 数据恢复资料 >> 相关编程资料 >> 文章正文
读扇区数据C语言程序         ★★★ 【字体:
读扇区数据C语言程序
作者:jnsqs    文章来源:本站成员原创    点击数:    更新时间:2004-04-20


//********************************************

//文件名:CRSE.C

//功能:1. 读硬盘0面0头1扇区数据并建立存储文件

//      2. 将数据用16进制显示在屏幕上

//********************************************

#include<stdio.h>                            //1.

#include<bios.h>                             //2.

void main()                                  //3.

{                                            //4.

   FILE *fp;                                 //5.

   char h[512];                              //6.存放扇区数据

   char sh[13];                              //7.存放文件名

   int i,j;                                  //8.

   int cyl=0,head=0,sector=1;                //9.柱面,磁头,扇区编号

   printf("Enter file name: ");              //10.

   scanf("%s",sh);                           //11.输入文件名

   fp=fopen(sh,"wb+");                       //12.打开文件

   biosdisk(0x02,0x80,head,cyl,sector,1,h);  //13.调用函数将扇区数据读入数组

   for(i=0;i<=511;i++)                       //14.将数据输出到文件

     fputc(h[i],fp);                         //15.

   rewind(fp);                               //16.文件指针回到开头

   for(i=1;i<=512;i++)                       //17.

   {                                         //18.

     j=fgetc(fp);                            //19.取字符

     printf("%2x",j);                        //20.按16进制显示

     if(i%32==0)                             //21.每显示32字节换行

       printf("\n");                         //22.

   }                                         //23.

   fclose(fp);                               //24.关闭文件

   printf("\n");                             //25.

}                                            //26.

 C源程序解释

 

  C语言源程序的解释相对于汇编语言源程序要简单一些,这是因为C语言属于高级编程语言,它更接近于人类的自然语言。因此在C源程序中对于那些含义非常明确的语句,就不进行解释了。

第2行将头文件bios.h包含进来。函数biosdisk()的原型是在头文件bios.h里定义的,所以在程序中调用函数biosdisk(),必须用#include<bios.h>语句将头文件包含进来。

第12行用"wb+"的方式打开文件,文件名存放在数组sh里。"wb+"方式指定文件以二进制方式打开;既可以读出数据,也可以写入数据;运行程序时若文件已存在,则文件的内容被破坏;若文件不存在,则建立文件。

因此本程序在运行前,操作者一定要看一下在当前目录下是否有同名文件,如盲目操作,可能产生破坏性的严重后果。

如果想让程序运行时更加安全,必须在源程序里增加一部分检测语句。这里给出一个检测方法,大家可作为参考。

在第11行和第12行中间增加下列内容:

if((fp=fopen(sh,"rb"))!=NULL)

     {

       do

       {

       printf("File already exists.Continue(Y/N)?:");

         c=toupper(getche());

       printf("\n");

       }

       while((!(c=='N'))&&(!(c=='Y')));

       if(c=='N')

         exit(0);

     }

这一段语句的作用是按照键盘输入的文件名,以只读方式打开文件,因为只读方式不破坏原文件。如果打开文件失败,说明没有同名文件,可继续进行。如果打开文件成功,说明有同名文件。

这时程序在屏幕上输出一行提示“File already exists.Continue(Y/N)?:”,意思是文件已经存在,是否继续进行?如果回答N,则退出程序返回操作系统;如果回答Y,则继续执行程序,原来存在的文件内容就被破坏了。如果回答N和Y以外的字符,则程序循环提示。

增加的语句里面多了一个字符变量c,需在定义变量的时候加一条语句“char c;”;多调用了三个函数,需在开头增加头文件包含语句:

#include<stdlib.h>

#include<conio.h>

#include<ctype.h>

第13行调用函数biosdisk()读取扇区数据。

第14-15行用一个循环将512个字符输出到文件。循环结束以后,文件指针指在文件的末尾。这时如果再对文件进行操作,则必需将指针返回。

第16行调用函数rewind()将文件指针返回到开头。

第17-24行将存入文件的扇区数据按16进制方式打印到屏幕。

 

                           程序运行

 

 

运行程序时在命令行输入CRSE,然后回车。屏幕上出现输入文件名的提示,输入文件名后回车,执行程序。

输入文件名时,一定要观察一下当前目录中是否有同名文件,以防止同名文件被破坏。在确保没有同名文件时,再敲回车键。

程序执行的结果,在当前目录下建立一个512字节的扇区数据文件,同时将每一个字节用16进制数据格式打印到屏幕上,显示结果如下:

F:\>crse

Enter file name: se001

33c08ed0bc 07cfb50 7501ffcbe1b7cbf1b 65057b9e5 1f3a4cbbebe 7b1 4

382c7c 9751583c610e2f5cd188b148bee83c610497416382c74f6be10 74eac

3c 074fabb 7 0b4 ecd10ebf2894625968a46 4b4 63c e7411b4 b3c c74 5

3ac4752b40c64625 67524bbaa5550b441cd1358721681fb55aa7510f6c1 174

 b8ae0885624c7 6a1 6eb1e8866 4bf a 0b8 1 28bdc33c983ff 57f 38b4e

25 34e 2cd137229be59 7813efe7d55aa745a83ef 57fda85f67583be2e 7eb

8a98915299 346 81356 ae812 05aebd54f74e433c0cd13ebb8 0 080314219

5633f656565250 65351be10 0568bf45052b8 0428a5624cd135a588d641072

 a4075 14280c7 2e2f7f85ec3eb74b7d6c7f8b1edceded0a7a1a3b0b2d7b0b3

ccd0f2cedeb7a8bcccd0f8a1a3 0bcd3d4d8b2d9d7f7cfb5cdb3cab1b3f6cfd6

b4edcef3a1a3b0b2d7b0b3ccd0f2cedeb7a8bcccd0f8a1a3 0c8b1c9d9b2d9d7

f7cfb5cdb3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

 0 0 08bfc1e578bf5cb 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 039253a25 0 080 1

 1 0 6fe7f 43f 0 0 086fa3f 0 0 041 5 ffefffec5fa3f 0a07fde 1 0 0

 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 055aa

文章录入:菜刀    责任编辑:菜刀 
  • 上一篇文章: 没有了

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    关于我们 | RAID数据恢复 | 友情链接 | RSS生成 | XML生成 | 文章HTML地图 | 下载HTML地图

    全国统一客服电话:4006-505-808
    总部电话:010-82488636 邮箱:ycf@frombyte.com
    公司地址:北京市海淀区永丰基地丰慧中路7号新材料创业大厦B座205室
    京ICP备05011939
    ; ;猹