Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
#1

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

01.09.2012, 18:09. Просмотров 1350. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2012, 18:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Составить программу, читающую загрузочный сектор диска и выводящую на экран основные характеристики диска из BPB (C++):

Составить программу, выводящую на экран информацию о наличии товаров на складе - C++
2. Составить программу, выводящую на экран информацию о наличии товаров на складе (наименование, артикул, дата получения, единица...

Составить программу, выводящую на экран квадрат Пифагора - таблицу умножения. - C++
Составить программу, выводящую на экран квадрат Пифагора - таблицу умножения. Рекомендуемый вид экрана программы приведен ниже. 1 2 3 4...

Составить программу, моделирующую заполнение гибкого магнитного диска - C++
задача такая Составить программу, моделирующую заполнение гибкого магнитного диска. Объем памяти на диске 360 Кбайт. Файлы имеют...

Составить программу, проверяющую истинность условий и выводящую на экран соответствующие сообщения - C++
Лабораторная работа № 5. ОПЕРАЦИИ ЯЗЫКА С++ Задание: Составить программу, проверяющую истинность условий и выводящую на экран...

Необходимо составить программу, выводящую на экран матрицу данного вида (подробнее внутри) - C++
Здравствуйте. Необходимо составить программу (желательно дополнить мой фрагмент программы, приведенный ниже), которая выводит на экран...

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

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

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

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

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

У меня линукс, и поэтому ваш код у меня железно не скомпилится.
и даже еслиб компилился яб не компилил.
0
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
01.09.2012, 19:11  [ТС] #10
Цитата Сообщение от Invader_Zim Посмотреть сообщение
И еще одно: сфигли у вас структура после мейна и зачем вам прототип
структура после майна потому что она должна быть в отдельном файле как я понял но как его создать и подвязать к программе не знаю
В файле SYSP.H содержится структура для работы с загрузочной записью, описывающая расширенный блок параметров BIOS EBPB и собственно загрузочную запись BOOT:
0
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 908
01.09.2012, 19:55 #11
lexflax, вы на С++ хоть раз писали?
Вы знаете что такое заголовочный файл?
вы наете что делает деректива #include?
0
01.09.2012, 19:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2012, 19:55
Привет! Вот еще темы с ответами:

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

Битые сектор возможность жизни Жёсткого Диска или нет? - Жесткие диски
Привет всем. Суть проблемы - есть жёсткий самсунг на 750, на нём есть папки или файлы при их выборе, что открыть что просто нажать на...

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru