複数のインスタンスを持つことができるアプリのメッセージキューの一意のキーを作成する
-
19-08-2019 - |
質問
Message-queneを介してプロセス間で通信するLinux CUIアプリを作成しました。
単一のインスタンスであれば問題ありません。ただし、同じアプリのインスタンスが複数ある場合、Queneのメッセージは間違ったインスタンスに送信されます。
これは、msgget関数に一意のキーを与えることで回避できることを理解しています。 ftok()を使用してキーを作成しますが、変数が同じであるため、 同一のキー。
インスタンスごとに一意のキーを取得する方法を誰か教えてもらえますか?
私が今持っている唯一のアイデアは、ftokに与えられた変数をランダム化することです。 私はそれが正しくないことを知っています。
解決
ftokに注意してください!
これは、特定のファイルシステムに対して一意であり、その場合のみ ファイルシステムはあまり使用されていません。 fttokは、ファイルシステムのファイルエントリ番号によって駆動されます。
これは、一意の値を取得するのにかなり良い方法でしたが、時間は ムーアズ法は数年前にそれに追いついた。で動作します ファイル番号の下位8ビットですが、実際のファイル番号は32ビットになりました ファイルシステムごとに番号付けが再開されます。
プロセスIDはかなり良い選択です。それらはリサイクルされますが、 プロセスがまだ生きている限り。
他のヒント
プロセスIDを使用してみてください。 google fooが this
を取得しました通常はGuidまたはUuidと呼ばれるグローバルに一意のIDを探します。それらを生成するために使用できるライブラリが必要です。これらは、nicアドレス、現在の時刻、および乱数から作成された一意の文字列です。
時計はどうですか? WikiPedia は、RDTSC(およびSMPセーフ)よりも優れていると言います。
<!> quot; Linuxでは、POSIX clock_gettime関数を使用してCLOCK_MONOTONIC
clockの値を読み取ることにより、同様の機能が提供されます。<!> quot;