はのは、あなたのアプリケーションがmyApp
呼ばれると仮定しましょう、と-cfg <...>
コマンドライン...私は次のようにあなたが探している正確な機能を提供するとは思わないが、それは思考の余地を提供するかもしれませんオプションは、その構成のソースを指定するために使用されます。あなたは上記の
myApp -cfg /path/to/configuration/file.cfg
...次のオプションを可能性が明らかである:指定したファイルから設定を読み込みます。
myApp -cfg "exec#curl -sS http://configWebServer/path/to/file.cfg"
exec#
接頭辞が指定されたコマンドを実行すべきことを指定します。コマンドが標準出力に書き込むことが期待されます。その標準出力は構成ファイルとして解析されます。
ちなみに、curl
はcat URLを表します。これは、HTTP(S)、FTP(S)、LDAPなどのさまざまなプロトコルを使用してファイルを取得できるオープンソースのユーティリティです。 -sS
コマンドラインオプションcurl
には、エラーメッセージ以外の診断メッセージは表示されません。これはおそらく必要なものです。
"exec#..."
形式は、他の手段を使用して構成情報を取得する手段を提供します。たとえば、データベース、Subversionリポジトリなどからクエリを実行するスクリプトなどから、必要なものを探します。
また、次のバリエーションをサポートしたいかもしれません:共有ライブラリをロードします
myApp -cfg "shared_lib=foo#..."
はfoo
と呼ばれ、パラメータとして「"...
を渡して、その中のエントリポイント関数を呼び出すこと。共有ライブラリーの機能の1つが共有メモリーから構成情報を検索し、別の実装がリモート・プロシージャー呼び出しまたはソケット接続を介してそれを取得する可能性があります。
すべての異なる検索メカニズムには、のみがあります。構成データを(潜在的に大きい)文字列として取り出す責任。たとえば、-cfg /path/to/file.cfg
メカニズムは、ファイルの内容全体を読み取り、文字列(またはおそらくstd::istream
)として返します。その(潜在的に大きい)文字列は、 "実際の"設定パーサ(XML/ini/propertiesファイルのパーサなど)に渡されます。
私は上記の提案があなたの質問の半分の解決策を提供すると信じています。特に、任意のソースから構成データを検索するためのプラグイン・アーキテクチャーを提供します。プラグインは、シェル・コマンドまたは共用ライブラリーとして書き込むことができます。
質問のもう半分は、基本的には:「アプリケーションは、更新された構成データをどのように動的に取得できますか?」私はその要件に取り組んでいない。部分的に私は提供するエレガントなソリューションを持っていないため。また、構成データの再読込を引き起こす可能性があることを示していないため、
ところで、私はConfig4*と呼ばれるC++/Java構成パーサライブラリのメンテナーです。そのライブラリは、"exec#..."
機能の実装を提供します。このような機能をどのように実装できるかを見るためにソースコードを調べたい場合に備えて、私は言います。 "shared_lib=foo#..."
をサポートするために必要なコードは、"exec#..."
をサポートするための既存のコードで簡単にモデル化できると思う。 "Config4 * Getting Started Guide"(PDFおよびHTML形式でWebサイトから入手可能)は、人々が悪質なコマンドを実行しようとするのを防ぐためのセキュリティメカニズムを含め、-cfg "exec#..."
の機能に関する良い議論を提供します。 Component10 @
私はあなたがそれはあなたがソースコードの構成管理(すなわち、バージョンコントロール)の話をされるかもしれない印象を与えるとして、タイトルを変更したい場合があります示唆 –
、感謝 - 更新。 – stackmate
*標準についてはわかりませんが、あなたは[GSettings](http://developer.gnome.org/gio/2.32/GSettings.html)を探しているかもしれません。 – zwol