Модернизация заданного алгоритма программы для вывода информации о статусе каталога
Особенности dirent как входной структуры каталога, независимой от файловой системы. Получение содержимого каталога и информации о файле. Разработка блок-схемы алгоритма программы. Изучение программного обеспечения для реализации поставленной задачи.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 22.07.2014 |
Размер файла | 1,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
- Введение
- 1. Теоретическая часть
- 1.1 Структура dirent
- 1.2 Получение содержимого каталога
- 1.3 Структура struct dirent
- 1.4 Получение информации о файле
- 2. Практическая часть
- 2.1 Разработка блок-схемы алгоритма
- 2.2 Прототип системного программного обеспечения для реализации схожей задачи
- 2.3 Программный код реализации программы для автоматического обновления и вывода информации по указанному каталогу
- Заключение
- Список использованных источников и литературы
- Введение
Целью данного курсового проекта является модернизация заданного алгоритма программы для вывода информации о статусе каталога.
1. Теоретическая часть
1.1 Структура dirent
Dirent - входная структура каталога, независимая от файловой системы.
Различные файловые системы могут иметь различные входные структуры каталогов. Структура dirent определяет структуру каталога, независящую от файловой системы, которая содержит информацию, общую для входных структур каталогов в различных типах файловых систем. Набор этих структур возвращается в результате системного вызова getdents.
Для работы с директориями необходимо определить переменную типа DIR (по смыслу она похожа на тип FILE).
1.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 информацией об определенном файле; если вместо имени файла имеется файловый дескриптор, то можно использовать его совместно с fstat(). Если также необходимо обнаруживать символические ссылки, то вместе с именем файла следует использовать lstat().
В отличие от struct dirent, которую возвращает readdir(), struct stat имеет довольно много обязательных стандартных полей:
· st_mode - права доступа к файлу (пользователь, группа, остальные) и флаги.
· st_ino - порядковый номер файла.
· st_dev - устройство, на котором расположен файл.
· st_nlink - счетчик числа связей.
· st_uid - идентификатор пользователя-владельца файла.
· st_gid - идентификатор группы-владельца.
· st_size - размер файла в байтах (для файлов regular).
· st_atime - время последнего доступа к файлу.
· st_mtime - время последней модификации файла.
· st_ctime - время создания файла.
Используя макрос S_*() для поля st_mode, можно определить тип файла:
· S_ISBLK(mode) - специальный блочный файл? (обычно это блочное устройство).
· S_ISCHR(mode) - специальный символьный файл? (обычно это символьное устройство).
· S_ISDIR(mode) - каталог?
· S_ISFIFO(mode) - UNIX-канал (pipe) или файл типа FIFO?
· S_ISLNK(mode) - символическая ссылка?
· S_ISREG(mode) - обычный файл?
Функция stat() выполняется достаточно медленно на большинстве файловых систем, поэтому лучше будет хранить эту информацию в памяти на случай, если она понадобится позже.
Пример программы:
#include <errno.h>
#include <dirent.h>
#include <string.h>
#define FOUND 0
#define NOT_FOUND 1
#define READ_ERROR 2
#define OPEN_ERROR 3
#define NOARG 4
int main (int argc, char *argv []) {
struct dirent *dp;
DIR *dirp;
const char *name;
if (argc > 1) {
name = argv [1];
} else {
return NOARG;
}
dirp = opendir(".");
while (dirp) {
errno = 0;
if ((dp = readdir(dirp)) != NULL) {
if (strcmp(dp->d_name, name) == 0) {
closedir(dirp);
return FOUND;
}
} else {
if (errno == 0) {
closedir(dirp);
}
closedir(dirp);
}
}
return OPEN_ERROR;
}
2. Практическая часть
2.1 Разработка блок-схемы алгоритма
Рисунок 4. Блок-схема
2.2 Прототип системного программного обеспечения для реализации схожей задачи
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
extern char *ctime();
main()
{
time_t last; struct stat st;
for( stat(".", &st), last=st.st_mtime; ; sleep(2))
{
stat(".", &st);
if(last != st.st_mtime)
{
last = st.st_mtime;
printf("Был создан или удален какой-то файл: %s",
ctime(&last));
}
}
}
Рисунок 1. ScreenShot исходного кода программы.
Рисунок 2. Выполнение исходной программы.
dirent каталог программа алгоритм
2.3 Программный код реализации программы для автоматического обновления и вывода информации по указанному каталогу
Рисунок 5. ScreenShot исходного кода программы.
Рисунок 6. Компиляция программы, команда на выполнение, выполнение программы.
Заключение
В данном курсовом проекте я ознакомилась со структурой dirent. Выполнила построение блок-схемы, изучила прототип программы для реализации схожей задачи. Написала программный код путём изменения заданного алгоритма программы с помощью системных функций opendir и readdir.
Список использованных источников и литературы
Литература
1. Богатырев А. Хрестоматия по программированию на Си в Unix
2. Столлман Р. Компилятор языков C, C++, Objective C gcc 2.7
3. Граннеман С. Linux. Карманный справочник
Удаленные электронные ресурсы
1. http://forum.ubuntu.ru/ - Форум русскоязычного сообщества Ubuntu
2. http://www.opennet.ru/- Проект OpenNet - портал по открытому ПО, Linux, BSD и Unix системам
3. http://citforum.ru/operating_systems/manpages/SETJMP.3.shtml -Библиотека Linux
4. http://linux.yaroslavl.ru/docs/prog/glibc/glibc-20.html - Библиотека языка C GNU glibc
5. http://ru.wikipedia.org/wiki/Setjmp.h - Свободная энциклопедия
Размещено на Allbest.ru
Подобные документы
Программное обеспечение для мониторинга каталога продукции предприятия, анализа склада, получения информации об актуальной стоимости товара, с учетом налоговой политики. Подключение к файловой системе. Определение объема программного обеспечения.
дипломная работа [500,3 K], добавлен 15.01.2017Проектирование программного обеспечения. Схема начального формирования каталога файлов, вывода на экран каталога файлов, удаления файлов, сортировки файлов по имени, дате создания и размеру методом прямого выбора. Управление каталогом в файловой системе.
курсовая работа [804,0 K], добавлен 08.01.2014Программная реализация алгоритма составления каталога товаров из сети электронных магазинов с выявлением одинаковых, используя сравнение по изображениям. SURF-метод в основе алгоритма: поиск особых точек на изображении и составление их дескрипторов.
дипломная работа [3,1 M], добавлен 27.06.2012Создание автоматизированного каталога режущего инструмента предприятия с использованием современного программного обеспечения: СУБДFireBird 2.5 и среда разработки приложений C++ Builder 6. Разработка программного модуля для работы и автоматизации.
курсовая работа [3,2 M], добавлен 14.12.2012Анализ входной и выходной информации, особенности ее документационного обеспечения. Описание таблиц и их основное содержание. Методика и этапы разработки интерфейса программы и ее листинг, а также формирование инструкций пользователя и программиста.
курсовая работа [682,7 K], добавлен 30.07.2015Основные аналитические соотношения. Блок схемы и алгоритм решения задачи. Проверка работоспособности алгоритма вручную. Таблица идентификации переменных. Формы входной и выходной печати. Разработка и отладка программы. Инструкция для работы с программой.
курсовая работа [69,8 K], добавлен 13.02.2012Разработка алгоритма поставленной задачи по обработке числовой информации в среде Turbo Pascal 7.0 с базовым языком программирования Pascal, отладка программы, реализующей разработанный алгоритм. Описание структуры программы, ее вспомогательных процедур.
курсовая работа [668,0 K], добавлен 25.02.2010Использование программы Adobe Flash CS4 Professional для создания анимации и мультимедийного контента. Проектирование интерфейса электронного каталога музыкальной группы "Аквариум". Программная документация и способы загрузки мультимедийного содержимого.
курсовая работа [4,6 M], добавлен 05.12.2012Назначение программного модуля (базы данных). Разработка информационной базы данных для колледжа. Поиск пользователями информации о преподавателях и дисциплинах. Анализ входной и выходной информации. Разработка алгоритма работы программы-приложения.
реферат [513,1 K], добавлен 22.10.2012Описание алгоритма работы и разработка структурной схемы МКС. Схема вывода аналогового управляющего сигнала, подключения ЖК-дисплея, клавиатуры и аварийного датчика. Разработка блок-схемы алгоритма главной программы работы МКС. Функция инициализации.
курсовая работа [5,7 M], добавлен 26.06.2016