Linux上のプロジェクトのプロセス間でデータを共有するためにshmgetを使用しています。shmgetの鍵として使用する安全な値
int shmget(key_t key, size_t size, int shmflg);
私はたshmgetを呼び出すためのキーとして定数を使用しているため、私はので、代わりに生成されたキーの定数を使用する必要があり、(ただし、他のプログラムがあまりにもたshmgetするために呼び出すことができ、ひいてはそれがキーの競合につながる可能性横方向のプロセスが構築され、別々に実行される)。
shmgetでキーとして使用する安全な値は何でしょうか?
私はランダムキーを生成することを考えていて、受け入れ可能なキーが見つかるまでIPC_EXCLフラグを使ってshmセグメントを作成することを繰り返しますが、良いオプションかどうかわかりません。 – jondinham
@PaulDinh:はい、それは良い選択です。まあ、特定の 'sizeof(key_t)'に頼ることなく、ランダムキーを生成する方法が必要です。私はちょうどftok()にランダムな 'id'を使っています。 –
各クライアントがサーバとの効率的なIPCのために共有メモリセグメントを保持するクライアント - サーバのシナリオがある場合、一意の 'shmget()'キーの良い選択肢の1つは 'gettid()'システムコール呼び出し元のスレッドIDを返します。しかしこれはLinux固有のものです。 –