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


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


Для удобства работы с каталогами файл sysp.h

содержит следующие определения типов:

#pragma pack(1)

/* Время последнего обновления файла */

typedef struct _FTIME_ { unsigned sec : 5, min : 6, hour : 5; } FTIME;

/* Дата последнего обновления файла */

typedef struct _FDATE_ { unsigned day : 5, month : 4, year : 7; } FDATE;

/* Дескриптор файла в каталоге */

typedef struct _FITEM_ { char name[8]; char ext[3]; char attr; char reserved[10]; FTIME time; FDATE date; unsigned cluster_nu; unsigned long size; } FITEM; #pragma pack()

Приведем исходный текст программы, которая читает BOOT-сектор выбранного диска, определяет формат FAT, вычисляет размер и расположение FAT и корневого каталога. Затем программа читает 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 fat, root_begin, root_sectors; char drive; unsigned _far *fat_buffer; FITEM _far *root_buffer, _far *rptr;

union REGS reg; struct SREGS segreg;

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

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

boot_rec = _fmalloc(sizeof(*boot_rec));

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

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

drive = getche();

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

drive = toupper(drive) - 'A';

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

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

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

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




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