Межпроцессное взаимодействие с демоном - PullRequest
11 голосов
/ 17 июля 2011

Я хочу реализовать демон Unix (назовем его myUnixd ) и хочу, чтобы пользователь мог взаимодействовать с этим демоном из командной строки, например:

myUnixd --help # will display help information
myUnixd --show # will show some data (the's deamon should be doing the work)

Итак, мой вопрос: как я могу общаться с демоном?Я думал о доменных сокетах Unix.Может кто-нибудь сказать мне правильный способ сделать это?

Спасибо.

Ответы [ 3 ]

9 голосов
/ 17 июля 2011

Используйте Беркли розетки . В частности, вы можете создать «сокет домена UNIX» (также известный как «сокет локального домена»), который создаст то, что выглядит как текстовый файл. Записать в текстовый файл для отправки текста демону, прочитать из него для получения текста от демона. Вы можете реализовать это с помощью нескольких вызовов функций.

Если вы хотите что-то более продвинутое, вы также можете использовать DBus , который предлагает более сложный интерфейс, но более сложный для изучения.

1 голос
/ 17 июля 2011

используйте сокет tcp, если вы хотите использовать telnet для связи с вашим демоном.

0 голосов
/ 30 января 2019

Можно также использовать Удаленный вызов процедур (RPC) для такой связи клиент-сервер. Существуют различные типы сообщений (протоколов), которые могут использоваться вместе с ним, одним из которых является JSON.

Протокол JSON-RPC очень хорошо подходит для таких задач. Вы можете найти различные инструменты и библиотеки для встраивания в ваше программное обеспечение. Быстрый поиск в Google дает эту библиотеку C . Преимущество таких библиотек состоит в том, что из файла спецификации JSON, где вы определяете все свои удаленные вызовы функций, он создает клиента и / или сервера заглушки , которые вы можете просто использовать в своем коде из коробки.

В качестве прослушивателя можно использовать сокеты в качестве состояния других ответов или просто встроенный HTTP-сервер, такой как microhttpd libcurl для клиента). Есть много примеров, чтобы просто использовать повторно. HTTP также позволяет запускать ваш клиент за прокси-сервером.

...