2

Message-quene を介してプロセス間で通信する Linux CUI アプリを作成しました。

シングルインスタンスであれば問題ありません。ただし、同じアプリのインスタンスが複数ある場合、キュー内のメッセージが間違ったインスタンスに送信されます。

これは、msgget 関数に一意のキーを与えることで回避できることを理解しています。ftok() を使用してキーを作成しますが、変数が同じであるため、同じキーが生成されます。

インスタンスごとに一意のキーを設定する方法を教えてもらえますか?

私が今持っている唯一のアイデアは、ftok に与えられた変数をランダム化することであり、それが正しくないことはわかっています。

4

4 に答える 4

2

プロセスIDを使用してみてください。私のGoogle fooはこれを手に入れました

于 2009-03-17T06:00:04.927 に答える
2

ftokに注意!

これは、特定のファイル システムに対してのみ一意であり、そのファイル システムが頻繁に使用されていない場合に限ります。fttok は、ファイル システム内のファイル エントリ番号によって駆動されます。

これは、一意の値を取得するための非常に優れた方法でしたが、時間とムーアの法則が数年前に追いつきました。ファイル番号の下位 8 ビットで機能しますが、実際のファイル番号は 32 ビットになり、ファイル システムごとに番号付けが再び開始されます。

プロセス ID は非常に良い選択です。再循環されますが、プロセスがまだ生きている限りではありません。

于 2009-03-17T06:12:04.803 に答える
0

時計はどうですか? ウィキペディアによると、RDTSC (および SMP セーフ) よりも優れています。

「Linux では、CLOCK_MONOTONICPOSIX の clock_gettime 関数を使用してクロックの値を読み取ることにより、同様の機能が提供されます。」

于 2009-07-02T07:56:10.877 に答える
0

通常、Guid または Uuid と呼ばれるグローバルに一意の ID を調べます。それらを生成するために使用できるライブラリが必要です。それらは、NIC アドレス、現在の時刻、および乱数から作成された一意の文字列です。

于 2009-03-17T06:16:36.227 に答える