If константное выражение группа операций #elif константное выражение группа операций #else группа операций #endif

Отличие директив #ifdef/#ifndef заключается в том, что константное выражение может быть задано только с помощью #define.

У каждой директивы #if в исходном файле должна быть соответствующая закрывающая директива #endif. Между директивами #if и #endif может располагаться любое количество директив #elif, однако допускается не более одной директивы #else. Директива #else, если присутствует, должна быть последней перед директивой #endif.

Пример

#include <stdio.h>
#include <stdlib.h>
#define P 2
int main()

{

getchar system("chcp 1251");

system("cls");
#if P==1

printf("Выполняется ветка 1");
#elif P==2

printf("Выполняется ветка 2, P=%d", P);
#else

printf("Выполняется другая ветка, P=%d", P);
#endif ();

return 0;
}

Результат выполнения
If константное выражение группа операций #elif константное выражение группа операций #else группа операций #endif - student2.ru

Реализация функции задержки

#include <stdio.h>
#include <time.h>
void delay(int ms) // аргумент- требуемое время задержки в миллисекундах
{

int c = clock() + ms;

while(clock() < c);
}
int main()

{

printf("clock = %d\n", clock());

delay(1000);

printf("clock = %d\n", clock());

getchar();

return 0;
}

Результат выполнения
If константное выражение группа операций #elif константное выражение группа операций #else группа операций #endif - student2.ru

Назад

Работа с файлами

Для удобства обращения информация в запоминающих устройствах хранится в виде файлов.
Файл – именованная область внешней памяти, выделенная для хранения массива данных. Данные, содержащиеся в файлах, имеют самый разнообразный характер: программы на алгоритмическом или машинном языке; исходные данные для работы программ или результаты выполнения программ; произвольные тексты; графические изображения и т. п.
Каталог (папка, директория) – именованная совокупность байтов на носителе информации, содержащая название подкаталогов и файлов, используется в файловой системе для упрощения организации файлов.
Файловой системой называется функциональная часть операционной системы, обеспечивающая выполнение операций над файлами. Примерами файловых систем являются FAT (FAT – File Allocation Table, таблица размещения файлов), NTFS, UDF (используется на компакт-дисках).
Существуют три основные версии FAT: FAT12, FAT16 и FAT32. Они отличаются разрядностью записей в дисковой структуре, т.е. количеством бит, отведённых для хранения номера кластера. FAT12 применяется в основном для дискет (до 4 кбайт), FAT16 – для дисков малого объёма, FAT32 – для FLASH-накопителей большой емкости (до 32 Гбайт).

Рассмотрим структуру файловой системы на примере FAT32.

Файловая структура FAT32

Устройства внешней памяти в системе FAT32 имеют не байтовую, а блочную адресацию. Запись информации в устройство внешней памяти осуществляется блоками или секторами.
Сектор – минимальная адресуемая единица хранения информации на внешних запоминающих устройствах. Как правило, размер сектора фиксирован и составляет 512 байт. Для увеличения адресного пространства устройств внешней памяти сектора объединяют в группы, называемые кластерами.
Кластер – объединение нескольких секторов, которое может рассматриваться как самостоятельная единица, обладающая определёнными свойствами. Основным свойством кластера является его размер, измеряемый в количестве секторов или количестве байт.

Файловая система FAT32 имеет следующую структуру.
If константное выражение группа операций #elif константное выражение группа операций #else группа операций #endif - student2.ru
Нумерация кластеров, используемых для записи файлов, ведется с 2. Как правило, кластер №2 используется корневым каталогом, а начиная с кластера №3 хранится массив данных. Сектора, используемые для хранения информации, представленной выше корневого каталога, в кластеры не объединяются.
Минимальный размер файла, занимаемый на диске, соответствует 1 кластеру.

Загрузочный сектор начинается следующей информацией:

· EB 58 90 – безусловный переход и сигнатура;

· 4D 53 44 4F 53 35 2E 30 MSDOS5.0;

· 00 02 – количество байт в секторе (обычно 512);

· 1 байт – количество секторов в кластере;

· 2 байта – количество резервных секторов.

Кроме того, загрузочный сектор содержит следующую важную информацию:

· 0x10 (1 байт) – количество таблиц FAT (обычно 2);

· 0x20 (4 байта) – количество секторов на диске;

· 0x2С (4 байта) – номер кластера корневого каталога;

· 0x47 (11 байт) – метка тома;

· 0x1FE (2 байта) – сигнатура загрузочного сектора (55 AA).

Сектор информации файловой системы содержит:

· 0x00 (4 байта) – сигнатура (52 52 61 41);

· 0x1E4 (4 байта) – сигнатура (72 72 41 61);

· 0x1E8 (4 байта) – количество свободных кластеров, -1 если не известно;

· 0x1EС (4 байта) – номер последнего записанного кластера;

· 0x1FE (2 байта) – сигнатура (55 AA).

Таблица FAT содержит информацию о состоянии каждого кластера на диске. Младшие 2 байт таблицы FAT хранят F8 FF FF 0F FF FF FF FF (что соответствует состоянию кластеров 0 и 1, физически отсутствующих). Далее состояние каждого кластера содержит номер кластера, в котором продолжается текущий файл или следующую информацию:

· 00 00 00 00 – кластер свободен;

· FF FF FF 0F – конец текущего файла.

Корневой каталог содержит набор 32-битных записей информации о каждом файле, содержащих следующую информацию:

· 8 байт – имя файла;

· 3 байта – расширение файла;

Корневой каталог содержит набор 32-битных записей информации о каждом файле, содержащих следующую информацию:

· 8 байт – имя файла;

· 3 байта – расширение файла;

· 1 байт – атрибут файла:
If константное выражение группа операций #elif константное выражение группа операций #else группа операций #endif - student2.ru

· 1 байт – зарезервирован;

· 1 байт – время создания (миллисекунды) (число от 0 до 199);

· 2 байта – время создания (с точностью до 2с):
If константное выражение группа операций #elif константное выражение группа операций #else группа операций #endif - student2.ru

· 2 байта – дата создания:
If константное выражение группа операций #elif константное выражение группа операций #else группа операций #endif - student2.ru

· 2 байта – дата последнего доступа;

· 2 байта – старшие 2 байта начального кластера;

· 2 байта – время последней модификации;

· 2 байта – дата последней модификации;

· 2 байта – младшие 2 байта начального кластера;

· 4 байта – размер файла (в байтах).

В случае работы с длинными именами файлов (включая русские имена) кодировка имени файла производится в системе кодировки UTF-16. При этого для кодирования каждого символа отводится 2 байта. При этом имя файла записывается в виде следующей структуры:

· 1 байт последовательности;

· 10 байт содержат младшие 5 символов имени файла;

· 1 байт атрибут;

· 1 байт резервный;

· 1 байт – контрольная сумма имени DOS;

· 12 байт содержат младшие 3 символа имени файла;

· 2 байта – номер первого кластера;

· остальные символы длинного имени.

Далее следует запись, включающая имя файла в формате 8.3 в обычном формате.

Наши рекомендации