词条 | absread, abswirte |
释义 | 函数名: absread, abswirte 功 能: 绝对磁盘扇区读、写数据 用 法: int absread(int drive, int nsects, int sectno, void *buffer); int abswrite(int drive, int nsects, in tsectno, void *buffer); drive=0(A驱动器)、1(B驱动器)、 nsects=要读、写的扇区数(最多64K个); lsect=起始逻辑扇区号; buffer=要读、写入数据的内存起始地址。 功能:读----从drive指定的驱动器磁盘上,sectnum指定的逻辑扇区号开始读取(通过DOS中断0x25读取)num个(最多64K个)扇区的内容,储存于buf所指的缓冲区中;写----将指定内容写入(调用DOS中断0x26)磁盘上的指定扇区,即使写入的地方是磁盘的逻辑结构、文件、FAT表和目录结构所在的扇区,也照常进行。 参数:drive=0对应A盘,drive=1对应B盘。 返回值:0:成功;-1:失败。 头文件:dos.h 用absread读出的数据是二进制形式的,其内容就是原本在磁盘中存储的数据的副本,至于表示什么,就依赖于原先存储的格式及数据的内容了. abswrite函数将内存中指定的数据写入磁盘的特定位置,其内容也是二进制形式的,如果想再找到写入内容,当然可以用absread在原位置读出. 举一个简单的例子,比方说C盘主引导区受损,则可用软盘或光盘启动系统,利用abswrite将主引导区的备份重新写入,覆盖逐级损的部分,即可达到手工修复的目的. 程序例: /* absread example */ #include <stdio.h> #include <conio.h> #include <process.h> #include <dos.h> int main(void) { int i, strt, ch_out, sector; char buf[512]; printf("Insert a diskette into drive A and press any key\"); getch(); sector = 0; if (absread(0, 1, sector, &buf) != 0) { perror("Disk problem"); exit(1); } printf("Read OK\"); strt = 3; for (i=0; i<80; i++) { ch_out = buf[strt+i]; putchar(ch_out); } printf("\"); return(0); } |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。