C++读取磁盘扇区
C语言常用函数
C语言的常用库函数函数1。
absread()读磁盘绝对扇区函数原形:int absread(int drive,int num,int sectnum,void *buf)功能:从drive指定的驱动器磁盘上,sectnum指定的逻辑扇区号开始读取(通过DOS中断0x25读取)num 个(最多64K个)扇区的内容,储存于buf所指的缓冲区中。
参数:drive=0对应A盘,drive=1对应B盘。
返回值:0:成功;-1:失败。
头文件:dos.h函数2。
abswrite()写磁盘绝对扇区函数原形:int abswrite(int drive,int nsects,int lsect,void *buffer)drive=0(A驱动器)、1(B驱动器)、nsects=要写的扇区数(最多64K个);lsect=起始逻辑扇区号;buffer=要写入数据的内存起始地址。
功能:将指定内容写入(调用DOS中断0x26)磁盘上的指定扇区,即使写入的地方是磁盘的逻辑结构、文件、FAT表和目录结构所在的扇区,也照常进行。
返回值:0:成功;-1:失败。
头文件:dos.h函数3。
atof()将字符串转换成浮点数的函数原形:double atof(const char *s)功能:把s所指向的字符串转换成double类型。
s格式为:符号数字.数字E符号数字返回值:字符串的转换值。
头文件:math.h、stdlib.h函数4。
atoi()将字符串转换成整型数的函数原形:int atoi(const char *s)功能:把s所指向的字符串转换成int类型。
s格式为:符号数字返回值:字符串的转换值。
若出错则返回0。
头文件:stdlib.h函数5。
atol()将字符串转换成长整型数的函数原形:long atol(const char *s)功能:把s所指向的字符串转换成long int类型。
s格式为:符号数字返回值:字符串的转换值。
读扇区错误!
读扇区错误!
读扇区错误是一种常见的计算机故障,它可能会导致系统崩溃、数据丢失或系统功能受限。
当发生读扇区错误时,用户可能会看到一条报错信息,指出系统无法读取某个特定的扇区。
读扇区错误的原因可能是硬盘损坏或数据丢失,也可能是由于硬盘被污染或病毒感染造成的。
硬盘损坏会导致读写数据出现问题,而病毒感染则会破坏系统文件,从而导致读取特定扇区时出错。
要解决读扇区错误,首先应检查硬盘是否有损坏,如果是,则应尽快更换新的硬盘。
应检查电脑是否被病毒感染,如果是,应及时安装杀毒软件,清除病毒。
应运行系统检查工具,检查系统是否存在错误,并修复错误。
读扇区错误是一种常见的计算机故障,要解决它,应先检查硬盘是否损坏,然后检查电脑是否被病毒感染,最后运行系统检查工具,修复错误。
读写硬盘扇区的C语言程序
读写硬盘的MBR和DBR扇区的程序。
/******************************************** Master Boot Record Programme: ** Backup the Master Boot Sector ** Fix the Master Boot Sector ** Change the Partition Table ** -- by Crystal.Mouse 04/30/99 -- ** Turboc 2.0 ********************************************/#include <ctype.h>#include <stdlib.h>#include <stdio.h>#include <bios.h>#include <io.h>#include <dos.h>#include <fcntl.h>#include <sys\stat.h>#include <conio.h>/* define the */char buff[512]; /*buffer for master boot sector *//* buffer1 backup for master boot sector */char buff1[512];/* This is the dos boot programme data */char sector2[512]={0xEB,0x3C,0x90,0x4D,0x53,0x57,0x49,0x4E,0x34,0x2E,0x31,0x00, 0x02,0x20,0x01,0x00,0x02,0x00,0x02,0x00,0x00,0xF8,0xC9,0x00,0x3F,0x00,0x40,0x00,0x3F,0x00,0x00,0x00,0x01,0x0A,0x19,0x00,0x80,0x00,0x29,0xDC,0x12,0x6F,0x04,0x30,0x34,0x32,0x36,0x39,0x39,0x20,0x20,0x20,0x20,0x20,0x46,0x41,0x54,0x31,0x36,0x20,0x20,0x20,0xFA,0x33,0xC9,0x8E,0xD1,0xBC,0xFC,0x7B,0x16,0x07, 0xBD,0x78,0x00,0xC5,0x76,0x00,0x1E,0x56,0x16,0x55,0xBF,0x22, 0x05,0x89,0x7E,0x00,0x89,0x4E,0x02,0xB1,0x0B,0xFC,0xF3,0xA4, 0x06,0x1F,0xBD,0x00,0x7C,0xC6,0x45,0xFE,0x0F,0x8B,0x46,0x18, 0x88,0x45,0xF9,0x38,0x4E,0x24,0x7D,0x22,0x8B,0xC1,0x99,0xE8, 0x77,0x01,0x72,0x1A,0x83,0xEB,0x3A,0x66,0xA1,0x1C,0x7C,0x66, 0x3B,0x07,0x8A,0x57,0xFC,0x75,0x06,0x80,0xCA,0x02,0x88,0x56, 0x02,0x80,0xC3,0x10,0x73,0xED,0x33,0xC9,0x8A,0x46,0x10,0x98, 0xF7,0x66,0x16,0x03,0x46,0x1C,0x13,0x56,0x1E,0x03,0x46,0x0E, 0x13,0xD1,0x8B,0x76,0x11,0x60,0x89,0x46,0xFC,0x89,0x56,0xFE, 0xB8,0x20,0x00,0xF7,0xE6,0x8B,0x5E,0x0B,0x03,0xC3,0x48,0xF7, 0xF3,0x01,0x46,0xFC,0x11,0x4E,0xFE,0x61,0xBF,0x00,0x07,0xE8, 0x23,0x01,0x72,0x39,0x38,0x2D,0x74,0x17,0x60,0xB1,0x0B,0xBE, 0xD8,0x7D,0xF3,0xA6,0x61,0x74,0x39,0x4E,0x74,0x09,0x83,0xC7, 0x20,0x3B,0xFB,0x72,0xE7,0xEB,0xDD,0xBE,0x7F,0x7D,0xAC,0x98, 0x03,0xF0,0xAC,0x84,0xC0,0x74,0x17,0x3C,0xFF,0x74,0x09,0xB4, 0x0E,0xBB,0x07,0x00,0xCD,0x10,0xEB,0xEE,0xBE,0x82,0x7D,0xEB, 0xE5,0xBE,0x80,0x7D,0xEB,0xE0,0x98,0xCD,0x16,0x5E,0x1F,0x66, 0x8F,0x04,0xCD,0x19,0xBE,0x81,0x7D,0x8B,0x7D,0x1A,0x8D,0x45, 0xFE,0x8A,0x4E,0x0D,0xF7,0xE1,0x03,0x46,0xFC,0x13,0x56,0xFE, 0xB1,0x04,0xE8,0xC1,0x00,0x72,0xD6,0xEA,0x00,0x02,0x70,0x00, 0xB4,0x42,0xEB,0x2D,0x60,0x66,0x6A,0x00,0x52,0x50,0x06,0x53, 0x6A,0x01,0x6A,0x10,0x8B,0xF4,0x74,0xEC,0x91,0x92,0x33,0xD2, 0xF7,0x76,0x18,0x91,0xF7,0x76,0x18,0x42,0x87,0xCA,0xF7,0x76, 0x1A,0x8A,0xF2,0x8A,0xE8,0xC0,0xCC,0x02,0x0A,0xCC,0xB8,0x01, 0x02,0x8A,0x56,0x24,0xCD,0x13,0x8D,0x64,0x10,0x61,0x72,0x0A, 0x40,0x75,0x01,0x42,0x03,0x5E,0x0B,0x49,0x75,0x77,0xC3,0x03, 0x18,0x01,0x27,0x0D,0x0A,0x49,0x6E,0x76,0x61,0x6C,0x69,0x64, 0x20,0x73,0x79,0x73,0x74,0x65,0x6D,0x20,0x64,0x69,0x73,0x6B, 0xFF,0x0D,0x0A,0x44,0x69,0x73,0x6B,0x20,0x49,0x2F,0x4F,0x20,0x61,0x63,0x65,0x20,0x74,0x68,0x65,0x20,0x64,0x69,0x73,0x6B,0x2C,0x20,0x61,0x6E,0x64,0x20,0x74,0x68,0x65,0x6E,0x20,0x70,0x72,0x65,0x73,0x73,0x20,0x61,0x6E,0x79,0x20,0x6B,0x65,0x79,0x0D,0x0A,0x00,0x00,0x49,0x4F,0x20,0x20,0x20,0x20,0x20,0x20,0x53,0x59,0x53,0x4D,0x53,0x44,0x4F,0x53,0x20,0x20,0x20,0x53,0x59,0x53,0x7F,0x01,0x00,0x41,0xBB,0x00,0x07,0x80,0x7E,0x02,0x0E,0xE9,0x40,0xFF,0x00,0x00,0x55,0xAA};/* sector1 is the Master boot program data */char sector1[512]={0xFA,0x33,0xC0,0x8E,0xD0,0xBC,0x00,0x7C,0x8B,0xF4,0x50,0x07, 0x50,0x1F,0xFB,0xFC,0xBF,0x00,0x06,0xB9,0x00,0x01,0xF2,0xA5,0xEA,0x1D,0x06,0x00,0x00,0xB8,0x01,0x02,0xBB,0x00,0x08,0xB9,0x01,0x00,0xBA,0x80,0x00,0xCD,0x13,0xBF,0x00,0x06,0xBE,0x00,0x08,0xB9,0x00,0x01,0xFC,0xF3,0xA7,0x74,0x14,0xBE,0x17,0x07,0xE8,0x2F,0x01,0xB8,0x01,0x03,0xBB,0x00,0x06,0xB9,0x01,0x00,0xBA,0x80,0x00,0xCD,0x13,0xBE,0xBE,0x07,0xB3,0x04,0x80,0x3C,0x80,0x74,0x0E,0x80,0x3C,0x00,0x75,0x1C,0x83,0xC6,0x10,0xFE,0xCB,0x75,0xEF,0xCD,0x18,0x8B,0x14,0x8B,0x4C,0x02,0x8B,0xEE,0x83,0xC6,0x10,0xFE,0xCB,0x74,0x0D,0x80,0x3C,0x00,0x74,0xF4,0xBE,0xAE,0x06,0xE8,0xF0,0x00,0xEB,0xFE,0xBF,0x05,0x00,0xBB,0x00,0x7C,0xB8,0x01,0x02,0x57,0xCD,0x13,0x5F,0x73,0x0C,0x33,0xC0,0xCD,0x13,0x4F,0x75,0xED,0xBE,0xD2,0x06,0xEB,0xE0,0xBE,0xF7,0x06,0xBF,0xFE,0x7D,0x81,0x3D,0x55,0xAA,0x75,0xD4,0x8B,0xF5,0xEA,0x00,0x7C,0x00,0x00,0x49,0x6E,0x76,0x61,0x6C,0x69,0x64,0x20,0x70,0x61,0x72,0x74,0x69,0x74,0x69,0x6F,0x6E,0x20,0x74,0x61,0x62,0x6C,0x65,0x2E,0x20,0x4F,0x68,0x2C,0x6D,0x79,0x20,0x67,0x6F,0x64,0x21,0x00,0x45,0x72,0x72,0x6F,0x72,0x20,0x6C,0x6F,0x61,0x64,0x69,0x6E,0x67,0x20,0x6F,0x70,0x65,0x72,0x61,0x74,0x69,0x6E,0x67,0x20,0x73,0x79,0x73,0x74,0x65,0x6D,0x6E,0x67,0x20,0x6F,0x70,0x65,0x72,0x61,0x74,0x69,0x6E,0x67,0x20,0x73,0x79,0x73,0x74,0x65,0x6D,0x2E,0x20,0x53,0x68,0x69,0x74,0x21,0x00,0x4D,0x61,0x73,0x74,0x65,0x72,0x20,0x42,0x6F,0x6F,0x74,0x20,0x53,0x65,0x63,0x74,0x6F,0x72,0x20,0x63,0x68,0x61,0x6E,0x67,0x65,0x64,0x2E,0x0A,0x0D,0x44,0x6F,0x6E,0x27,0x74,0x20,0x77,0x6F,0x72,0x72,0x79,0x2C,0x49,0x20,0x68,0x61,0x76,0x65,0x20,0x72,0x65,0x63,0x6F,0x76,0x65,0x72,0x65,0x64,0x20,0x69,0x74,0x21,0x20,0x43,0x6C,0x65,0x76,0x65,0x72,0x21,0x20,0x45,0x54,0x2D,0x4D,0x6F,0x75,0x73,0x65,0x20,0x59,0x65,0x61,0x68,0x21,0x0A,0x0D,0x00,0xAC,0x3C,0x00,0x74,0x0B,0x56,0xBB,0x07,0x00,0xB4,0x0E,0xCD,0x10,0x5E,0xEB,0xF0,0xC3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xAA};char fnwrite[20],fnread[20]; /* filename */FILE *fp; /* file pointer */int head,cylinder,sector,drive; /* harddisk head,cylinder sector drive */ /* define the key code */#define ESC 0x011b#define LEFT 0x4b00#define RIGHT 0x4d00#define UP 0x4800#define DOWN 0x5000#define HOME 0x4700#define END 0x4f00#define PGUP 0x4900#define PGDN 0x5100#define F2 0x3c00#define F1 0x3b00#define W 1#define R 0 /* flag for */#define D 0 /* flag for Dos Boot Sector */#define M 1 /* flag for Master Boot Sector *//* declare the function */int fileopen(int f,char *file); /*Read or Creat the backupfile */int writembr(char *file); /* write the buffer to master boot sector */ int writedbr(char *file); /* write the buffer to dos boot sector */int backupmbr(char *file); /* backup the Master Boot record data */ int backupdbr(char *file); /* backup the dos boot sector data */ int printmbr(); /* print the master boot sector */int init(int f); /* init the operating */void help(); /*help*/void title(); /* display the infomation */int copypart(char *src,char *dest);void infina(char *file); /* open or creat the backup file */void closecur(); /* close the cursor */void opencur(); /* open the cursor */int display(); /* display the data */void interrupt(*reset)(); /* interrupt reset the machine */void resetwin(); /* reset the screen */void search(); /* search the dos boot sector */int detect(int num,int driver,int f); /* detect the drive */int detect(int num,int driver,int f)/* detect the disk */{union REGS r;r.h.ah=num;r.h.dl=driver;int86(0x13,&r,&r);if(f)return r.h.al;elsereturn r.x.cflag;}/* backup the dos boot sector */int backupdbr(char *file){int flag=1; /* flag for success or not */if(!fileopen(W,file)){printf("\nBackup file write error!");flag=0;}return flag;}/* rewrite the dos boot record */int writedbr(char *file){int flag; /* flag for success or not */char key;search(); /* search the the dos boot sector: head , cylinder and sector */ init(D); /* initialize the dos boot sector data to the buffer */printf("\nWarning...");printf("\nIt might destory your harddisk!");printf("\nDo you want to a backup?(y/n)");key=getch();switch(key){case 'y':case 'Y':infina(fnwrite); /* input the backup filename */if(!backupdbr(fnwrite)){printf("\nBackup error!");flag=0;break;}case 'n':case 'N':if(!fileopen(R,file)) /* open the existed backup file data to buffer */ {printf("\nBackup file %s open error!",file);flag=0;return flag;}}/* rewrite the dos boot sector with the buffer data */if(biosdisk(0x03,0x80,head,cylinder,sector,1,buff1)) {printf("\nWrite Master Boot Sector error!");flag=0;}else{printf("\nWrite Dos Boot Sector OK!");flag=1;}}/* backup the Master Boot Sector data to file */int backupmbr(char *file){int flag=1;init(M); /* initialize the master boot sector to the buffer */ if(!fileopen(W,file)){printf("\nBackup file write error!");flag=0;}return flag;}int fileopen(int f,char *file)/* f for read or creat file */{int flag=1;if(f==0){if((fp=fopen(file,"rb"))!=NULL){fread(buff1,512,1,fp);fclose(fp);}else flag=0;}if(f==1){if((fp=fopen(file,"wb"))!=NULL){fwrite(buff,512,1,fp);fclose(fp);}else flag=0;}return flag;}int writembr(char *file){int flag=1;char key;printf("\nWarning...");printf("\nIt might destory your harddisk!");printf("\nDo you want to a backup?(y/n)");key=getch();switch(key){case 'y':case 'Y':infina(fnwrite);init(M); /* initialize the MBR to buffer */if(!backupmbr(fnwrite)) /* backup the MBR */{printf("\nBackup error!");flag=0;}printf("\nFile %s backup ok!",fnwrite);if(!biosdisk(0x03,0x80,0,0,3,1,buff))printf("\nThe old MBR write to head:0 , Cylinder:0 ,Sector:1 error!");if(!biosdisk(0x03,0x80,0,0,5,1,buff))printf("\nThe old MBR write to head:0 , Cylinder:0 ,Sector:1 error!");printf("\nThe old MBR also backup to the harddisk side 0 cylinder 0 sector 3 and 5.");flag=1;case 'n':case 'N':if(!fileopen(R,file)) /* open the existed backup file */{flag=0;return flag;}}if(biosdisk(0x03,0x80,0,0,1,1,buff1)) /* Rewrite the MBR with buffer1 */ {printf("\nWrite Master Boot Sector error!");flag=0;}else{printf("\nWrite Master Boot Sector OK!");flag=1;}return flag;}int init(int f){int i;int result=1;for(i=0;i<512;i++) /* initialize the buffer */buff[i]=0;if(f){if(biosdisk(0x02,0x80,0,0,1,1,buff)) /* read the Mbr to buffer */{result=0;}}else if(biosdisk(0x02,0x80,head,cylinder,sector,1,buff)) {printf("\nDos Boot Sector read error!");result=0;}return result;}main(){int far *res=(int far *)0x472; /* the data for reset */int i,j,k;char key;reset=MK_FP(0xffff,0x0000); /* reset interrupt address */clrscr();while(1){printf("\nSetMbr programme...('h' for help)");printf("\n.");key=getch();printf("%c",key);switch(key){case 'H':case 'h':help();break;/* rewrite the MBR sector */case 'w':case 'W':infina(fnread); /* input the existed file name */ if(!writembr(fnread)){printf("\nWrite HardDisk MBR error!");printf("\nPress 'v' to check it.");printf("\nPress 'm' to fix it.");}elseprintf("\nWrite HardDisk MBR OK!");break;/* backup the MBR sector */case 'b':case 'B':infina(fnwrite);if(!backupmbr(fnwrite))printf("\nBackup MBR error!");elseprintf("\nBackup MBR OK!");break;/* rewrite the dos boot sector */case 'd':case 'D':infina(fnread);{printf("\nWrite Dos Boot Sector error!");printf("\nPress 'v' to view the Dos Boot Sector!");break;}break;/* backup the dos boot sector */case 'o':case 'O':infina(fnwrite);search();init(D);if(!backupdbr(fnwrite))printf("\nBackup Dos Boot Sector error!");elseprintf("\nBackup Dos Boot Sector OK!");break;/* rewrite the dos boot sector with default data */ case 'i':case 'I':search();init(D);printf("\nIt would modify the Dos Boot secotr!");printf("\nDo you want to backup?(Y/N)");key=getch();if(key=='y' || key=='Y'){if(!backupmbr(fnwrite))printf("\nBackup Error!");elseprintf("\nBackup OK!");}elseif(key=='n' || key=='N')printf("\nWarning:it would modify the Dos Boot Sector!"); /* write the sector2 to the dos boot sector */if(biosdisk(0x03,0x80,head,cylinder,sector,1,sector2)!=0) printf("\nDos Boot Sector Write error!");elseprintf("\nDos Boot Sector Write OK!");break;/* reset the machine */case 'r':case 'R':*res=0x1234;(*reset)();/* view the harddisk sector data */case 'v':case 'V':search();printmbr();break;/* fixed the flappy boot sector */case 'f':case 'F':printf("\nWhich dekette? -> (A,B,...):");key=getch();printf("%1c:",key);if(key>=97)key=key-97;elsekey=key-65;/* if(detect(0x10,key,0)){printf("\nDriver %1c: not ready!",key+65);break;}elseif(detect(0x13,key,1)==0x03){printf("\nDriver %1c: write protect!",key+65);break;}else */if(biosdisk(0x03,key,0,0,1,1,sector2))printf("\nDriver %c: write error!",key+65);elseprintf("\nDrive %1c: write OK!",key+65);break;/* fixed the MBR with default data */case 'm':case 'M':printf("\nIt would modify the Master Boot Record.");printf("\nDo you want to backup?(Y/N)");key=getch();printf("%1c",key);if(key=='y' || key=='Y'){infina(fnwrite);if(!backupmbr(fnwrite)){printf("\nBackup Error!");break;}}elseif(key=='n' || key=='N')printf("\nWarning:it would modify the Master Boot Sector!");init(M);if((buff[0x1be]&0x00ff)==0x80 || (buff[0x1be+16]&0x00ff)==0x80|| (buff[0x1be+32]&0x00ff)==0x80 || (buff[0x1be+48]&0x00ff)==0x80) copypart(buff+0x1be,sector1+0x1be);if(biosdisk(0x03,0x80,0,0,1,1,sector1)){printf("\nHardDisk Write error!");break;}else{printf("\nHardDisk Write OK!");printf("\nPress 'v' to check it.");}break;/* dos shell */case 's':case 'S':printf("\nPress 'Exit' to return....");system("");break;/* exit */case 'q':case 'Q':title();return 1;/* print the undefine command */default:printf("%cBad command!",27);}}}/* display the information */void title(){printf("\nThank you for using the programme...");printf("\nProgrammer:Crystal.Mouse");printf("\nDate:05/01/1999");}/* change the destination partition table data with the source data */ int copypart(char *src,char *dest){char len=0x40;while(len>=0){*(dest+len)=*(src+len);len--;}}/* input the filename */void infina(char *file){printf("\nPlease input the file name:");scanf("%s",file);}void search(){int i,addr;init(M);for(i=0x1be;i<0x1fe;i++)if((buff[i]&0x00ff)==0x80){addr=i;break;}head=buff[addr+1];sector=(buff[addr+2]<<2)>>2;cylinder=(buff[addr+2]>>6)*256+buff[addr+3]; }/* close the cursor */void closecur(){union REGS r;r.h.ah=1;r.h.ch=0x20;int86(0x10,&r,&r);}/* open the cursor */void opencur(){union REGS r;r.h.ah=1;r.h.ch=12;r.h.cl=13;int86(0x10,&r,&r);}void help(){printf("\n\tMaster Boot sector backup programme...");printf("\n\tH: help.");printf("\n\tW: ReWrite the Master Boot Record from a file.");printf("\n\tB: Backup the Master Boot Record to a file.");printf("\n\tO: Save the Dos Boot Sector to a file.");printf("\n\tD: Rewrite the Dos Boot Sector from a file.");printf("\n\tI: Rewrite the Dos Boot Sector with a default.");printf("\n\tV: View the Master Boot Record.");printf("\n\tF: Fixed the floppy Boot Sector.");printf("\n\tM: The same with Command:'Fdisk /mbr'.");printf("\n\tS: Dos shell.");printf("\n\tQ: Exit the programme.");printf("\n Press any key to continue...");getch();sound(2000);delay(2000);nosound();}/* print the mbr */int printmbr(){int count=1;int key;int f=0;closecur();init(M);display(count,&f);while(bioskey(1)==0);key=bioskey(0);while(1){switch(key){case ESC:resetwin();return 1;case HOME:count=1;f=0; break;case END: count=63;f=0; break;case PGUP: case UP: case LEFT: if(count<=1) count=63; elsecount--;f=0; break;case PGDN: case DOWN: case RIGHT: if(count>=63) count=1; elsecount++;f=0; break;case F2:if(f==0){f=1; break;}{f=0;break;}case F1:resetwin();printf("\nIt would save the sector to a file...");if(f){ if(biosdisk(0x02,0x80,head,cylinder,sector,1,buff)!=0) {printf("\nharddisk Dos Boot Sector read error!");break;}}elseif(biosdisk(0x02,0x80,0,0,count,1,buff)){printf("\nHardDisk MBR read error!");break;}infina(fnwrite);if(!fileopen(W,fnwrite))printf("\nFile %s Write error!",fnwrite);else{printf("\nFile %s save OK.",fnwrite);printf("\nPress any key to return...");}break;default:break;}display(count,f);while(bioskey(1)==0);key=bioskey(0);}}/* reset the screen */void resetwin(){opencur();window(1,1,80,25);textcolor(WHITE);textbackground(BLACK);clrscr();}/* put the buffer data to the screen */ int display(int count,int f){int lines,i;resetwin();closecur();i=count;if(f)if(biosdisk(0x02,0x80,head,cylinder,sector,1,buff)){printf("\nHarddisk read error!");resetwin();return 0;}}elseif(biosdisk(0x02,0x80,0,0,count,1,buff)){printf("\nHarddisk read error!");resetwin();return 0;}window(1,25,80,25);textbackground(CYAN);textcolor(WHITE);clrscr();cprintf(" HELP:ESC PGUP PGDN HOME END %c %c %c %c %c ",24,26,25,27,179); textcolor(RED);cprintf("F1");textcolor(WHITE);cprintf(":Save this sector to a file.");cprintf(" 05/01/99");window(1,1,80,1);textbackground(LIGHTGRAY);textcolor(LIGHTGREEN);clrscr();cprintf(" HardDisk C:1 %c 63 Sector",196);cprintf(" ( DOS BOOT SECTOR ) By: Howard.Crystal ");elsecprintf(" (Hard Disk Partition Table) By: Howard.Crystal ");window(1,2,80,24);textbackground(BLUE);textcolor(WHITE);clrscr();gotoxy(1,1);if(!f){cprintf(" Head:%-d Cylinder:%-d Sector:%-d",0,0,i);cprintf(" F2: View Dos Boot Sector\n");}else{cprintf(" Head:%-d Cylinder:%-d Sector:%-d",head,cylinder,sector); cprintf(" F2: View Master Boot Sector\n");}lines=1;gotoxy(1,1);for(i=0;i<512;i++){if(i%24==0){lines++;gotoxy(1,lines);}if(i%4==0)cprintf(" ");if(f)if(buff[510]==0x55 && (buff[511]&0x00ff)==0xaa)if(i>=510){textattr(RED+(BLUE<<4)+BLINK); /* flash the special data */sound(1000);delay(1000);nosound();cprintf("%02x",buff[i]&0x00ff);textcolor(WHITE);}elsecprintf("%02x",buff[i]&0x00ff);elsecprintf("%02x",buff[i]&0x00ff);elseif(buff[510]==0x55 && (buff[511]&0x00ff)==0xaa)if(i>=0x1be && (((i-0x1be)%16==0 && (buff[i]&0x00ff)==0x80) || (buff[i]&0x00ff)==0x55 || (buff[i]&0x00ff)==0xaa)){textattr(RED+(BLUE<<4)+BLINK);cprintf("%02x",buff[i]&0x00ff);sound(1000);delay(1000);nosound();textcolor(WHITE);}elsecprintf("%02x",buff[i]&0x00ff);elsecprintf("%02x",buff[i]&0x00ff); }lines=1;for(i=0;i<512;i++){if(i%24==0)lines++;gotoxy(57+i%24,lines);if(isprint(buff[i]))cprintf("%1c",buff[i]);elsecprintf(".");}return 1;}。
windows物理磁盘扇区读写示例总结
windows物理磁盘扇区读写示例总结以Windows物理磁盘扇区读写示例总结为标题Windows操作系统是目前最常用的桌面操作系统之一,它的文件系统是建立在物理磁盘上的。
在Windows中,可以通过读写物理磁盘扇区来进行文件的存储和访问。
本文将通过一个示例来总结Windows物理磁盘扇区的读写过程。
我们需要了解什么是物理磁盘扇区。
物理磁盘是计算机中用于存储数据的硬件设备,它被分成了许多小的存储单元,每个存储单元称为一个扇区。
在Windows中,一个扇区的大小通常为512字节。
假设我们要在物理磁盘上创建一个名为"test.txt"的文件,并向其中写入一段文字。
首先,我们需要找到物理磁盘的设备号,可以通过"磁盘管理"工具或命令行工具来查看。
假设我们找到的设备号为"\\.\PhysicalDrive1"。
接下来,我们需要打开磁盘设备,以便进行读写操作。
在Windows中,可以使用CreateFile函数来打开磁盘设备。
示例代码如下:HANDLE hDisk = CreateFile("\\\\.\\PhysicalDrive1",GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_NO_BUFFERING,NULL);if (hDisk == INVALID_HANDLE_VALUE) {// 打开磁盘设备失败return -1;}我们通过CreateFile函数打开了磁盘设备,并将返回的句柄保存在变量hDisk中。
接下来,我们可以使用ReadFile函数来读取磁盘的扇区内容。
示例代码如下:BYTE buffer[512];DWORD bytesRead;if (!ReadFile(hDisk, buffer, sizeof(buffer), &bytesRead, NULL)) { // 读取扇区内容失败CloseHandle(hDisk);return -1;}ReadFile函数将磁盘扇区的内容读取到了buffer数组中,并将实际读取的字节数保存在变量bytesRead中。
createfile磁盘扇区读写
创建磁盘扇区读写操作一、背景知识1.1 磁盘结构磁盘是计算机中存储数据的重要设备,其主要由盘片、读写头和控制电路等组成。
盘片被划分成许多同心圆的磁道,每个磁道又被分成若干个扇区。
在磁盘中,扇区是最小的物理存储单元,通常大小为512字节或4KB。
1.2 文件系统磁盘的数据存储是通过文件系统来管理的,不同的操作系统有不同的文件系统,常见的有FAT、NTFS、EXT等。
文件系统主要负责管理文件的存储位置、文件的读写操作、以及磁盘空间的管理。
1.3 磁盘扇区的读写磁盘扇区的读写是指计算机通过读写头将数据从磁盘读取到内存,或者将数据从内存写入到磁盘的过程。
这是计算机存储系统中非常重要的一部分,对于系统的性能和稳定性有着直接的影响。
二、磁盘扇区读写操作流程2.1 扇区读取流程磁盘扇区的读取操作通常包括以下几个步骤:1. 应用程序发送读取请求当应用程序需要从磁盘中读取数据时,会向操作系统发送读取请求,请求读取指定扇区的数据。
2. 磁盘控制器响应请求操作系统接收到读取请求后,会调用相应的磁盘驱动程序来响应请求,驱动程序会将请求发送给磁盘控制器。
3. 读取数据到内存磁盘控制器在收到读取请求后,会将读取数据的扇区位置区域传递给磁盘驱动器,驱动程序再向磁盘发送读取指令,磁盘根据指令找到相应的扇区,并将数据传输到内存中。
4. 数据传输完成当数据传输完成后,磁盘控制器会通知操作系统读取操作已完成,并将读取的数据返回给应用程序。
2.2 扇区写入流程磁盘扇区的写入操作流程与读取类似,主要包括以下几个步骤:1. 应用程序发送写入请求当应用程序需要向磁盘中写入数据时,会向操作系统发送写入请求,请求将指定的数据写入到指定的扇区。
2. 磁盘控制器响应请求操作系统接收到写入请求后,会调用相应的磁盘驱动程序来响应请求,驱动程序会将请求发送给磁盘控制器。
3. 写入数据到磁盘磁盘控制器在收到写入请求后,会将写入数据的扇区位置区域传递给磁盘驱动器,驱动程序再向磁盘发送写入指令,磁盘将数据写入到指定的扇区。
磁盘读写原理
磁盘读写原理
磁盘读写原理涉及到计算机中的存储器系统和磁盘的物理和逻辑特性。
磁盘读写是指将数据存储在磁盘上的过程。
在磁盘上的数据通常是以扇区的形式存储的,每个扇区的大小通常为4KB或512KB。
当一个扇区需要被读取时,操作系统通过磁盘控制器将需要读取的扇区与内存中的地址进行比较,并将其从磁盘读取到内存中。
当需要写入数据时,系统将需要将数据从一个扇区写入到另一个扇区。
同样,操作系统通过磁盘控制器将需要写入的扇区与内存中的地址进行比较,并将其从磁盘写入到内存中。
在读取数据时,操作系统需要将需要读取的数据从磁盘读取到内存中,并将其保存在一个临时的内存中,以便进行后续的处理。
在写入数据时,系统需要将数据从内存中写入磁盘,并将其保存在一个临时的内存中,以便进行后续的处理。
磁盘读写的过程中涉及到多种硬件和软件组件,包括磁盘控制器、内存控制器、磁盘和内存之间的数据传输通道以及文件系统等。
磁盘读写是计算机系统中一个非常重要的环节,它使得计算机能够高效地存储和读取数据。
读取磁盘数据的各种方式
读取磁盘数据的各种方式磁盘数据是计算机中十分重要的一项数据,如何有效地读取磁盘数据成为了程序员们必须掌握的技能之一。
下面将引导大家通过几个步骤,了解读取磁盘数据的各种方式。
第一步,读取磁盘数据的前置准备。
为了成功地读取磁盘数据,需要首先了解磁盘结构及数据存储方式,并准备好读取磁盘数据的工具。
第二步,通过操作系统API读取磁盘数据。
Windows操作系统提供了多种API用于读取磁盘数据,如ReadFile,WriteFile等。
使用这些API函数,可以以字节为单位读写磁盘上的数据。
其中ReadFile函数可以读取指定长度的数据,直到读取到数据结尾或者指定长度的数据被读完。
第三步,使用文件系统工具读取磁盘数据。
在Windows操作系统中,文件系统工具是可以通过操作系统APIs来访问磁盘的,其中最常用的是NTFS和FAT32文件系统。
在文件系统中,文件通常以分配单元的形式存储在磁盘上,而每个分配单元又可以分为一条或多条簇。
读取磁盘数据时可以使用文件系统工具遍历每个分配单元并读取数据。
第四步,使用磁盘编辑器读取磁盘数据。
磁盘编辑器是一种可以直接访问磁盘数据的工具,通常可用于找回磁盘上的丢失数据。
通过磁盘编辑器可以直接读取磁盘的二进制数据,并对其进行分析和编辑。
在Windows操作系统中,磁盘编辑器有很多种,如WinHex,DiskEditor等。
总之,在读取磁盘数据时,需要掌握一定的磁盘基础知识及常用的读取磁盘数据工具,并通过操作系统API,文件系统工具和磁盘编辑器等不同的方式来读取磁盘数据。
只有不断学习和掌握这些技能,程序员们才能更好地解决各种读取磁盘数据问题。
ANSI C标准函数库 C语言所有库函数 VC++6.0 NI CVI 单片机
原形:void far *farmalloc(unsigned long nbytes)
使用方式:fptr=farmalloc(字节数);
头文件:stdlib.h
bcd()把一个数转换成对应的BCD码的函数
原形:bcd bcd(int x)
bcd bcd(double x)
bcd bcd(double x,int decimals)
注意:BCD码的精度可达17位。参数decimals是可选的,用来指定转换后小数点后的位数。
头文件:bcd.h
bdos()
原形∶int bdos(intfnum,unsigned dx,unsigned al)
其中fnum是系统调用号;dx是传给寄存器DX的值;al是传给寄存器AL的值;
功能∶DOS系统调用(INT21H)
返回值∶AX中的值
biosdisk()调用BIOS磁盘驱动程序函数
原形:char biosdisk(int cmd,int drive,int head,int track,int sector,int nsects,void *buffer)
功能:根据amode的值,设置由path所指文件的存取权限。
amode的值 存取权限
S_IWRITE允许写
S_IREAD允许读(只读)
S_IREAD|S_IWRITE可读可写
返回值:0(成功);-1(失败)
头文件:io.h、sys\stat.h
clock()
原形∶longclock(void)
功能∶测得从程序开始到调用处处理机所用的时间
功能∶计算arg(弧度)的余弦值
头文件∶math.h
不同Windows平台下磁盘逻辑扇区的直接读写
( 对读 )、IT 6 ( 绝 N 2 绝对写 )等功 能调用实现对磁盘 逻辑扇 区或 物理 扇区的读写 是很方便 的,C语言 中还有对应上述功能 调用 的 函数 :b s s、as a i d k br d和 a sre等 =但 在 Wid读 鼋 , ,
命 令 ,便可 以实现 WI 3 应 用程序和磁盘设 备驱动 程序间的 N2
通信 ,从而实现对磁盘的存取。下面是 V N 2定义 的一些控 WI 3 制命令字 : V N 2D O 0 O T ( ) 实现 IT 1 WI3  ̄ I C SI C L 1 N 2 功能 V N 2O O _ O j T 5 WI 3 ̄ l CD S N 2 V N 2 O _O _ I6 W1 3 I CD SI ' N2 V N 2 ICD S[ T 3 WI 3 O _ O _ 1 N
维普资讯
实用第 一
智慧密 集
%
张 泽 民
N L; UL )
一
、
概 述
在 D S操作 系统 下 ,通过 BO O I S的 I T 3 O N 1 、D S的 IT 5 N ' 2
第二步 :填充中断所用到 的相关寄存器 。这里将寄存器放 在 一个结 构中 ,结构 定义 如下 ( 有关 IT 3 用 的寄存器情 N 1使 况 ,请参阅相关资料 ):
D O R S W D E I D O R F AG, W D E L
,/ e i a /f g l s a
lNT GIT 1 RE S ERS I 3
u s n d c a uf 5 j / 定 义缓 冲 区. 萱读 覃扇 n i e h B f r 1 . g r e[ 2 放 区数据 IT 3 R GI E Srg={ } , 定义寄存器 结构 夏量 N 1 E S R e T 0: /
cscan算法磁头移动总数计算
一、概述在磁盘调度算法中,cscan算法是一种常用的算法之一。
它主要用于减少磁头的寻道时间,从而提高磁盘I/O性能。
本文将会介绍cscan 算法的基本原理,并详细解释如何计算磁头的总移动距离。
二、cscan算法介绍1.1 cscan算法是一种循环扫描算法,它沿着磁道的方向进行扫描,当磁头到达磁盘的最后一个磁道时,会立即返回到最开始的磁道进行扫描。
1.2 cscan算法的特点是磁头始终向同一个方向进行移动,这样可以尽量减少磁头的寻道时间,提高磁盘I/O性能。
三、cscan算法磁头移动总数计算2.1 我们需要了解磁盘的结构。
磁盘由多个磁道组成,每个磁道又由多个扇区组成。
磁头在进行读写操作时,需要先定位到指定的磁道,然后找到相应的扇区进行读写。
2.2 在cscan算法中,磁头的移动方向始终是同一个。
当需要进行磁盘I/O操作时,磁头会按照顺时针或逆时针的方向进行移动,直到找到目标磁道进行读写操作。
2.3 磁头的总移动距离可以通过以下公式进行计算:总移动距离 = (最后一次访问的磁道号 - 第一次访问的磁道号) + (磁盘的磁道数 - 1)四、实例分析3.1 假设一个磁盘有100个磁道,磁头需要按照cscan算法进行磁盘I/O操作。
首次访问的磁道号为50,最后一次访问的磁道号为80。
3.2 根据上述公式,可以计算出磁头的总移动距离为:总移动距离 = (80 - 50) + (100 - 1) = 30 + 99 = 129磁头的总移动距离为129。
五、总结cscan算法是一种常用的磁盘调度算法,它通过减少磁头的寻道时间来提高磁盘I/O性能。
在实际应用中,我们可以通过计算磁头的总移动距离来评估cscan算法的性能表现。
希望本文对读者了解cscan算法的磁头移动总数计算有所帮助。
六、参考文献[1] Silberschatz A, Galvin PB, Gagne G. Operating System Concepts. Wiley, 2018.[2] Tanenbaum AS, Bos H. Modern Operating Systems. Pearson Education, 2014.七、 cscan算法在实际应用中的优缺点4.1 cscan算法作为一种常见的磁盘调度算法,其优点主要在于能够有效减少磁头的寻道时间,从而提高了磁盘I/O性能。
c 语言 读写 fat16
c 语言读写 fat16读写FAT16是指使用C语言编程来实现对FAT16文件系统的读取和写入操作。
FAT16是一种常见的文件系统格式,广泛应用于磁盘和存储设备中。
本文将介绍如何使用C语言读取和写入FAT16文件系统。
我们需要了解FAT16文件系统的结构。
FAT16文件系统由引导扇区、FAT表、根目录区和数据区组成。
引导扇区是文件系统的起始扇区,其中包含了文件系统的基本信息和引导程序。
FAT表是一个表格,用于记录文件的存储位置和状态。
根目录区用于存储文件和目录的信息。
数据区则是存储实际文件内容的区域。
在C语言中,我们可以使用文件操作函数来读取和写入FAT16文件系统。
首先,我们需要打开一个FAT16格式的磁盘或存储设备,可以使用C语言中的fopen函数来打开设备文件。
然后,我们可以使用fread函数来读取文件内容,使用fwrite函数来写入文件内容。
读取FAT16文件系统的第一步是读取引导扇区。
引导扇区的大小通常为512字节,我们可以使用fread函数读取512字节的数据到一个缓冲区中。
然后,我们可以解析缓冲区中的数据,获取文件系统的各种信息,如文件系统类型、FAT表的起始扇区、根目录区的起始扇区等。
接下来,我们可以读取FAT表和根目录区的数据。
FAT表的起始扇区可以通过引导扇区中的信息获得,我们可以使用fseek函数将文件指针移动到对应的起始扇区,然后使用fread函数读取FAT表的数据。
FAT表中的每个条目通常占用2个字节,表示文件的下一个簇号或文件结束标志。
根目录区的起始扇区也可以通过引导扇区中的信息获得,我们可以使用fseek函数将文件指针移动到对应的起始扇区,然后使用fread函数读取根目录区的数据。
根目录区中的每个条目通常占用32个字节,表示一个文件或目录的信息,包括文件名、扩展名、属性、大小等。
读取完引导扇区、FAT表和根目录区的数据后,我们就可以根据这些数据来读取文件的内容了。
根据文件的簇号和FAT表的信息,我们可以计算出文件内容所在的簇号和扇区号。
C语言函数大全
C语言函数大全函数名:abort功能: 异常终止一个进程用法: void abort(void)函数名: abs功能: 求整数的绝对值用法: int abs(int i)函数名: absread, abswirte功能: 绝对磁盘扇区读、写数据用法: int absread(int drive, int nsects, int sectno, void *buffer)int abswrite(int drive, int nsects, in tsectno, void *buffer函数名: access功能: 确定文件的访问权限用法: int access(const char *filename, int amode)函数名: acos功能:反余弦函数用法: double acos(double x)函数名: allocmem功能: 分配DOS存储段用法:int allocmem(unsigned size, unsigned *seg)函数名: arc功能: 画一弧线用法:void far arc(int x, int y, int stangle, int endangle, int radius)函数名: asctime功能: 转换日期和时间为ASCII码用法:char *asctime(const struct tm *tblock)函数名: asin功能:反正弦函数用法: double asin(double x)函数名: assert功能: 测试一个条件并可能使程序终止用法:void assert(int test)函数名: atan功能: 反正切函数用法: double atan(double x)函数名: atan2功能: 计算Y/X的反正切值用法: double atan2(double y, double x)函数名:atexit功能: 注册终止函数用法: int atexit(atexit_t func)函数名: atof功能: 把字符串转换成浮点数用法:double atof(const char *nptr)函数名: atoi功能: 把字符串转换成长整型数用法: int atoi(const char *nptr)函数名: atol功能: 把字符串转换成长整型数用法: long atol(const char *nptr)函数名: bar功能: 画一个二维条形图用法: void far bar(int left, int top, int right, int bottom)函数名: bar3d功能: 画一个三维条形图用法:void far bar3d(int left, int top, int right, int bottom,int depth, int topflag)函数名: bdos功能: DOS系统调用用法: int bdos(int dosfun, unsigned dosdx, unsigned dosal)函数名:bdosptr功能:DOS系统调用用法: int bdosptr(int dosfun, void*argument, unsigned dosal)函数名:bioscom功能: 串行I/O通信用法:int bioscom(int cmd, char abyte, int port)函数名:biosdisk功能: 软硬盘I/O用法:int biosdisk(int cmd, int drive, int head, int track, int sectorint nsects, void *buffer)函数名:biosequip功能: 检查设备用法:int biosequip(void)函数名:bioskey功能: 直接使用BIOS服务的键盘接口用法:int bioskey(int cmd)函数名:biosmemory功能: 返回存储块大小用法:int biosmemory(void)函数名:biosprint功能: 直接使用BIOS服务的打印机I/O用法:int biosprint(int cmd, int byte, int port)函数名:biostime功能: 读取或设置BIOS时间用法: long biostime(int cmd, long newtime)函数名: brk功能: 改变数据段空间分配用法:int brk(void *endds)函数名:bsearch功能: 二分法搜索用法:void *bsearch(const void *key, const void *base, size_t *nelem,size_t width, int(*fcmp)(const void *, const *))函数名: cabs功能: 计算复数的绝对值用法: double cabs(struct complex z);函数名:calloc功能:分配主存储器用法:void *calloc(size_t nelem, size_t elsize);函数名: ceil功能: 向上舍入用法: double ceil(double x);函数名: cgets功能: 从控制台读字符串用法: char *cgets(char *str)函数名:chdir功能: 改变工作目录用法: int chdir(const char *path);函数名:_chmod, chmod功能: 改变文件的访问方式用法: int chmod(const char *filename, int permiss);函数名:chsize功能: 改变文件大小用法: int chsize(int handle, long size);函数名: circle功能: 在给定半径以(x, y)为圆心画圆用法: void far circle(int x, int y, int radius);函数名: cleardevice功能: 清除图形屏幕用法: void far cleardevice(void);函数名:clearerr功能: 复位错误标志用法:void clearerr(FILE *stream);函数名: clearviewport功能: 清除图形视区用法: void far clearviewport(void);函数名:_close, close功能: 关闭文件句柄用法:int close(int handle);函数名: clock功能:确定处理器时间用法: clock_t clock(void);函数名:closegraph功能: 关闭图形系统用法: void far closegraph(void);函数名:clreol功能: 在文本窗口中清除字符到行末用法:void clreol(void)函数名:clrscr功能: 清除文本模式窗口用法:void clrscr(void);函数名: coreleft功能: 返回未使用内存的大小用法:unsigned coreleft(void);函数名: cos功能: 余弦函数用法:double cos(double x);函数名:cosh功能: 双曲余弦函数用法: dluble cosh(double x);函数名: country功能: 返回与国家有关的信息用法: struct COUNTRY *country(int countrycode, struct country *country); 函数名: cprintf功能: 送格式化输出至屏幕用法:int cprintf(const char *format[, argument, ...]);函数名: cputs功能: 写字符到屏幕用法: void cputs(const char *string);函数名: _creat creat功能: 创建一个新文件或重写一个已存在的文件用法: int creat (const char *filename, int permiss)函数名:creatnew功能: 创建一个新文件用法:int creatnew(const char *filename, int attrib);函数名: cscanf功能: 从控制台执行格式化输入用法:int cscanf(char*format[,argument, ...]);函数名: ctime功能: 把日期和时间转换为字符串用法:char *ctime(const time_t *time);函数名: ctrlbrk功能: 设置Ctrl-Break处理程序用法: void ctrlbrk(*fptr)(void);函数名: delay功能: 将程序的执行暂停一段时间(毫秒)用法: void delay(unsigned milliseconds); 函数名: delline功能: 在文本窗口中删去一行用法: void delline(void);函数名:detectgraph功能: 通过检测硬件确定图形驱动程序和模式用法: void far detectgraph(int far*graphdriver, int far *graphmode);函数名: difftime功能: 计算两个时刻之间的时间差用法: double difftime(time_t time2, time_t time1);函数名: disable功能: 屏蔽中断用法:void disable(void);函数名: div功能: 将两个整数相除, 返回商和余数用法:div_t (int number, int denom);函数名: dosexterr功能: 获取扩展DOS错误信息用法:int dosexterr(struct DOSERR *dblkp); 函数名: dostounix功能: 转换日期和时间为UNIX时间格式用法: long dostounix(struct date *dateptr, struct time *timeptr);函数名: drawpoly功能: 画多边形用法: void far drawpoly(int numpoints, int far *polypoints);函数名:dup功能: 复制一个文件句柄用法: int dup(int handle);函数名:dup2功能: 复制文件句柄用法: int dup2(int oldhandle, int newhandle);函数名: ecvt功能: 把一个浮点数转换为字符串用法: char ecvt(double value, int ndigit, int *decpt, int *sign);函数名: ellipse功能: 画一椭圆用法:void far ellipse(int x, int y, int stangle, int endangle,int xradius, int yradius);函数名: enable功能: 开放硬件中断用法: void enable(void);函数名: eof功能: 检测文件结束用法: int eof(int *handle);函数名: exec...功能: 装入并运行其它程序的函数用法: int execl(char *pathname, char *arg0, arg1, ..., argn, NULL);int execle(char *pathname, char *arg0,arg1, ..., argn, NULL,char *envp[]);int execlp(char *pathname, char *arg0,arg1, .., NULL);int execple(char *pathname, char *arg0,arg1, ..., NULL,char *envp[]);int execv(char *pathname, char *argv[]);int execve(char *pathname, char *argv[], char *envp[]);int execvp(char *pathname, char *argv[]); int execvpe(char *pathname, char *argv[], char *envp[]);函数名:exit功能: 终止程序用法: void exit(int status);函数名: exp功能: 指数函数用法: double exp(double x);函数名: gcvt功能: 把浮点数转换成字符串用法: char *gcvt(double value, int ndigit, char *buf);函数名: geninterrupt功能: 产生一个软中断用法: void geninterrupt(int intr_num);函数名: getarccoords功能: 取得最后一次调用arc的坐标用法: void far getarccoords(struct arccoordstype far *arccoords);函数名: getaspectratio功能: 返回当前图形模式的纵横比用法: void far getaspectratio(int far *xasp, int far *yasp);函数名: getbkcolor功能: 返回当前背景颜色用法: int far getbkcolor(void);函数名: getc功能: 从流中取字符用法: int getc(FILE *stream);函数名: getcbrk功能: 获取Control_break设置用法: int getcbrk(void);函数名: getch功能: 从控制台无回显地取一个字符用法: int getch(void);函数名: getchar功能: 从stdin流中读字符用法: int getchar(void);函数名: getche功能: 从控制台取字符(带回显)用法: int getche(void);函数名: getcolor功能: 返回当前画线颜色用法: int far getcolor(void);函数名: getcurdir功能: 取指定驱动器的当前目录用法: int getcurdir(int drive, char *direc); 函数名: getcwd功能: 取当前工作目录用法: char *getcwd(char *buf, int n);函数名: getdate功能: 取DOS日期用法: void getdate(struct *dateblk);函数名: getdefaultpalette功能: 返回调色板定义结构用法: struct palettetype *far getdefaultpalette(void);函数名: getdisk功能: 取当前磁盘驱动器号用法: int getdisk(void);函数名: getdrivername功能: 返回指向包含当前图形驱动程序名字的字符串指针用法: char *getdrivename(void);函数名: getdta功能: 取磁盘传输地址用法: char far *getdta(void);函数名: getenv功能: 从环境中取字符串用法: char *getenv(char *envvar);函数名: getfat, getfatd功能: 取文件分配表信息用法: void getfat(int drive, struct fatinfo *fatblkp);函数名: getfillpattern功能: 将用户定义的填充模式拷贝到内存中用法: void far getfillpattern(char far*upattern);函数名: getfillsettings功能: 取得有关当前填充模式和填充颜色的信息用法: void far getfillsettings(struct fillsettingstype far *fillinfo);函数名: getftime功能: 取文件日期和时间用法: int getftime(int handle, struct ftime *ftimep);函数名: getgraphmode功能: 返回当前图形模式用法: int far getgraphmode(void);函数名: getftime功能: 取文件日期和时间用法: int getftime(int handle, struct ftime *ftimep);函数名: getgraphmode功能: 返回当前图形模式用法: int far getgraphmode(void);函数名: getimage功能: 将指定区域的一个位图存到主存中用法: void far getimage(int left, int top, int right, int bottom,void far *bitmap);函数名: getlinesettings功能: 取当前线型、模式和宽度用法: void far getlinesettings(struct linesettingstype far *lininfo):函数名: getmaxx功能: 返回屏幕的最大x坐标用法: int far getmaxx(void);函数名: getmaxy功能: 返回屏幕的最大y坐标用法: int far getmaxy(void);函数名: getmodename功能: 返回含有指定图形模式名的字符串指针用法: char *far getmodename(intmode_name);函数名: getmoderange功能: 取给定图形驱动程序的模式范围用法: void far getmoderange(int graphdriver, int far *lomode,int far *himode);函数名: getpalette功能: 返回有关当前调色板的信息用法: void far getpalette(struct palettetype far *palette);函数名: getpass功能: 读一个口令用法: char *getpass(char *prompt);函数名: getpixel功能: 取得指定像素的颜色用法: int far getpixel(int x, int y);函数名: gets功能: 从流中取一字符串用法: char *gets(char *string);函数名: gettext功能: 将文本方式屏幕上的文本拷贝到存储区用法: int gettext(int left, int top, int right, int bottom, void *destin);函数名: gettextinfo功能: 取得文本模式的显示信息用法: void gettextinfo(struct text_info*inforec);函数名: gettextsettings功能: 返回有关当前图形文本字体的信息用法: void far gettextsettings(struct textsettingstype far *textinfo);函数名: gettime功能: 取得系统时间用法: void gettime(struct time *timep);函数名: getvect功能: 取得中断向量入口用法: void interrupt(*getvect(intintr_num));函数名: getverify功能: 返回DOS校验标志状态用法: int getverify(void);函数名: getviewsetting功能: 返回有关当前视区的信息用法: void far getviewsettings(struct viewporttype far *viewport);函数名: getw功能: 从流中取一整数用法: int getw(FILE *strem);函数名: getx功能: 返回当前图形位置的x坐标用法: int far getx(void);函数名: gety功能: 返回当前图形位置的y坐标用法: int far gety(void);函数名: gmtime功能: 把日期和时间转换为格林尼治标准时间(GMT)用法: struct tm *gmtime(long *clock);函数名: gotoxy功能: 在文本窗口中设置光标用法: void gotoxy(int x, int y);函数名: gotoxy功能: 在文本窗口中设置光标用法: void gotoxy(int x, int y);函数名: graphdefaults功能: 将所有图形设置复位为它们的缺省值用法: void far graphdefaults(void);函数名: grapherrormsg功能: 返回一个错误信息串的指针用法: char *far grapherrormsg(int errorcode);函数名: graphresult功能: 返回最后一次不成功的图形操作的错误代码用法: int far graphresult(void);函数名: _graphfreemem功能: 用户可修改的图形存储区释放函数用法: void far _graphfreemem(void far *ptr, unsigned size);函数名: _graphgetmem功能: 用户可修改的图形存储区分配函数用法: void far *far_graphgetmem(unsigned size);函数名: harderr功能: 建立一个硬件错误处理程序用法: void harderr(int (*fptr)());函数名: hardresume功能: 硬件错误处理函数用法: void hardresume(int rescode);函数名: highvideo功能: 选择高亮度文本字符用法: void highvideo(void);函数名: hypot功能: 计算直角三角形的斜边长用法: double hypot(double x, double y);函数名: imagesize功能: 返回保存位图像所需的字节数用法: unsigned far imagesize(int left, int top, int right, int bottom);函数名: initgraph功能: 初始化图形系统用法: void far initgraph(int far *graphdriver, int far *graphmode函数名: inport功能: 从硬件端口中输入用法: int inp(int protid);函数名: insline功能: 在文本窗口中插入一个空行用法: void insline(void);函数名: installuserdriver功能: 安装设备驱动程序到BGI设备驱动程序表中用法: int far installuserdriver(char far*name, int (*detect)(void));函数名: installuserfont功能: 安装未嵌入BGI系统的字体文件(CHR) 用法: int far installuserfont(char far*name);函数名: int86功能: 通用8086软中断接口用法: int int86(int intr_num, union REGS *inregs, union REGS *outregs)函数名: int86x功能: 通用8086软中断接口用法: int int86x(int intr_num, union REGS *insegs, union REGS *outregs,函数名: intdos功能: 通用DOS接口用法: int intdos(union REGS *inregs, union REGS *outregs);函数名: intdosx功能: 通用DOS中断接口用法: int intdosx(union REGS *inregs, union REGS *outregs,struct SREGS *segregs);函数名: intr功能: 改变软中断接口用法: void intr(int intr_num, struct REGPACK *preg);函数名: ioctl功能: 控制I/O设备用法: int ioctl(int handle, int cmd[,int*argdx, int argcx]);函数名: isatty功能: 检查设备类型用法: int isatty(int handle);函数名: itoa功能: 把一整数转换为字符串用法: char *itoa(int value, char *string, int radix);函数名: kbhit功能: 检查当前按下的键用法: int kbhit(void);函数名: keep功能: 退出并继续驻留用法: void keep(int status, int size);函数名: kbhit功能: 检查当前按下的键用法: int kbhit(void);函数名: keep功能: 退出并继续驻留用法: void keep(int status, int size);函数名: labs用法: long labs(long n);函数名: ldexp功能: 计算value*2的幂用法: double ldexp(double value, int exp); 函数名: ldiv功能: 两个长整型数相除, 返回商和余数用法: ldiv_t ldiv(long lnumer, long ldenom);函数名: lfind功能: 执行线性搜索用法: void *lfind(void *key, void *base, int *nelem, int width,int (*fcmp)());函数名: line功能: 在指定两点间画一直线用法: void far line(int x0, int y0, int x1, int y1);函数名: linerel功能: 从当前位置点(CP)到与CP有一给定相对距离的点画一直线用法: void far linerel(int dx, int dy);函数名: localtime功能: 把日期和时间转变为结构用法: struct tm *localtime(long *clock);函数名: lock功能: 设置文件共享锁用法: int lock(int handle, long offset, long length);函数名: log功能: 对数函数ln(x)用法: double log(double x);函数名: log10功能: 对数函数log用法: double log10(double x);函数名: longjump功能: 执行非局部转移用法: void longjump(jmp_buf env, int val); 函数名: lowvideo功能: 选择低亮度字符用法: void lowvideo(void);函数名: lrotl, _lrotl功能: 将无符号长整型数向左循环移位用法: unsigned long lrotl(unsigned long lvalue, int count);unsigned long _lrotl(unsigned long lvalue, int count);函数名: lsearch功能: 线性搜索用法: void *lsearch(const void *key, void *base, size_t *nelem,size_t width, int (*fcmp)(const void *, const void *));函数名: lseek功能: 移动文件读/写指针用法: long lseek(int handle, long offset, int fromwhere);main()主函数每一C 程序都必须有一main() 函数, 可以根据自己的爱好把它放在程序的某个地方。
C++读写磁盘绝对扇区
sector = 0;
if (absread(0, 1, sector, &buf) != 0){
perror("Disk problem"); exit(1);
}
printf("Read OK\n");
strt = 3;
程序例:
/* absread example */
#include
#include
#include
#include
int main(void){
int i, strt, ch_out, sector; char buf[512];
printf("Insert a diskette into drive A and press any key\n");
文,其内容原本磁盘存储数据副本,至于表示,依赖于原先存储格式及数据内容
abswrite函数内存指定数据写入磁盘特定位置,其内容二进制形式,想再找写入内容,用absread原位置读.
举简单例,比说C盘主引导区受损,则用软盘或光盘启系统,利用abswrite主引导区备份重新写入,覆盖逐级损部,即达手工修复目.
函数名: absread, abswirte
功 能: 绝磁盘扇区读、写数据
用 :
int absread(int drive, int nsects, int sectno, void *buffer);
int abswrite(int drive, int nsects, in tsectno, void *buffer);
for (i=0; i<80; i++){
VC++实现Windows下直接读写磁盘扇区
VC++实现Windows下直接读写磁盘扇区摘要:本文主要介绍了在Windows下对磁盘扇区数据的直接读写访问方法,并在此基础上实现了对磁盘扇区内容的查看、基于扇区的数据备份与恢复、对磁盘信息的彻底擦除等一些有着实际意义的应用。
关键字:磁盘访问;扇区;Windows;VC++引言由于Windows 操作系统在很大程度上采取了访问安全保护机制(例如,在Windows操作系统下不能直接访问物理内存、不能使用各种DOS、BIOS中断等等),使得广大程序设计人员在长时间的开发过程中不知不觉地逐渐养成了这样的潜意识——在Windows操作系统下直接操纵硬件设备是极端困难和非常烦琐的,并将其看作Windows编程的一个禁区。
尽管在大多数场合下这样的论断还算是贴切,但也并非对所有的硬件设备访问都那么困难。
其实Windows在采取“实保护”措施的同时也提供了另外的一种有别于在DOS下访问硬件设备的方法,即把所有的硬件设备全部看做“文件”,并允许按照对文件的读写方式来对其进行数据存取访问。
撰写本文的另外一个目的也就是帮助读者打消在Windows环境下对硬件编程的恐惧心理。
对磁盘扇区数据的访问前面已经提过,在Windows 下把所有的设备当作文件进行操作。
如果对串口进行编程或许不少读者还比较熟悉:对于串行端口1、2,可以用”COM1”、”COM2”作为参数调用CreateFile()函数,这里的”COM1”、”COM2”即以文件存放路径的方式指出了要操作的硬件设备。
但是如果需要对磁盘的某个扇区进行读写,可能不少读者不会想到使用CreateFile()函数或是不知如何使用。
其实,与对串行端口的访问类似,需要用与文件存放路径相类似的方式指出要操作的硬件设备(硬盘)。
但是这里并不是用“DISK1”、“DISK2”等去标识某一块物理存在的硬盘。
由于逻辑扇区是存在于逻辑分区上的,因此这里需要以某种特定的格式来指定需要访问的磁盘逻辑分区。
C语言磁盘调度算法
C语言磁盘调度算法
一、磁盘调度算法
磁盘调度算法是指在磁盘读写期间,将磁头移动的方式。
磁盘调度算法是操作系统和磁盘控制器的重要部分,它决定了磁头移动的顺序,最后影响磁盘读写的速度和效率。
先来先服务算法是一种比较基础的磁盘调度算法,它根据任务的先后顺序,按照FIFO(First-In-First-Out)的原则,先处理先提交的任务,后提交的任务后处理。
这种算法简单易实现,而且给出的结果是最长的寻道时间,但是其在分布较为不均匀的情况下容易导致较长的寻道时间。
2、最短寻道时间优先(Shortest Seek Time First,SSTF)
最短寻道时间优先算法是最新的一种磁盘调度算法,它把磁头移动的次数和磁头移动时间两个因素考虑在内,每次把最短寻道时间的任务优先处理,从而尽量减少磁头移动的次数,减少磁头的停顿次数,提高磁盘读写效率。
3、扫描算法(SCAN)
扫描算法称作电梯调度算法,也称作时钟调度算法,原理是先从其中一侧开始扫描。
2t0c读写原理
2t0c读写原理1. 磁盘的结构磁盘是由一组盘片组成的,每个盘片都被划分成许多的磁道和扇区。
每个磁道是一个同心圆,而每个扇区是从中心到边缘的一个弧段。
数据被存储在这些扇区中,而磁头则用来读写这些数据。
磁头是一个电磁元件,可以在盘片上的磁道上移动,从而将数据读取到计算机的内存中或写入到盘片中。
2. 磁盘的读取原理当计算机需要读取磁盘上的数据时,首先会通过磁头定位到相应的磁道上。
这个过程称为寻道操作,其速度取决于磁头的定位速度和磁盘的转速。
一旦找到了正确的磁道,磁头会定位到扇区,并开始读取数据。
磁头通过改变磁场的方向来读取磁盘上存储的数据,这个过程称为磁化操作。
具体来说,当磁头靠近磁盘表面时,磁盘的磁场会影响磁头的磁场,并产生一个感应电流。
这个电流会被放大并转换成数字信号,然后送到计算机的内存中。
通过解码这个数字信号,计算机就可以还原出磁盘上存储的数据。
读取过程中,计算机可能需要多次读取同一个扇区,以确保正确的数据被获取。
3. 磁盘的写入原理当计算机需要向磁盘上写入数据时,过程和读取类似,只是磁场的方向和数据的写入方式有所不同。
计算机会发送一个信号到磁头,让它改变磁场的方向,从而在磁盘上写入数据。
写入的数据会被编码成磁场的方向,然后通过磁头写入到相应的扇区中。
值得注意的是,写入操作可能会对磁盘上原有的数据造成破坏。
为了避免这种情况,计算机通常会在写入数据之前检查磁盘上的数据,并采取相应的措施来确保数据的正确性。
这包括使用校验和纠错码来检测和修正数据中的错误,以及在写入过程中采取一些技术手段来减小误差率。
4. 磁盘读写的优化为了提高磁盘的读写性能,计算机系统会采取一些优化策略。
其中最常见的策略是磁盘缓存和磁盘调度。
磁盘缓存是指将一部分数据缓存在内存中,以减少对磁盘的读写次数。
这样可以减少磁头的寻道时间,并提高磁盘的访问速度。
而磁盘调度则是指对磁盘上的读写请求进行排序和合并,从而减少磁头的移动次数,提高磁盘的读写效率。
c语言获取磁盘累计写入的次数
c语言获取磁盘累计写入的次数英文回答:Determining Disk Total Writes Using C Language.Introduction.Monitoring disk health is crucial for ensuring system performance and data integrity. One of the key metrics to assess disk health is the total number of writes performed on the disk. In this article, we will explore how to obtain this information using the C programming language.Using the SMART Command.One common approach to retrieve disk-related information is through the SMART (Self-Monitoring, Analysis and Reporting Technology) command. This command provides detailed data about the disk's health and usage, including the total number of writes.To access SMART data in C, you can use the lib smartmontools library. Here's an example code snippet:c.#include <smartmontools.h>。
int main() {。
struct smart_device device;device = smartmon_open_device("/dev/sda");if (device == NULL) {。
cystaldiskinfo 磁盘扇区
cystaldiskinfo 磁盘扇区磁盘扇区是指硬盘上最小的物理存储单位。
一个磁盘扇区通常被定义为512字节。
磁盘数据的读写都是以扇区为单位进行的,而不是以字节为单位。
磁盘扇区的概念来源于磁盘驱动器的物理结构。
硬盘通常由多个盘片组成,每个盘片上都有许多同心圆的磁道。
磁头通过磁道进行读写操作,而每个磁道又被划分为多个扇区。
每个磁道上的扇区数量是固定的,而随着技术的发展,每个扇区的容量也在不断提高。
磁盘扇区的大小决定了硬盘的存储密度。
随着扇区容量的增加,硬盘能够存储的数据也变得更多。
然而,随着技术的发展,磁盘扇区的大小也面临一些限制。
512字节的扇区大小是一个相对较小的值,它在很大程度上是由早期计算机系统的设计决定的。
随着硬盘容量的增加,512字节的扇区大小在一些方面变得不太适应现代计算机系统的需求。
较小的扇区大小在某些情况下可能会导致性能问题。
由于每次读写操作都需要涉及一个完整的扇区,较小的扇区大小意味着每次读写的开销也变得更大。
尤其是在进行大量小文件读写的情况下,这种效率问题尤为明显。
为了解决这个问题,一些存储技术开始采用更大的扇区大小。
例如,Advanced Format(AF)技术将扇区大小增加到了4096字节。
较大的扇区大小可以减少读写开销,提高系统性能。
然而,由于兼容性和其他因素的考虑,较大的扇区大小并不是在所有系统中都能得到广泛应用。
在操作系统中,磁盘扇区的读写通常是由文件系统控制的。
文件系统负责将文件划分为多个扇区,并负责将文件的数据写入硬盘的相应扇区。
文件系统还负责维护一个磁盘扇区的分配表,以记录哪些扇区已经被使用,哪些扇区是空闲的。
这样,文件系统就可以更加高效地管理磁盘上的存储空间。
磁盘扇区的健康状况对于硬盘的正常运转也非常重要。
异常扇区(即坏扇区)的出现可能会导致数据丢失或系统崩溃。
为了检测和修复坏扇区,可以使用一些硬盘工具,如CrystalDiskInfo(简体中文名为“晶体磁盘信息”)进行诊断。
磁盘扇区的概念
磁盘扇区的概念磁盘扇区是计算机磁盘上的一个基本存储单元。
磁盘扇区是磁盘分区的最小单位,它是一个逻辑上的概念,用于存储和检索数据。
磁盘扇区的大小通常是512字节,即每个扇区能够存储512个字节的数据。
在现代磁盘中,也有一些磁盘采用了更大的扇区大小,比如4096字节,这样可以更好地适应大容量存储设备的需求。
磁盘扇区是磁盘操作系统管理的最小单位,所有的数据都以扇区为基本单元进行读写。
当计算机需要读取或写入磁盘上的数据时,它会首先确定数据所在的扇区位置,然后按照扇区大小进行读写操作。
这种按照扇区进行数据读写的方式可以更有效地管理磁盘上的数据,并且可以更好地利用磁盘空间。
同时,磁盘扇区还可以提高数据的读写速度,因为计算机可以直接按照扇区进行数据读写,而不需要进行额外的寻址操作。
在磁盘上,每个扇区都有一个唯一的地址,这个地址通常由磁盘的磁道号、扇区号和磁头号组成,用来标识磁盘上的每个扇区。
当计算机需要读取或写入磁盘上的数据时,它会根据数据的地址来确定数据所在的扇区,然后按照扇区进行读写操作。
这种使用地址标识扇区的方式可以更有效地管理磁盘上的数据,并且可以更好地提高数据的读写速度。
由于磁盘扇区是磁盘上的最小存储单位,因此对于大容量磁盘来说,需要管理的扇区数量非常庞大。
为了更有效地管理这些扇区,计算机会将磁盘上的扇区按照一定的规则进行组织和管理,比如划分磁盘分区,这样可以更好地管理和利用磁盘空间。
同时,磁盘上的扇区还可能会出现损坏或者数据丢失的情况,这时计算机可以通过检测和纠正技术来对这些问题进行修复,以保证数据的完整性和安全性。
在磁盘上,各个扇区之间是相互独立的。
这种独立性意味着计算机可以对磁盘上的任意扇区进行读写操作,而不需要考虑其他扇区的影响。
这样一来,计算机可以更灵活地管理和维护磁盘上的数据,可以更好地提高数据的读写速度和可靠性。
总之,磁盘扇区是磁盘上的最小存储单位,它是计算机对磁盘进行管理和操作的基本单元。
磁盘读写的基本单位
磁盘读写的基本单位磁盘是计算机中存储数据的重要设备,而磁盘读写是指计算机通过读取和写入磁盘上的数据来实现信息存储和检索的过程。
在磁盘读写中,数据被存储在磁盘的最小存储单元中,这个最小存储单元被称为扇区。
扇区是磁盘中的一个物理区域,通常由512个字节组成。
它是磁盘读写的基本单位,计算机在进行磁盘读写时,会按照扇区为单位进行操作。
当计算机需要读取磁盘上的数据时,会首先确定需要读取的扇区的位置,然后逐个读取扇区中的数据。
同样,当计算机需要写入数据到磁盘时,也是按照扇区为单位进行操作。
磁盘读写的基本单位为扇区的好处是可以方便地管理和存取数据。
由于扇区的大小是固定的,计算机可以根据扇区的地址来快速定位和读取数据,提高了读写的效率。
此外,扇区的大小也决定了磁盘的容量,通过增加扇区的数量,可以增加磁盘的存储空间。
在进行磁盘读写时,计算机通常是以簇为单位进行操作。
簇是由多个扇区组成的连续存储空间,它是为了提高磁盘的读写效率而引入的概念。
当计算机需要读取或写入数据时,会以簇为单位进行操作,这样可以减少寻道时间和旋转延迟,提高数据的传输速度。
除了扇区和簇,磁盘还有其他一些相关的概念。
例如,磁道是磁盘上一个圆形的轨道,它由多个扇区组成。
磁头是磁盘上用于读写数据的装置,它可以在磁道之间移动,从而实现对数据的读写操作。
柱面是一个由多个磁道组成的立体空间,它是磁盘上的一个逻辑单位,计算机在进行磁盘读写时,会按照柱面为单位进行操作。
磁盘读写的基本单位为扇区,它是计算机进行数据存储和检索的最小单位。
通过扇区的读写操作,计算机可以方便地管理和存取数据。
此外,还有簇、磁头、磁道和柱面等相关概念,它们共同构成了磁盘读写的基本框架。
了解磁盘读写的基本单位和相关概念,对于理解计算机的存储系统和优化磁盘读写效率非常重要。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
512*numsec,
&bytesread,
NULL);
/*
)
{
int err;
error[10];
err=GetLastError();
itoa(err,error,10);
//功能: 把一整数转换为字符串
//用法: char *itoa(int value, char *string, int radix)
{
int logicalSector=cylinder*headPerCylinder*sectorPerhead
+head*sectorPerhead
+(sector-1);
char *buffer=(char*)malloc(512*numsec);
strset(buffer,' ');
{
MessageBox(NULL,"Error open disk!","Error",MB_OK);
return NULL;
}
SetFilePointer(hDevice,(logicalSector*512),NULL,FILE_BEGIN);
//if(
ReadFile(hDevice,
return buffer;
}
char * ReadSectors(int logicalSector,int numsec)
{
char *buffer=(char*)malloc(512*numsec);
strset(buffer,' ');
//strset功能: 将一个串中的所有字符都设为指定字符
if (hDevice == INVALID_HANDLE_VALUE)
{
MessageBox(NULL,"Error open disk!","Error",MB_OK);
return NULL;
}
SetFilePointer(hDevice,(logicalSector*512),NULL,FILE_BEGIN);
MessageBox(NULL,error,"Reading sectors fail!",MB_OK);
return NULL;
}
*/
CloseHandle(hDevice);
return buffer;
}
C++读取磁盘扇区
#include<windows.h>
#include<iostream.h>
#define headPerCylinder 1023
#define sectorPerhead 63
char * ReadSectors(int cylinder,int head,int sector,int numsec);
char * ReadSectors(int logicalSector,int numsec);
void main()
{
//char *text=ReadSectors(0,0,1,1);//ReadSectors(cylinder,head,sector,numberOfSectors)
char *text=ReadSectors(0,1);
HANDLE filehandle = CreateFile("001",
GENERIC_WRITE,
FILE_SHARE_WRITE,
WriteFile(filehandle,
text,
512*1,
&byteswrite,
NULL);
//cout<<text<<endl;
}
char * ReadSectors(int cylinder,int head,int sector,int numsec)
//strset功能: 将一个串中的所有字符都设为指定字符
DWORD bytesread;
char devName[] = "////.//PHYSICALDRIVE0";
HANDLE hDevice = CreateFile(devName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
NULL,
NULL);
//if(
ReadFile(hDevice,
buffer,
512*numsec,
&bytesread,
NULL);
/*
)
{
int err;
char error[10];
err=GetLastError();
itoa(err,error,10);
DWORD bytesread;
char devName[] = "////.//PHYSICALDRIVE0";
HANDLE hDevice = CreateFile(devName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
DWORD byteswrite;
//功能: 把一整数转换为字符串
//用法: char *itoa(int value, char *string, int radix)
MessageBox(NULL,error,"Reading sectors fail!",MB_OK);
return NULL;
}
*/
CloseHandle(hDevice);
NULL,
OPEN_EXISTING,
NULL,
NULL);
if (hDevice == INVALID_HANDLE_VALUE)