11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 627
1

Составить программу, читающую загрузочный сектор диска и выводящую на экран основные характеристики диска из BPB

01.09.2012, 18:09. Показов 2635. Ответов 10
Метки нет (Все метки)

доброго времени суток.
задали такую лабораторную.
2. Составить программу, читающую загрузочный сектор диска и выводящую на экран основные характеристики диска из BPB.
как сделать вообще ума не приложу.
нашел так сказать решебник с кодом на сайте но код не запускается правильно откомпилоровать не могу, кто хорошо понимает в с++ помоги плиз сделать чтоб работал.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
Программа показывающая содержимое загрузочной записи для указанного логического диска:
 
#include <stdio.h>
 
#include <malloc.h>
 
#include <dos.h>
 
#include "sysp.h"
 
void main(void);
 
void main(void) {
 
BOOT _far *boot_rec;
 
int i, status;
 
char drive;
 
printf("n"
 
"nЧтение загрузочной записи"
 
"nлогического диска"
 
"n");
 
// Заказываем буфер для чтения BOOT-записи.
 
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);
 
}
 
printf("nСодержимое BOOT-сектора для диска %c",drive+'A');
 
printf("n"
 
"nOEM - название фирмы и версия DOS - ");
 
for(i=0;i<8;i++) printf("%c",boot_rec->oem[i]);
 
printf("nНомер диска - %x"
 
"nПризнак расширенной BOOT-записи - %c"
 
"nСерийный номер диска - %04X-%04X"
 
"nМетка диска - ",
 
(unsigned char)boot_rec->drive,
 
boot_rec->signature,
 
boot_rec->volser_hi,
 
boot_rec->volser_lo);
 
for(i=0;i<11;i++) printf("%c",boot_rec->label[i]);
 
printf("nФормат FAT - ");
 
for(i=0;i<8;i++) printf("%c",boot_rec->fat_format[i]);
 
printf("nnИнформация из BPB:n");
 
printf("nКоличество байтов в секторе - %d"
 
"nКоличество секторов в кластере - %d"
 
"nЗарезервировано секторов - %d"
 
"nКоличество копий FAT - %d"
 
"nМакс. количество файлов в корневом каталоге - %d"
 
"nОбщее количество секторов на диске - %d"
 
"nБайт-описатель среды - %x"
 
"nКоличество секторов в FAT - %d",
 
boot_rec->bpb.sectsize,
 
boot_rec->bpb.clustsize,
 
boot_rec->bpb.ressecs,
 
boot_rec->bpb.fatcnt,
 
boot_rec->bpb.rootsize,
 
boot_rec->bpb.totsecs,
 
(unsigned char)boot_rec->bpb.media,
 
boot_rec->bpb.fatsize);
 
printf("nnИнформация из расширения BPB:n");
 
printf("nСекторов на дорожке - %d"
 
"nКоличество головок - %d"
 
"nСкрытых секторов для диска < 32M - %d"
 
"nСкрытых секторов для диска >= 32M - %d"
 
"nВсего секторов на диске - %u",
 
boot_rec->bpb.seccnt,
 
boot_rec->bpb.headcnt,
 
boot_rec->bpb.hiddensec_low,
 
boot_rec->bpb.hiddensec_hi,
 
boot_rec->bpb.totsecs);
 
// Освобождаем буфер
 
_ffree(boot_rec);
 
}
 
В файле SYSP.H содержится структура для работы с загрузочной записью, описывающая расширенный блок параметров BIOS EBPB и собственно загрузочную запись BOOT:
 
#pragma pack(1)
 
/Расширенный блок параметров BIOS/
 
typedef struct _EBPB_ {
 
unsigned sectsize;
 
char clustsize;
 
unsigned ressecs;
 
char fatcnt;
 
unsigned rootsize;
 
unsigned totsecs;
 
char media;
 
unsigned fatsize;
 
unsigned seccnt;
 
unsigned headcnt;
 
unsigned hiddensec_low;
 
unsigned hiddensec_hi;
 
unsigned long drvsecs;
 
} EBPB;
 
/Загрузочная запись/
 
typedef struct _BOOT_ {
 
char jmp[3];
 
char oem[8];
 
EBPB bpb;
 
char drive;
 
char reserved;
 
char signature;
 
unsigned volser_lo;
 
unsigned volser_hi;
 
char label[11];
 
char fat_format[8];
 
char boot_code[450];
 
} BOOT;
 
#pragma pack()
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2012, 18:09
Ответы с готовыми решениями:

Поврежден загрузочный сектор диска (возможно)
Привет форумчанам :) Вообщем, случилась со мной такая беда: Не загружается ОС. Reboot and...

Разработать алгоритм и написать резидентную программу, выводящую на экран характеристики компьютера
Если можете, помогите с прогой.....выскакивает какая-то ошибка, а как ее исправить я не знаю. я в...

Запись в нулевой сектор диска
Как записать что-то в нулевой сектор? Например строку с паролем C#

Считывает сектор с загрузочной записью флоппи диска
Здравствуйте!Подскажите пожалуйста как написать такую программу Написать 16–ти разрядную...

10
Twilight Parasite
154 / 150 / 7
Регистрация: 21.07.2011
Сообщений: 908
01.09.2012, 18:50 2
lexflax, А ви под гассовый ДОС пишете?

И еще одно: почему у вас структура _BOOT_ а вы обьявляете BOOT_?

И еще одно: сфигли у вас структура после мейна и зачем вам прототип мейна?
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 627
01.09.2012, 18:52  [ТС] 3
а как понять гассовый? есть много разновидностей доса? у меня просто как бы в задание на прописанно на каком писать да и в решебнике не указанно на каком пишется
0
Twilight Parasite
154 / 150 / 7
Регистрация: 21.07.2011
Сообщений: 908
01.09.2012, 18:53 4
lexflax, имеется в виду рассовый)
у вас дос установлен или винда?
просто тут возможно кроется ошибка.
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 627
01.09.2012, 18:54  [ТС] 5
ну винда на компе стоит семерка, разве дос в ней не идет автоматически?
0
Twilight Parasite
154 / 150 / 7
Регистрация: 21.07.2011
Сообщений: 908
01.09.2012, 18:57 6
lexflax, а почему вы уперлись именно в этот вопрос?
Выше я написал причину того что не компилится.
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 627
01.09.2012, 18:57  [ТС] 7
вот собственно файл с контрольной в которой и был код который не работает(((
Вложения
Тип файла: docx Организация ЭВМ и Систем.docx (51.5 Кб, 23 просмотров)
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 627
01.09.2012, 18:58  [ТС] 8
да там масса причин, ну вы конечно одну из них явно указали)
0
Twilight Parasite
154 / 150 / 7
Регистрация: 21.07.2011
Сообщений: 908
01.09.2012, 19:02 9
lexflax,
Цитата Сообщение от Invader_Zim Посмотреть сообщение
И еще одно: почему у вас структура _BOOT_ а вы обьявляете BOOT_?
И еще одно: сфигли у вас структура после мейна и зачем вам прототип мейна?
Чем не причины?

и какие ошибки компилятор выдает?

У меня линукс, и поэтому ваш код у меня железно не скомпилится.
и даже еслиб компилился яб не компилил.
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 627
01.09.2012, 19:11  [ТС] 10
Цитата Сообщение от Invader_Zim Посмотреть сообщение
И еще одно: сфигли у вас структура после мейна и зачем вам прототип
структура после майна потому что она должна быть в отдельном файле как я понял но как его создать и подвязать к программе не знаю
В файле SYSP.H содержится структура для работы с загрузочной записью, описывающая расширенный блок параметров BIOS EBPB и собственно загрузочную запись BOOT:
0
Twilight Parasite
154 / 150 / 7
Регистрация: 21.07.2011
Сообщений: 908
01.09.2012, 19:55 11
lexflax, вы на С++ хоть раз писали?
Вы знаете что такое заголовочный файл?
вы наете что делает деректива #include?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.09.2012, 19:55
Помогаю со студенческими работами здесь

Составить программу, выводящую на экран график отпусков
Найдите ошибки пожалуйста Составить программу, выводящую на экран график отпусков (Ф. И. О.,...

Составить программу, выводящую на экран студенческую ведомость
Составить программу, выводящую на экран студенческую ведомость (Ф. И. О., оценки за три экзамена,...

Составить программу, выводящую на экран сведения о студентах
Составить программу, выводящую на экран сведения о студентах (Ф. И. О., курс, группа, номер...

Составить программу, выводящую на экран перечень товаров
Составить программу, выводящую на экран перечень товаров, имеющихся в продаже в магазине &quot;Океан&quot;...

Составить программу, выводящую на экран перечень товаров,
Задача 4. Составить программу, выводящую на экран перечень товаров, имеющихся в продаже в магазине...

Составить программу, выводящую на экран данную матрицу
Добрый вечер. Нужно помочь с двумя программками до завтра. 1.Дан двумерный массив NxN, заполненный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru