Общая память в Unix - PullRequest
       6

Общая память в Unix

0 голосов
/ 24 сентября 2011

Я создаю демон в Unix, который будет иметь эксклюзивный доступ к последовательному порту "/ dev / tty01". Я планирую создать парадигму процесса Master - Slave, в которой есть один мастер (демон) и несколько рабов.

Я думал о том, чтобы иметь структуру в «Разделяемой памяти», к которой подчиненные могут получить доступ, и в памяти есть только один писатель, поэтому мне, скорее всего, не понадобится семафор. Данные будут обновляться довольно медленно, например, каждую минуту.

Я искал, как лучше всего это сделать, также, если у меня есть структура в разделяемой памяти, как я могу гарантировать, что структура будет смежной в памяти? Это требование, которое я должен иметь.

спасибо

1 Ответ

0 голосов
/ 24 сентября 2011

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

Проще было бы иметьмастер для записи во временный файл (в том же каталоге) и переименование его в окончательное имя, как только оно будет готово (переименование является атомарным).Это предполагает, что клиент периодически открывает () и fstat () файл, чтобы проверить, не был ли он затронут с момента предыдущего чтения.

Еще один способ - избежать файлов и позволить мастеру просто поддерживать свой внутреннийструктуры данных и имеют открытый сокет (listen), который при open () просто выплевывает все данные, которые у него есть в данный момент.Блокировка не требуется.

...