Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SPO_Курсовой_Мальцева.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
509.95 Кб
Скачать

Содержание

1. Введение. 3

2. Теоритическая часть. 3

2.2 Получение содержимого каталога 3

2.3 Структура struct dirent 3

2.4 Получение информации о файле 4

3. Практическая часть. 6

3.1. Разработка блок-схемы алгоритма. 7

3.2. Прототип системного программного обеспечения для реализации схожей задачи. 8

3.3. Программный код реализации программы для автоматического обновления и вывода информации по указанному каталогу. 9

4. Заключение. 10

5. Список литературы. 11

5.1. Удаленные электронные ресурсы. 11

  1. Введение.

Целью данного курсового проекта является модернизация заданного алгоритма программы для вывода информации о статусе каталога.

  1. Теоритическая часть.

2.1 Структура dirent.

Dirent - входная структура каталога, независимая от файловой системы.

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

Для работы с директориями необходимо определить переменную типа DIR (по смыслу она похожа на тип FILE).

2.2 Получение содержимого каталога

Получив полный путь к каталогу, нужно просмотреть его записи. Каталог нельзя открыть подобно файлу при помощи функций open()или fopen(), а даже если и можно было бы открыть каталог таким образом, то представление полученных данных сильно зависело бы от используемой системы, и отличалось бы от того, с чем привык иметь дело обычный программист.

Функции из заголовочного файла dirent.h: opendir(), readdir() и closedir() – это то, что надо в подобной ситуации. Их применение очень схоже с использованием функций open/read/close при работе с файлами, но с одним исключением: функция readdir()возвращает указатель на специальную структуру (тип struct dirent) для каждого элемента каталога.

Функции opendir() и readdir() возвращают NULL, если возникла какая-то проблема, а в глобальную переменную errno записывается причина проблемы. Если readdir() возвращает NULL и errno равняется 0 (или, по-другому, EOK или ENOERROR), это значит, что в каталоге больше нет записей.

Нужно отметить, что каждый каталог содержит записи "." (указатель на сам каталог) и ".." (указатель на родительский каталог). В зависимости от поставленных задач обработку этих двух записей, возможно, придется пропустить.

Заметим, что readdir() не является многопоточной функцией, поскольку возвращаемая структура является статической переменной, которая хранится в библиотеке функции. Большинство современных UNIX-систем поддерживают многопоточную функцию readdir_r(), которую можно использовать вместо того чтобы писать свой многопоточный код.

2.3 Структура struct dirent

Стандарт POSIX 1003.1 определяет только один необходимый элемент структуры struct dirent – массив элементов типа char с именем d_name. Это имя элемента каталога в виде стандартной NUL-завершенной строки. Все остальное в этой структуре зависит от конкретной UNIX-системы.

Все остальное, что находится в struct dirent, не является переносимым. Совместимые системы могут вообще не иметь других элементов в этой структуре. При создании программного кода, который использует дополнительные члены этой структуры, необходимо отмечать эти элементы как непереносимые, и в идеале включать в свой проект код, который делает те же самые операции, только без дополнительных элементов в struct dirent.

Например, многие UNIX-системы содержат поле d_type и несколько дополнительных констант, которые позволяют узнать тип элемента каталога без вызова функции stat(). Кроме избавления от необходимости лишний раз вызывать функцию это непереносимое расширение позволяет избежать занимающего много ресурсов запроса к файловой системе за подробными метаданными. Функцияstat() на большинстве UNIX-систем работает медленно.