Процесс Master / Slave с общей памятью для доступа к одному последовательному порту - PullRequest
0 голосов
/ 25 сентября 2011

Я создаю демон в Unix, который будет иметь эксклюзивный доступ к последовательному порту "/ dev / tty01". Я планирую создать парадигму процесса Master-Slave, в которой есть один мастер (демон) и несколько рабов. Я думал о том, чтобы иметь структуру в «Общей памяти», к которой могут получить доступ подчиненные, и в памяти есть только один писатель, поэтому мне, скорее всего, не понадобится семафор. Данные будут обновляться довольно медленно, например, каждую минуту. Я искал, что было бы наилучшим способом сделать это, также, если у меня есть структура в разделяемой памяти, как я могу гарантировать, что структура будет смежной в памяти? Это требование, которое я должен иметь.

Основная программа будет иметь собственную внутреннюю структуру данных, которая обновляется через последовательный порт, а затем она будет изменять данные и отправлять их в глобальную структуру, которая находится в общей памяти для использования клиентами.

У меня нет большого опыта работы с Unix IPC, но какой самый простой способ сделать это? Кстати, все клиенты будут разными процессами, запущенными другими пользователями локально в системе

Он должен использовать разделяемую память, это требование проекта. Кроме того, возможно ли скопировать одну структуру в другую, если вторая структура имеет разные типы данных?

1 Ответ

0 голосов
/ 25 сентября 2011
  1. Сегмент разделяемой памяти - это непрерывный фрагмент памяти с точки зрения вашего процесса.

  2. Вызовы для создания и обработки совместно используемой памяти довольно просты (shmctl/ shmat / shmdt)

  3. Расположение структур в памяти зависит от вас.Лучшим является фиксированный заголовок, такой как поле типа, а остальные - как объединение.

  4. Для ваших клиентских процессов вы можете предоставить небольшую библиотеку (статическую или общую) с набором функций для извлеченияданные, тем самым скрывая общую память и структуры.

...