Зміст
Введення
. Теоретична частина
. 1 Структура dirent
. 2 Отримання вмісту каталогу
. 3 Структура struct dirent
. 4 Отримання інформації про фото
. Практична частина
. 1 Розробка блок-схеми алгоритму
. 2 Прототип системного програмного забезпечення для реалізації схожою завдання
. 3 Програмний код реалізації програми для автоматичного оновлення і виведення інформації за вказаною каталогом
Висновок
Список використаних джерел та літератури
Введення
Метою даного курсового проекту є модернізація заданого алгоритму програми для виведення інформації про статус каталогу.
1. Теоретична частина
. 1 Структура dirent
- вхідна структура каталогу, незалежна від файлової системи.
Різні файлові системи можуть мати різні вхідні структури каталогів. Структура dirent визначає структуру каталогу, незалежну від файлової системи, яка містить інформацію, загальну для вхідних структур каталогів в різних типах файлових систем. Набір цих структур повертається в результаті системного виклику getdents.
Для роботи з директоріями необхідно визначити змінну типу DIR (за змістом вона схожа на тип FILE).
. 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 (), яку можна використовувати замість того щоб писати свій багатопотоковий код.
1.3 Структура struct dirent
Стандарт POSIX 1003.1 визначає тільки один необхідний елемент структури struct dirent - масив елементів типу char з ім'ям d_name. Це ім'я елемента каталогу у вигляді стандартної NUL-завершеною рядка. Все інше в цій структурі залежить від конкретної UNIX-системи.
Все інше, що знаходиться в struct dirent, не є стерпним. Сумісні системи можуть взагалі не мати інших елементів у цій структурі. При створенні програмного коду, який використовує додаткові члени цієї структури, необхідно відзначати ці елементи як нестерпні, і в ідеалі включати в свій проект код, який робить ті ж самі операції, тільки без додаткових елементів в struct dirent.
Наприклад, багато UNIX-системи містять поле d_type і кілька додаткових констант, які дозволяють дізнатися тип елемента каталогу без виклику функції stat (). Крім позбавлення від необхідності зайвий раз викликати функцію це нестерпне розширення дозволяє уникнути займає багато ресурсів запиту до файлової системи за докладними метаданими. Функціяstat () на більшості UNIX-систем працює повільно.
1.4 Отримання інформації про фото
Крім імен файлів, що знаходяться в каталозі може знадобитися деяка додаткова інформація, яка внесла б ясність у те, що треба робити далі. Принаймні, не можна тільки по імені відрізнити файл від каталогу.
Функція stat () заповнює структуру struct stat інформацією про певний файлі; якщо замість імені файлу мається файловий дескриптор, то можна використовувати й...