5

を通じてPOSIX強制ファイル ロックを使用していますfcntl。それらのロックが再入可能かどうか、つまり. プロセスは、すでに所有しているロックを取得できますか?

4

1 に答える 1

4

アドバイザリ ロックfcntlはプロセスごとに行われ、特定のプロセスのファイルにロックされた間隔が蓄積されます。つまり、間隔を追跡するのはアプリケーション次第であり、間隔のロック解除呼び出しは、その間隔に対して行われたロック呼び出しの数に関係なく、ロックを解除します。

さらに悪いことに、ファイルのファイル記述子を閉じると、ファイルのすべてのロックがキャンセルされます。

明示的な F_UNLCK によって削除されるだけでなく、プロセスが終了したとき、またはロックが保持されているファイルを参照しているファイル記述子をプロセスが閉じたときに、レコード ロックは自動的に解放されます。これは悪いことです: ライブラリ関数が何らかの理由で /etc/passwd や /etc/mtab などのファイルを開いて、読み込んで、閉じようとすると、プロセスがそのファイルのロックを失う可能性があることを意味します。

于 2012-11-04T16:03:41.663 に答える