Операционная система MS DOS (том 2)


Файлы и каталоги - часть 8


Заметьте, что приведенная выше программа предоставляет вам параметр, который невозможно получить с помощью команды операционной системы DIR

- номер первого кластера, распределенного файлу. Операционная система MS-DOS не дает программам иной возможности определить номер первого кластера файла, чем чтение каталога по секторам.

Для исследования подкаталогов корневого каталога и для демонстрации основных приемов работы с таблицей размещения файлов FAT

предназначена следующая программа. Вы можете использовать ее для исследования структуры каталогов диска.

#include <stdio.h> #include <malloc.h> #include <dos.h> #include "sysp.h"

void main(void); void main(void) {

BOOT _far *boot_rec; int i,j, k, status, fat_sectors; long total_sectors; int ffat, root_begin, root_sectors; char drive; unsigned _far *fat_buffer; FITEM _far *root_buffer, _far *rptr; char cbuf[128]; char _far *clust_buffer; int cur_clust;

union REGS reg; struct SREGS segreg;

printf("\n" "\nЧтение каталогов логического диска" "\n (C)Фролов А., 1991" "\n");

// Заказываем буфер для чтения BOOT-записи. // Адрес буфера присваиваем FAR-указателю.

boot_rec = _fmalloc(sizeof(*boot_rec));

// Запрашиваем диск, для которого необходимо // выполнить чтение загрузочной записи.

printf("\n" "\nВведите обозначение диска (A, B, ...):");

drive = getche();

// Вычисляем номер дисковода

drive = toupper(drive) - 'A';

// Читаем загрузочную запись в буфер

status = getboot((BOOT _far*)boot_rec, drive);

// Если произошла ошибка (например, неправильно указано // обозначение диска), завершааем работу программы

if(status) { printf("\nОшибка при чтении BOOT-сектора"); exit(-1); }

// Определяем формат таблицы FAT

total_sectors = boot_rec->bpb.totsecs;

// Если мы работаем с расширенным разделом диска, // общее количество секторов на диска берем из // расширенного PBP

if(total_sectors == 0) total_sectors = boot_rec->bpb.drvsecs;




- Начало -  - Назад -  - Вперед -