У меня есть демон (который должен быть написан на C), который должен иметь пульт, как это делают обычные медиаплееры:
mediaplayer-rc --enqueue /path/to/song.mp3
Если mediaplayer-daemon
не запущен, он запускается пультомконтроллер.Пульт будет передавать сообщение.
Я выбрал подход, который показался мне наиболее интуитивным:
- Клиентское приложение пытается подключиться () и запускает демон, если может 't
- Клиент использует
argp
для анализа параметров в структуре - Клиент отправляет структуру через сокет
- Сервер получает структуру и интерпретирует это
У меня есть простая демонстрационная реализация , использующая сокеты libev и unix на github .
По моим соображениям, было проще написать клиент на C,можно вызывать из других языков с их версией system()
, чем пытаться заставить другой язык правильно pack
struct или заставить библиотеку C анализировать какой-то другой формат.
Но я не думаю, чточто это особенно элегантное решение.
Другая возможность - использовать JSON.В итоге использование парсера JSON в vanilla C, вероятно, будет гораздо сложнее, чем анализатор args.В результате JSON (или YAML) входит в стандартные библиотеки практически всех других языков.
Есть предложения?Кто-нибудь знает, как эта песня, gimp, itunes и другие приложения решают эту проблему?