私はデーモン(Cで書かれている必要があります)を持っています。これは一般的なメディアプレーヤーのようにリモートを持っている必要があります:
mediaplayer-rc --enqueue /path/to/song.mp3
が実行されていない場合mediaplayer-daemon
は、リモートコントローラーによって開始されます。リモコンがメッセージを渡します。
私は私にとって最も直感的に思えるアプローチを取りました:
- クライアントアプリケーションはconnect()を試行し、接続できない場合はデーモンを起動します
- クライアントは
argp
、パラメータを構造体に解析するために使用します - クライアントは構造体をソケットを介して送信します
- サーバーは構造体を受け取り、これを解釈します
githubでlibevソケットとunixソケットを使用した簡単なデモ実装があります。
system()
私の推論は、別の言語を構造体に正しく取得しようとしpack
たり、Cライブラリに他の形式を解析させたりするよりも、他の言語からそのバージョンで呼び出すことができるクライアントをCで作成する方が簡単に思えたということです。
しかし、これが特にエレガントな解決策だとは思いません。
もう1つの可能性は、JSONを使用することです。結論として、バニラCでJSONパーサーを使用すると、argsパーサーよりもはるかに複雑になる可能性があります。結果として、JSON(またはYAML)は、他のほぼすべての言語の標準ライブラリに含まれています。
助言がありますか?誰かがsongbird、gimp、itunes、およびリモコン付きの他のアプリがこの問題をどのように処理するか知っていますか?