Подтвердить что ты не робот

Межпроцессная связь с демоном

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

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

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

Спасибо.

4b9b3361

Ответ 1

Используйте сокеты Berkeley. В частности, вы можете создать "UNIX-сокет" (иначе известный как "локальный доменный сокет" ), который создаст то, что выглядит как текстовый файл. Напишите в текстовый файл для отправки текста демону, прочитайте его, чтобы получить текст от демона. Вы можете реализовать это с помощью нескольких вызовов функций.

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

Ответ 2

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

Ответ 3

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

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

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