Опция с использованием файлов блокировки
Вы можете сделать это, заблокировав файл.
Начальная настройка излучателя сигнала:
- Создайте файл с хорошо известным именем и заблокируйте его для записи (
fcntl(F_SETLK)
с F_WRLCK
или flock (LOCK_EX) `).
Процедура приема сигнала:
- Откройте файл, используя известное имя файла, и попытайтесь установить для него блокировку чтения (
fcntl(F_SETLK)
с F_RDLCK
или flock(LOCK_SH)
).
- Блоки приемника, потому что эмиттер держит конфликтующую блокировку записи.
Излучение сигнала:
- Генератор сигналов создает новый временный файл
- Излучатель сигнала получает блокировку записи для нового временного файла
- Генератор сигналов переименовывает новый временный файл в хорошо известное имя файла. Это забивает старый файл блокировки, но все ожидающие получатели сохраняют ссылки на него.
- Генератор сигналов закрывает старый файл блокировки. Это также снимает блокировку.
- Все получатели сигналов просыпаются, потому что теперь они могут получить свои блокировки чтения.
- Получатели сигнала должны закрыть файл, к которому они только что получили блокировку. Это не будет использоваться снова. Если они хотят дождаться повторения условия, они должны снова открыть файл.
В источнике сигнала временный файл блокировки, который был переименован поверх исходного файла блокировки, теперь становится новым текущим файлом блокировки.
Опция использования многоадресной сети
Пусть получатели присоединятся к многоадресной группе и будут ждать пакеты. Пусть передатчик сигнала отправит пакеты UDP этой группе многоадресной рассылки.
Вы можете привязать и отправляющий и принимающий сокеты UDP к интерфейсу обратной связи, если вы хотите, чтобы он использовал только локальную связь с хостом.