2009-03-17 9 views
2

私は、Message-Quene経由でプロセス間で通信するLinux CUIアプリケーションを作成しました。複数のインスタンスを持つ可能性のあるアプリケーションのメッセージクイン用のユニークキーを作成する

1つのインスタンスであれば問題ありません。しかし、同じアプリのインスタンスが複数ある場合、queneのメッセージは間違ったインスタンスに送信されます。

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

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

今私が持っている唯一のアイデアは、ftokに与えられた変数をランダマイズすることです。 私は正しいことは知っています。

答えて

2

ftokに注意してください!

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

これは、ユニークな値を得るにはかなり良い方法でしたが、時間は で、ムーアの法則は数年前にそれに追いついていました。これはファイル番号の下位8ビットの で機能しますが、実際のファイル番号は今や32ビットの であり、各ファイルシステムの番号付けが再び開始されます。

プロセスIDはかなり良い選択ですが、プロセスがまだ生きている限り、再循環されますが、 と長くはなりません。

+0

アドバイスありがとうございます!私がftokを使用するたびに心に留めておきます – Saifis

2

プロセスIDを使用できます。私のgoogle fooが得たthis

0

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

0

時計はどうですか? WikiPediaは、RDTSC(とSMPセーフ)より優れていると言います。

"Linuxでは、CLOCK_MONOTONICクロックの値をPOSIX clock_gettime関数を使用して読み取ることで、同様の機能が提供されます。

関連する問題