Russian Belarusian English German Japanese Ukrainian

Absread

CuBook05

Функция

Чтение абсолютных секторов на диске.
 
Синтаксис

#include<dos.h>
int absread(int drive, int nsects, int lsect, void *buffer);
 
Прототип

dos.h
 
Описание

Absread считывает указанные сектора диска. Функция игнорирует логическую структуру диска и не обращают внимание на файлы, блоки FAT или директории. Absread читает заданные сектора диска посредством прерывания DOS 0x25.
 
drive = номер читаемого диска (0=А, 1=В, и т.д.).
nsects = количество читаемых секторов.
lsect = начальный логический номер сектора.
buffer = адрес памяти, куда считываются данные.
 
Число считываемых секторов ограничивается максимальным размером буфера (64К) или даже меньше, если реальный буфер имеет меньший размер.
 
Возвращаемое значение

При успешном завершении absread возвращает 0. При возникновении ошибки, функция возвращает значение -1 и присваивают переменной errno значение регистра AX, получаемое при системном вызове.
 
Переносимость

Absread уникальна для DOS. Функция не поддерживается Windows.
 
Пример

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<dos.h>
#include<ctype.h>

#define SEGSIZE 512
unsigned char buf[SEGSIZE];

int main(void)
{
int i,j,sector,drive;
char str[10];
printf("Введите метку диска:");
gets(str);
drive = toupper(str[0])-'A';
printf("Введите номер сектора, который нужно считать:");
gets(str);
sector = atoi(str);
if(absread(drive,1,sector,&buf)!=0)
{
perror("Ошибка диска")ж
exit(1);
}
printf("\nДисковод %c Сектор %d\n",'A'+drive,sector);
for(i=0; i<SEGSIZE; i+=16)
{
if((i/16)==20)
{
printf("Для продолжения нажмите любую клавишу");
getch();
printf("\n");
}
printf("%03d",i);
for(j=0;j<16;j++)
printf("%02X ",buf[i+j]);
printf("\t");
for(j=0; j<16;j++)
if(isprint(buf[i+j]))
printf("%c",buf[i+j]);
else
printf(".");
printf("\n");
}
return 0;
}
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий


Защитный код Обновить