複数のインスタンスを持つことができるアプリのメッセージキューの一意のキーを作成する

StackOverflow https://stackoverflow.com/questions/653119

  •  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;

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top