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

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

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

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

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


person zacharoni    schedule 25.09.2011    source источник


Ответы (1)


  1. Сегмент разделяемой памяти — это непрерывный участок памяти с точки зрения вашего процесса.

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

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

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

person Community    schedule 25.09.2011