Лабораторные работы 1-5 должны компилироваться как под Windows, так и под Linux.
Остальные - под Windows только.
P.S. Все авторские права на предоставленные ниже условия лабораторных работ принадлежат Белорусскому Государственному Университету Информатики и Радиоэлектроники (БГУИР, BSUIR)
Для Windows использовалось:
- Microsoft Visual Studio 2010 SP1 Professional
Для Linux:
- g++ v4.8.4
- make v3.81
- linux версия:
- Перейдите в консоли в папку с нужной лабораторной работой
- Наберите в консоли
make
- После окончания компиляции используйте
make run
для запуска
- windows версия:
- Перейдите в папку с нужной лабораторной работой
- Запустите требуемый
*.sln
файл. - Скомпилируйте нужную вам версию с помощью Visual Studio
Реализовать взаимодействие кофейного аппарата и человека. Человек может опустить в аппарат определенную сумму денег и сделать выбор. Кофейный аппарат может как выдавать различные типы напитков (минимум 2), так и проинформировать пользователя об отсутствии какого-либо напитка либо нехватке средств. Состояние кофейного аппарата сохраняется, т.е. следующий пользователь может не успеть взять определенный напиток, т.к. последнюю порцию забрал предыдущий человек.
К автомату могут подойти несколько пользователей одновременно. Пользователь 2 начнет обслуживаться только тогда, когда отойдет пользователь 1. Требоваиня с предыдущей работы сохраняются.
Каждый клиент - отдельный открытый терминал, клиенты формируют очередь на главном процессе и, как и во второй лабе,
могут получить обслуживание только в порядке очереди.
В это время в главном процессе на терминал должны выводиться имена клиентов в том порядке, как они подключились.
Если в момент вывода создается новый клиент - вывод на главном процессе должен это обработать, если один из клиентов
выключается - вывод на главном процессе должен это обработать.
Если есть 3 клиента(qwe, asd, zxc), то на главный терминал должно выводиться:
qwe asd zxc qwe asd zxc qwe asd zxc .... и так до бесконечности.
Если добавим клиента rty, то вывод должен быть такой:
qwe asd zxc rty qwe asd zxc rty ... до бесконечности.
Если закроем клиента qwe, то вывод должен быть такой:
asd zxc rty asd zxc rty asd zxc rty
Cделать программу, которая будет выводить имена потоков на консоль так же, как работает у Вас сейчас с процессами (в лабораторной работе 3), но с некоторыми изменениями. При запуске параметрами командной строки передаются два параметра: 1 - интервал, с которым будут выводиться имена потоков на экран, 2 - интервал, с которым они будут автоматически создаваться. Помимо автоматического создания, потоки можно создавать/удалять руками, правила такие же, как в предыдущей лабе.
Eсть папка, которая в себе содержит папки с текстовыми файлами. На каждую папку создается отдельный процесс. В каждом процессе будет два потока:
- Первый поток (читатель) асинхронным образом считывает содержимое одного файла;
- Поток-читатель уведомляет второй поток (писатель) о том, что содержимое файла прочитано и может быть передано писателю;
- Поток-писатель получает от первого потока содержимое файла и асинхронным образом записывает полученную строку в конец выходного файла;
- Поток-писатель уведомляет читателя о том, что строка записана в выходной файл и можно приступать к чтению следующего файла;
- Процедура повторяется с п.1, пока не закончится список файлов.
В результате должна быть произведена конкатенация (объединение) входных текстовых файлов в один результирующий.
Функции чтения-записи должны быть выделены в динамическую библиотеку, подключены на этапе выполнения программы и выгружены после отработки основного цикла.
Все результирующие файлы должны быть записаны в самую верхнюю папку, т.е. которая содержит в себе папки с файлами. Эти файлы должны быть названы так, как называется папка, в которой они изначально были. Также эти файлы должны быть текстовыми.
Под текстовыми файлами подразумеваются файлы типа *.txt
.
Каждый процесс рекурсивно обходит вложенные в обрабатываемую им папку папки. Результаты "обходов" также пишутся в основной файл этого процесса.
Разработать собственный менеджер памяти, реализующий аналоги функций malloc()
и free()
.
Разработать собственную файловую систему. Физический носитель в данном случае эмулируется файлом фиксированного размера. Архитектура файловой системы остается на усмотрение студента. В конечном результате должны быть реализованы следующие компоненты:
- библиотека функций по добавлению, удалению и модификации файлов;
- простой файловый менеджер, основанный на данной библиотеке.
Все изменения, внесенные в файловую систему (иерархия директорий, файлы, их атрибуты), должны сохраняться в эмулирующем файле и быть доступными при последующем запуске приложения.