- ファイルが
load
-ed/require
-dのとき、ファイルは書き込みからロックされていますか? - そうでない場合は、
load
/require
の間にファイルを書き込み専用にロックするにはどうすればよいですか?
そうならばおそらく、File#flock
を使用する必要がありますが、私は最初の質問への答えを知っていない、ともload
/require
とそれを組み合わせる方法。ロード/要求中にファイルをロックする
load
-ed/require
-dのとき、ファイルは書き込みからロックされていますか?load
/require
の間にファイルを書き込み専用にロックするにはどうすればよいですか?そうならばおそらく、File#flock
を使用する必要がありますが、私は最初の質問への答えを知っていない、ともload
/require
とそれを組み合わせる方法。ロード/要求中にファイルをロックする
ファイルを開くと、ファイルが削除され、技術的にファイルシステムとのリンクが解除されて孤立している場合でも、内容を読み取ることができます。ファイルを閉じると、その時点からそのファイルへのアクセスが失われます。 POSIXタイプのシステムではどのように動作するのでしょうか?Windows が異なる可能性があります。
プロセスがその処理を実行しようとしている間に、別のプロセスがファイルの一部を上書きしたり、ファイルの一部を切り捨てたりするのを防ぐことは何もありません。
File#flock
はロックを要求するための丁寧な方法であり、ファイルを操作しようとしている他のプロセスが丁寧であり、ファイルの状態に関する保証がないことを確認してください。プロセスはそれを無視し、警告なしにあなたのファイルをmangleすることは自由です。
あなたのファイルに誰も触れないようにするには、専用の/tmp
ディレクトリにコピーし、そのファイルが正しくコピーされていることをテストし、そこから読み取るしかありません。それは非常に妄想的なことなので、私はあなたがその道を行く前に説得力のある理由があることを願っています。
ファイルにアクセスするすべてのプロセスを制御し、適切に動作する市民にして、ファイルに一貫したロックメカニズムを使用できる場合は、おそらく問題ありません。そうでない場合は、何らかの種類のIPCシグナリングを使用して排他的にファイルへのアクセスを許可するマスタープロセスを使用することができます。
あなたがファイルを必要としたときに作られたシステムコールのセットは、rubyがファイルをロックしていないことを示しています。これは 'strace ruby -r set -e 'で確認することができます。 'strace'がインストールされているので、あなたが示唆しているのはおそらくそれを行う唯一の方法です – bjhaid