Практическое задание по дисциплине «Операционные системы» для ЭИОС ГУД



Задание. Очереди сообщений

Изучить механизм работы очередей сообщений в ОС UNIX.

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

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

Ниже будет описана реализация в рамках одной программы.

Что запрограммировать:

1.       Программа работает в 5 разных режимах, в зависимости от переменной, переданной с консоли: (с) создание очереди, (s) запись сообщения в очередь, (r) чтение сообщения из очереди, (р) чтение сообщения без его удаления (по факту чтение и запись), (d) удаление очереди.

2.       Режим «создание очереди». Для создания очереди сообщений используется системный вызов msgget(). Ключ для этого вызова можно либо придумать (положительное целое >300, следить, чтоб не совпало с чужими), либо создать при помощи функции ftok(). Не забыть указать опции IPC_CREAT|IPC_EXCL и права доступа при создании очереди. Завершить программу.

3.       Режим «запись сообщения в очередь». Получить доступ к уже существующей очереди — msgget(). Для получения многострочного сообщения организовать бесконечный цикл приема строк от пользователя. Цикл прерывается, если пользователь ввел пустую строку. На каждой итерации цикла введенную пользователем строку «подклеивать» к результирующей строке-сообщению, которая будет отправлена в очередь. Не забывать про символ переноса строки! Тип-номер сообщения взять от пользователя с командной строки. Для отправки сообщения в очередь использовать системный вызов msgsnd() с неблокирующим флагом IPC_NOWAIT. Завершить программу.

4.       Режим «чтение сообщения из очереди». Получить доступ к уже существующей очереди — msgget(). Тип-номер сообщения взять с командной строки. Для чтения сообщения использовать системный вызов msgrvc() с неблокирующими флагами IPC_NOWAIT|MSG_NOERROR. Вывести сообщение на экран консоли. Завершить программу.

5.       Режим «чтение сообщения без удаления». Тоже самое, что в п. 4, плюс отправка сообщения обратно в очередь как в п. 3.

6.       Режим «удаление очереди». Получить доступ к уже существующей очереди — msgget(). Для удаления очереди использовать системный вызов msgctl(). Выдать сообщение о том, что очередь сообщений удалена. Завершить программу.

Нужна помощь
с дистанционным обучением?
Узнайте точную стоимость или получи консультацию по своему вопросу.