MS-DOS для программиста


Программа PARTVIEW


Операционная система MS-DOS не предоставляет программам никаких средств для работы с главной загрузочной записью и таблицей разделов диска.

Приведем текст программы PARTVIEW (листинг 2.1), которая выводит на экран содержимое таблицы разделов первого диска, выполняя чтение первого сектора диска с помощью функции _bios_disk .

Листинг 2.1. Файл partview\ partview.cpp

#include <stdio.h> #include <dos.h> #include <bios.h>

typedef struct _PART_ENTRY_ { unsigned char flag; unsigned char beg_head; unsigned beg_sec_cyl; unsigned char sys; unsigned char end_head; unsigned end_sec_cyl; unsigned long rel_sec; unsigned long size; } PART_ENTRY;

typedef struct _MBOOT_ { char boot_prg[0x1be]; PART_ENTRY part_table[4]; unsigned char signature[2]; } MBOOT;

int getmboot(MBOOT *master_boot, int drive);

int main(void) { MBOOT mb; int i,j, k, status;

printf("\nТаблица разделов диска" "\n (C)Фролов А., 1995\n");

// Читаем главную загрузочную запись первого НМД status = getmboot(&mb, 0); if(status != 0) { printf("\nОшибка чтения диска, код ошибки: %d", status); return(1); }

printf("\n" "\n------------------------------" "------------------------------" "\n|Флаг|Начало раздела |" "Конец раздела |Код |Размер |Отн. |" "\n| |---------------|" "---------------|сист.|раздела|номер |" "\n| |Гол.|Сект.|Цил.|" "Гол.|Сект.|Цил.| | |сектора|" "\n|----|----|-----|----|" "----|-----|----|-----|-------|-------|" "\n");

for(k=0; k<4; k++) { printf("|%3X |%4d|%4d |%4d|%4d|%4d |%4d|%5d|%7u|", mb.part_table[k].flag, mb.part_table[k].beg_head, mb.part_table[k].beg_sec_cyl & 0x3f, (mb.part_table[k].beg_sec_cyl >> 6) & 0x3ff, mb.part_table[k].end_head, mb.part_table[k].end_sec_cyl & 0x3f, (mb.part_table[k].end_sec_cyl >> 6) & 0x3ff, mb.part_table[k].sys, mb.part_table[k].size);

printf("%7u|\n", mb.part_table[k].rel_sec); } printf("---------------------------" "---------------------------------"); return 0; }




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



Книжный магазин