博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

硬盘分区表的保存与恢复

Posted on 2011-08-23 11:01  ChessYoung  阅读(1251)  评论(1编辑  收藏  举报

通过biosdisk()函数先读出硬盘分区表的内容到缓冲区,然后把缓冲区中的内容写到用fopen()函数打开的文件中

#include <stdio.h>
#include
<stdlib.h>
#include
"bios.h"
#include
<dos.h>
#include
<fcntl.h>
#include
<sys\types.h>
#include
<sys\stat.h>

void helpmsg(void);

int main(int argc, char *argv[])
{
int result;
char buffer[512];
FILE
*fp;

if(argc == 1)
helpmsg();
if(*argv[1] == 'e'||*argv[1] == 'E')
{
result
= biosdisk(2,0x80,0,0,1,1,buffer);
if(!result)
{
printf(
"读硬盘分区表成功!\n");
if((fp = fopen("E:\part.doc","wb+")) == NULL)
{
fprintf(stderr,
"不能创建文件:E:\part.doc\n");
exit(
1);
}
fwrite(buffer,
1,512,fp);
fclose(fp);
printf(
"硬盘分区表保存成功\n");
return 0;
}
else
{
fprintf(stderr,
"读硬盘分区表失败");
exit(
1);
}
}
if(*argv[1] == 'c' || *argv[1] == 'C')
{
if((fp = fopen("E:\part.doc","rb+")) == NULL)
{
fprintf(stderr,
"文件打开失败");
exit(
1);
}
fread(buffer,
1, 512, fp);
result
= biosdisk(3,0x80,0,0,1,1,buffer);
if(!result)
{
printf(
"硬盘分区表恢复成功");
fclose(fp);
return 0;
}
else
{
fprintf(stderr,
"硬盘分区表恢复失败");
fclose(fp);
exit(
1);
}
}
return 0;
}
void helpmsg(void)
{
puts(
"程序使用的正确格式为:SAVEPART[C]或SAVEPART[E]");
puts(
"其中参数:E----保存硬盘分区表到E盘");
puts(
"其中参数:C----从E盘恢复硬盘分区表");
exit(
0);
}