通过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);
}