lock
fcntl()を使用したアドバイザリ ファイル ロックの簡単な実装です。(実際、何年も前に、指定されたファイルのロックを保持しながら単一のコマンドまたはスクリプトを実行する、実質的に同一のコマンドライン ユーティリティを作成しました。)
fcntl()
サーバーでサポートが有効になっている場合、ロックはリモートファイルシステムに対して機能します。特に、 Linux 上のSambaおよびNFSサーバーには確実に機能があります。NFS では、通常、設定が間違っているか、完全に無効になっているため、ハードリンクまたはロック ディレクトリ ベースのロック スキームがより一般的です。悲しいことに。
技術的には、fcntl()
ロックはファイル ロックではなく、レコード ロックです。ファイル内の任意のバイト範囲は、異なるプロセスであっても個別にロックできます。最も一般的な使用法は、ファイル全体をロックすることです (ゼロの開始と長さを指定することにより、ファイルが追加された場合でもロックが適用されます)。パラメータとパラメータlock
の両方を省略した場合、コマンドはまさにそれを行います。hex-start
hex-length
hex-start
to を指定するとlock
、ロック領域が開始するオフセットが参照されます。zero を省略または使用するhex-length
と、ファイルが追加または切り捨てられた場合でも、ロックはファイルの残りの部分に適用されます。も指定するhex-length
と、ロックはオフセット [ hex-start
, hex-start
+ hex-length
) に適用されます。接頭辞は明らかに16 進数hex-
で指定されている値を指します。
ロックは、ファイルへのいかなる種類のアクセスも妨げないため、助言的です。fcntl()
ファイルのアドバイザリ ロックを取得するには、すべてのアプリケーションで を呼び出す必要があります。目的のロックが同じファイルの他のロックと競合する場合、呼び出しはブロック ( F_SETLKW
) または失敗 ( F_SETLK
) します。
質問?