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


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


}

// Если этот кластер - последний из распределенных каталогу, // завершаем работу программы

if((cur_clust == 0xfff) (cur_clust == 0xffff)) break;

}

// Освобождаем буфера

_ffree(root_buffer); _ffree(boot_rec); _ffree(fat_buffer); _ffree(clust_buffer); }

Эта программа обращается к таблице размещения файлов при помощи функции fat():

/** *.Name fat * *.Title Выбрать элемент из FAT * *.Descr Функция выбирает элемент с заданным номером из таблицы * размещения файлов FAT. Формат FAT передается * функции как параметр. * *.Params int fat(b_fat, t_fat, idx); * * char _far *b_fat - буфер, содержащий FAT * * int t_fat - формат FAT, может быть * равен 12 или 16 * * int idx - номер элемента FAT, который * должен быть выбран * *.Return Содержимое ячейки FAT с указанным номером **/

#include <stdio.h> #include <stdlib.h> #include "sysp.h"

int fat(char _far *b_fat, int t_fat, int idx) {

div_t clust_nu ; int cluster;

if(t_fat == 12) {

/* FAT - 12 */

clust_nu = div(idx * 3, 2);

if( clust_nu.rem != 0 )

cluster = (*((int*)(b_fat + clust_nu.quot)) >> 4) & 0xfff;

else

cluster = *((int*)(b_fat + clust_nu.quot)) & 0xfff; }

else if(t_fat == 16) {

/* FAT - 16 */

cluster = *((int*)(b_fat + idx * 2)); }

else { printf("*FAT()* FAT format error\n"); exit(-100); }

return(cluster); }

В качестве примера приведем результат работы программы для диска E:

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

Введите обозначение диска (A, B, ...):e FAT имеет 12-битовый формат

Имя файла Аттр. Дата Время Кластер Размер ------------ ----- ---------- -------- ------- ------ C600 . 10 22-09-1990 01:22:14 2 0 SOLO . 10 22-09-1990 11:15:42 6 0 QC25 . 10 07-10-1990 22:53:48 7 0 SYSPRG . 10 03-10-1990 09:19:08 12 0 WORD . 10 02-02-1991 14:02:14 15 0 SD .INI 20 17-02-1991 15:36:52 799 2497 FRECOVER.IDX 27 17-02-1991 15:42:10 2551 29 FRECOVER.DAT 21 17-02-1991 15:42:10 1958 21504 х . 20 17-02-1991 16:37:30 1973 347

Номер первого кластера каталога:3 4095

Имя файла Аттр. Дата Время Кластер Размер ------------ ----- ---------- -------- ------- ------ . . 10 22-09-1990 01:22:24 3 0 .. . 10 22-09-1990 01:22:24 2 0 UTILS .HLP 20 08-02-1990 00:09:42 800 162023 QH .HLP 20 29-01-1990 19:32:04 840 20763 CV .HLP 20 07-02-1990 21:33:32 846 239863

Обратите внимание на выделенные элементы каталога. Это ссылки соответственно на сам каталог и на каталог более высокого уровня.




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