Skip to content

Задание 14. Разделяемая память и семафоры

License

Notifications You must be signed in to change notification settings

EltexEmbeddedC/shared-memory-and-semaphores

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Разделяемая память и семафоры

Сборка и запуск

  1. Необходимо перейти в корневую директорию и выполнить команду для сборки проекта make

  2. Исполняемые файлы появятся в папке bin

  3. Для удаления всех объектных и исполняемых файлов необходимо выполнить команду make clean

Задания

Задание 1. Реализовать 2 программы, первая сервер, вторая клиент. Сервер создает сегмент разделяемой памяти (достаточный для хранения сообщений) и записывает сообщение виде строки Hi!, ждет ответа от клиента и выводит на экран, удаляет сегмент разделяемой памяти. Клиент подключается к сегменту разделяемой памяти и считывает сообщение от сервера, выводит на экран, отвечает серверу сообщением виде строки Hello!. Сделать это как для POSIX, так и для SYSTEM V стандартов.

Убедимся, что программа работает, запустив сервер, а затем клиента:

Sample Image

Note

Результат работы для POSIX и SYSTEM V стандартов будет одинаковый.

Задание 2. Написать 2 программы: первая сервер, вторая клиент. Сервер создает сегмент разделяемой памяти для реализации чата с общей комнатой и его задача уведомлять клиентов о появлении новых участников, о новых сообщениях. Клиент подключается к сегменту разделяемой памяти, созданному сервером, сообщает ему свое имя и получает в ответ все сообщения в комнате. Далее может отправлять сообщения в общий чат. Получение служебных сообщений от сервера (имена новых клиентов, сообщения от других пользователей) и отправка сообщений в чат лучше реализовать в разных потоках. Интерфейс клиента реализуем с помощью библиотеки ncurses.

Запуск

  1. Запуск сервера: ./t2server
  2. Запуск клиента ./t2client <имя_клиента>

Управление

  1. Tab - переключение активного окна (сообщений / пользователей);
  2. - прокрутить список активного окна вверх;
  3. - прокрутить список активного окна вниз;
  4. Ctrl+C - выход из программы.

Описание работы

Сервер:

  1. Создает сегмент разделяемой памяти для хранения данных о клиентах и сообщениях;
  2. Создает семафор для синхронизации доступа к разделяемой памяти;
  3. Ожидает подключения клиентов, постоянно проверяя и обновляя данные в памяти;
  4. Обрабатывает сигнал Ctrl+C для корректного завершения работы: отсоединяется от разделяемой памяти и удаляет ее, а также удаляет семафор.

Клиент:

  1. Подключается к сегменту разделяемой памяти и семафору, созданному сервером;
  2. Записывет информацию о себе в разделеяемой памяти;
  3. Получает и отображает список текущих пользователей и сообщения из чата;
  4. Проверяет обновления в разделяемой памяти и слушает ввод пользователя в разных потоках;
  5. Обрабатывает сигнал Ctrl+C для корректного завершения работы: удаляет свое имя из списка пользователей, отсоединяется от разделяемой памяти и завершает работу ncurses.

Демонстрация работы

  • Запустим сервер, а затем клиента_1. Клиент_1 пишет сообщение в чат. Затем запускается клиент_2. Он получает информацию об уже написанных сообщениях и именах всех клиентов, подключенных к чату (это клиент_1 и клиент_2). Клиенту_1 тем временем приходит информация о подключении клиента_2:

    Подключение

    Сервер тем временем логирует всю информацию.

  • Оба клиента обмениваются в чате приветственными сообщениями:

    Обмен приветствиями

  • Клиент_1 отключается от сервера. У клиента_2 обновляется информация о подключенных пользователях. Отключается клиент_1, вручную завершается работа сервера:

    Отключение

About

Задание 14. Разделяемая память и семафоры

Resources

License

Stars

Watchers

Forks