ftok()
Cアプリケーションで使用される共有メモリセグメントの識別子を生成するために使用しています。問題が発生しています。1つのボックスで、rootが使用する識別子との衝突が発生しています。この場合、コードをハッキングすることで修正できますが、より堅牢なソリューションが必要です。
アプリケーションは独自の論理ボリュームにインストールされ、ftokに提供されるパスは、アプリケーションのバイナリディレクトリ(そのlv内)です。提供されるIDは1から始まり、通常は5ダースほどあります。
私はftokが次のようなことをすることを追跡しました:
(id & 0xff) << 24 | (st.st_dev & 0xff) << 16 | (st.st_ino & 0xffff)
st.st_dev/st.st_inoの組み合わせは非常にユニークである必要があります。しかし、私はいくつかのボックスを見てきましたが、st_devの最下位ビットは多くの場合0です(つまり、st_devの数値は通常256の倍数です)。また、バイナリディレクトリは論理ボリューム内にあるため、iノード番号がrootが使用するものと異なるという保証はありません。
これを回避する良い方法はありますか?ftokのより良い代替手段、またはst_dev番号がftokにもっと役立つようにマシンを設定する方法はありますか?