Функция Чтение с диска.
Синтаксис #include
int randbrd(struct fcb *fcbptr, int recent);
Файл, содержащий dos.h
прототип
Описание Функция randbrd считывает количество записей
recent, используя блок FCB, адресуемый указателем
fcbptr. Записи считываются в память по текущему
адресу DTA. Записи считываются с диска, причем
информация берется из поля random record блока
FCB. Эта операция выполняется с помощью системно-
го вызова DOS 0x27.
Действительное число считанных записей можно оп-
ределить проанализировав поля random record блока
FCB. Данное поле после операции будет заполнено
информацией о числе действительно считанных запи-
сей.
Возвращаемое В зависимости от результата работы функций randbrd
значение возвращает следующие значения:
0- все записи прочитаны;
1- достигнут конец файла (EOF) и последняя запись
прочитана полностью;
2- считанные записи будут располагаться рядом с
адресом 0xFFFF (прочитано записей столько,
сколько возможно).
3- достигунт конец файла и последняя запись обра-
ботана не полностью.
Переносимость Функция уникальна для DOS.
Смотрите также getdtarandbwdsetdta
Пример:
#include
#include
#include
#include
int main(void)
{
char far *save_dta;
char line[80],buffer[256];
struct fcb blk;
int i,result;
/* ввести имя файла */
printf("Введите устройство и имя файла (без маршрута, например\
a:file.dat)\n");
gets(line);
/* записать имя файла в FCB */
if(!parsfnm(line,&blk,1))
{
printf("Ошибка при вызове parsfnm\n");
exit(1);
}
printf("Устройство #%d файл: %s\n\n",blk.fcb_drive, blk.fcb_name);
/* открыть файл, с использованием функций DOS, работающих с FCB */
bdosptr(0x0f,&blk,0);
/* сохранить старый DTA, создать новый */
save_dta = getdta();
setdta(buffer);
/* передать в FCB информацию об DTA */
blk.fcb_recsize = 128;
blk.fcb_random = 0L;
result = randbrd(&blk,1);
/* проверить результат операции */
if(!result)
printf("Чтение закончено успешно\n");
else
{
perror("Ошибка, во время чтения \n");
exit(1);
}
/* считать данные из новой DTA */
printf("Первые 128 символов:\n);
for(i=0; i<128; i++)
putchar(buffer[i]);
/* восстановить DTA */
setdta(save_dta);
return 0;
}