2016-04-07 16 views
1
  1. ファイルがload -ed/require -dのとき、ファイルは書き込みからロックされていますか?
  2. そうでない場合は、load/requireの間にファイルを書き込み専用にロックするにはどうすればよいですか?

そうならばおそらく、File#flockを使用する必要がありますが、私は最初の質問への答えを知っていない、ともload/requireとそれを組み合わせる方法。ロード/要求中にファイルをロックする

+1

あなたがファイルを必要としたときに作られたシステムコールのセットは、rubyがファイルをロックしていないことを示しています。これは 'strace ruby​​ -r set -e 'で確認することができます。 'strace'がインストールされているので、あなたが示唆しているのはおそらくそれを行う唯一の方法です – bjhaid

答えて

2

ファイルを開くと、ファイルが削除され、技術的にファイルシステムとのリンクが解除されて孤立している場合でも、内容を読み取ることができます。ファイルを閉じると、その時点からそのファイルへのアクセスが失われます。 POSIXタイプのシステムではどのように動作するのでしょうか?Windows が異なる可能性があります。

プロセスがその処理を実行しようとしている間に、別のプロセスがファイルの一部を上書きしたり、ファイルの一部を切り捨てたりするのを防ぐことは何もありません。

File#flockはロックを要求するための丁寧な方法であり、ファイルを操作しようとしている他のプロセスが丁寧であり、ファイルの状態に関する保証がないことを確認してください。プロセスはそれを無視し、警告なしにあなたのファイルをmangleすることは自由です。

あなたのファイルに誰も触れないようにするには、専用の/tmpディレクトリにコピーし、そのファイルが正しくコピーされていることをテストし、そこから読み取るしかありません。それは非常に妄想的なことなので、私はあなたがその道を行く前に説得力のある理由があることを願っています。

ファイルにアクセスするすべてのプロセスを制御し、適切に動作する市民にして、ファイルに一貫したロックメカニズムを使用できる場合は、おそらく問題ありません。そうでない場合は、何らかの種類のIPCシグナリングを使用して排他的にファイルへのアクセスを許可するマスタープロセスを使用することができます。

関連する問題