Perlでクロスプラットフォーム、アトミックファイルの交換を行うための最善の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/392016

質問

私は非常に一般的な状況があります。私はファイルを持っている、と私は全く新しい内容で、そのファイルを上書きする必要があります。ただし、元のファイルは、すべてのページのロード(これはWebアプリケーションである)にアクセスされたので、それは非常に長いために不足していることはできません。いくつかのMSは、(理想的ではないが)、第二はOKではない。OKである

今私は、同じディレクトリに一時ファイルを書き込み、その後、新しいファイルの名前にその一時ファイルの名前を変更することによってこれを行います。私はPerlで、これを行うために、通常のファイル:: Tempフォルダや「名前の変更」を使用しています。私は思っていた - これを行うには、いくつかの他のお勧め/より良い方法はありますか?これは私がこれを行う必要があり、私のシステムで唯一の場所であるとして、CPANモジュールを必要としない、と私はちょうどこのために全く新しい依存関係を望んでいない、好ましくは、1。

ああ、これのすべては、WindowsやLinux、BSD、OS X、Solaris、および他のほとんどの一般的なプラットフォーム上で動作する必要があります。

ここでは、問題のコードですの、興味のある人のために。

役に立ちましたか?

解決

あなたの方法ではうまくようです。それが唯一のコアモジュールを使用して、それはアトミックです、迅速だし、File :: Tempがテンポラリファイルに対処するための安全な方法です。あなたはより多くの何が必要ですか?

他のヒント

私はそれをあなたがそれをやっているのと同じ方法にしてください。少なくともUnixの型のOS上で、ファイル名の変更はアトミックであることが保証されますので、オリジナルまたは新しいファイルのいずれかが存在しない任意の瞬間を持っていません。

名前の変更は十分です。しかします:

は、競合状態の危険性のある一時的なファイルですか?誰もが自分のファイルを挿入することで問題を起こすことはできませんので、ファイル名は、ランダム化されなければなりません。可能な場合)(はmkstempするインターフェイスを使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top