Flock(1)がプロセス間ロックを実行できるのはなぜですか?

Flock(1)がプロセス間ロックを実行できるのはなぜですか?

Flockは開かれたファイル記述に関連付けられており、open(2)は新しい開かれたファイル記述を生成します。したがって、2つの別々のシェルでCluster(1)を呼び出すと、それぞれロックファイルが開き、2つの開かれたファイル記述が生成されます。クラスタ(1)は、開いている各ファイルの説明に関連するロック状態をどのように知ることができますか?混乱しています...また、Flock(1)はパス名とファイル記述子を別々に処理しますか?

修正する:

私が言う群れはLinuxの下の群れです。

私が理解したのは、クラスタを表す構造はシステム全体で一意です。 1 つ以上の開かれたファイル記述は、グループ構造 (例えば、開かれたファイル記述と i ノード間の関係) を参照できます。私のものになる「推測する」正しいですか?

答え1

いいえ、ファイル記述子ではなく、ファイルをロックするflockシステムコールを囲むラッパーです。flock()

OpenBSD マニュアルflock()(私が強調したもの)は次のとおりです。

flock()アドバイザリロックの適用または削除ファイルにファイル記述子に関連付けられていますfd

[...]

ロックはファイル記述子ではなくファイルにあります。 つまり、ファイル記述子の複製dup(2)によってfork(2)複数のロックインスタンスが発生せず、単一のロックへの複数の参照が発生します。ファイルロックを保持しているプロセスがフォークされ、子プロセスが明示的にファイルロックを解除すると、親プロセスはロックを失います。

flock()カーネルがロックを追跡するシステムコールです。

関連情報