From: Takahiro Kambe Date: 2002-09-28T00:25:24+09:00 Subject: [ruby-dev:18401] Re: pstore.rb can make a broken store In message on Fri, 27 Sep 2002 00:57:21 +0900, Tanaka Akira wrote: > あるファイルを open して LOCK_EX な flock に成功した場合でも、それが即 > 座にロックを獲得したことにはなりません。これは他のプロセスがそのファイ > ルを rename によってすり替えてから終了した結果としてロックが解放された > からかもしれないからです。この場合、そのファイル名の最新のファイルに対 できればこういう手順を踏むのは避けたいと個人的には思います。 > あと、ついでにいえば "rb" で open したものには LOCK_EX できない OS も > あります。Solaris とか。 flock()がシステムコールじゃなくてライブラリで、結局はfcntl lockなので しょう。(ローカルのディレクトリをflock()する対象にできないので嫌い。) > さらについでにいえば、flock より fcntl のほうが適切なこともあるようで > す。NFS ごしでも効く場合があるとか。 > (手元で試した時には、Solaris と Linux では効いた。) これと、ファイルの範囲を指定できるあたりが利点でしょうね。 fcntl lockって、dupしたファイル記述子が残っていても、ロックかけたファ イル記述子をcloseしたらロックが外れるだったか、子プロセスに引き継げな いとか「壊れた仕様」と聞いたことがあります。 -- 神戸 隆博 / Takahiro Kambe