2017-01-24 4 views
1

Я пытаюсь реализовать реконфигурируемый IPC в среде C++ под управлением Linux, используя POSIX IPC. В текущей конфигурации у меня есть процесс A, связывающий FIFO с процессом B. Процесс B берет данные из FIFO, вносит некоторые изменения и отправляет их в другой процесс C через другой FIFO. Вот графическое представление: 1Перенаправление FIFO во время выполнения в Linux

Затем, во время выполнения Я хотел бы, чтобы убить процесс B, и быть в состоянии позволить процесс А для передачи данных через FIFO между B и C:

2

Как я могу это сделать?

+1

Закройте существующий FIFO в процессе A и откройте тот, который используется процессом C в режиме только для записи? –

ответ

0

Если вы убьете процесс, его открытые файловые записи закрыты. Поэтому, если вы убиваете B, это вызовет EOF в FIFO, как видно C. Однако, если у вас есть именованный FIFO, который сохраняется после закрытия B, C может продолжить чтение из filedescriptor, связанного с FIFO, хотя это будет немедленно возвращайте EOF, пока другой конец не будет снова открыт.

Другой вариант состоит в том, чтобы B послал свой выход обратно в A, который затем переводит этот вывод на C. Таким образом, он всегда будет контролировать то, что отправляется на C, и C не нужно беспокоиться о том, что его FIFO закрыт и вновь открылся.

+0

Да, я уже решил таким образом проблему закрытия программы и потери дескрипторов. Мой вопрос был больше о том, была ли возможность, не мешая процессам A и C делать программную связь между двумя FIFO (своего рода мягкая ссылка). Я думаю, что наилучшим решением является уведомление процесса А о том, что процесс В закрывается и что ФИФО для его использования становится тогда одним из С. – Jamaslab

Смежные вопросы