Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с файловой системой DOS.doc
Скачиваний:
1
Добавлен:
16.11.2019
Размер:
299.01 Кб
Скачать

24.11Стандартные библиотеки трансляторов Microsoft qc 2.5 и Borland содержат несколько функций, облегчающих получение справочной информации о состоянии дисковой подсистемы.

Функция _dos_getdiskfree() использует функцию 36h для получения информации о диске. Файл dos.h содержит описание этой функции:

unsigned _dos_getdiskfree(unsigned drive,

struct diskfree_t *diskspace);

Параметр drive задает номер используемого дисковода: 0 - текущий, 1 - А:, и т.д.

Информация возвращается в структуре diskfree_t, которая определена в файле dos.h:

struct diskfree_t

{

unsigned total_clusters;

unsigned avail_clusters;

unsigned sectors_per_cluster;

unsigned bytes_per_sector;

};

В этой структуре:

unsigned total_clusters

общее количество кластеров на диске;

unsigned avail_clusters

количество свободных кластеров;

unsigned sectors_per_cluster

количество секторов, занимаемых кластером;

unsigned bytes_per_sector

размер сектора в байтах.

Для получения номера текущего диска и для установки номера текущего диска можно использовать, соответственно, функции _dos_getdrive() и _dos_setdrive().

Функция _dos_getdrive() имеет формат:

Void _dos_getdrive(unsigned *drive);

Эта функция пользуется функцией 19h для получения номера текущего диска, который записывается по адресу, задаваемому параметром. Значение 1 соответствует диску А:, 2 - В:, и т.д.

Функция _dos_setdrive() предназначена для установки текущего диска и может быть использована для определения общего числа дисков в системе:

Void _dos_setdrive(unsigned drive, unsigned *drivecount);

Параметр drive опеределяет текущий диск (1 - А:, и_т.д.), по адресу, задаваемому вторым параметром, функция записывает общее количество логических дисков, установленных в системе. Функция _dos_setdrive() использует функцию 0Eh прерывания INT 21h.

Для иллюстрации способов использования функций _dos_getdrive(), _dos_setdrive(), _dos_getdiskfree() мы составили следующую программу:

#include <dos.h>

#include <bios.h>

#include <conio.h>

#include <stdio.h>

Void main(void);

Void main(void) {

struct diskfree_t dinfo;

unsigned drive, drivecount;

printf(\n

\nОпределение параметров”

“текущего логического диска"

\n (C)Фролов А., 1991”

\n”);

// Определяем номер текущего диска:

_dos_getdrive(&drive);

// Выводим на экран литеру текущего диска:

printf("\nТекущийдиск: %c:\n",

'A' + drive - 1);

//Вызываем функцию установки текущего диска.

//Мы не изменяем текущий диск, вызов этой

//функции нужен нам для определения

//количества установленных

//в системе логических дисков

_dos_setdrive(drive, &drivecount);

// Получаем характеристики текущего диска:

_dos_getdiskfree(drive, &dinfo);

printf(“\nОбщее количество”

“кластеров на диске: %d”

\nКоличество свободных

“кластеров: %d”

\nКоличество секторов в

“кластере: %d”

\nКоличество байтов в”

“секторе: %d”

\nРазмер диска

в байтах: %ld"

"\n",

dinfo.total_clusters,

dinfo.avail_clusters,

dinfo.sectors_per_cluster,

dinfo.bytes_per_sector,

(long)dinfo.avail_clusters *

dinfo.sectors_per_cluster *

dinfo.bytes_per_sector );

printf(\nКоличество логических

дисков: %d”

\n”, drivecount);

}