Ruby-ファイルロック

ファイルロック

flock(operation)メソッドでファイルをロックします。

ロックに成功した場合は 0 を返します。

失敗した場合は例外「Errno::EXXX」が発生します。

File::LOCK_NB が指定されていて、ブロックされそうな場合には false を返します。


f = open("text.txt", "rb")
f.flock(File::LOCK_EX)
file = f.read
f.write(file)
f.flock(File::LOCK_UN)
f.close

File::LOCK_SH

共有ロック。複数のプロセスが同時にロックを共有できます。

システムによってはロック対象のファイルは読み込みモード ("r", "r+" など)でオープンされている必要があります。

そのようなシステムでは読み込み可能でないファイルに対するロックは例外Errno::EBADF が発生するかもしれません。


File::LOCK_EX

排他ロック。同時にはただひとつのプロセスだけがロックを保持できます。

システムによってはロック対象のファイルは書き込みモード ("w", "r+" など)でオープンされている必要があります。そのようなシステムでは書き込み可能でないファイルに対するロックは例外 Errno::EBADF が発生するかもしれません。


File::LOCK_UN

アンロック。この明示的なアンロック以外に、Rubyインタプリタの終了 (プロセスの終了)によっても自動的にロック状態は解除されます。


File::LOCK_NB

ノンブロックモード。File::LOCK_SH | File::LOCK_NB のように他の指定と or することで指定します。この指定がない場合、ブロックされる条件での flock の呼び出しはロックが解除されるまでブロックされます。

File::LOCK_NB の指定がある場合、ブロックされる条件での flock は false を返します。



関連ページ