8

私は非常に一般的な状況を持っています。ファイルがあり、そのファイルを新しい内容で完全に上書きする必要があります。ただし、元のファイルはページが読み込まれるたびにアクセスされるため (これは Web アプリです)、長い間失われることはありません。数ミリ秒は問題ありませんが (理想的ではありません)、1 秒も問題ありません。

現在、一時ファイルを同じディレクトリに書き込み、その一時ファイルの名前を新しいファイルの名前に変更することでこれを行っています。Perl では、通常の File::Temp と "rename" を使用してこれを行っています。私は疑問に思っていました-これを行うための他の推奨/より良い方法はありますか? できれば CPAN モジュールを必要としないモジュールが望ましいです。私のシステムでこれを行う必要があるのはここだけであり、このためだけにまったく新しい依存関係を作りたくないからです。

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

興味のある方のために、問題のコードを次に示します。

4

3 に答える 3

10

あなたの方法は問題ないようです。迅速で、アトミックで、コア モジュールのみを使用し、File::Temp は一時ファイルを安全に処理する方法です。さらに何が必要ですか?

于 2008-12-24T18:53:25.680 に答える
6

私はあなたがやっているのと同じようにします。少なくとも Unix タイプの OS では、ファイルの名前変更はアトミックであることが保証されているため、元のファイルまたは新しいファイルが存在しない瞬間はありません。

于 2008-12-24T18:54:38.843 に答える
0

リネームで十分です。でも:

一時ファイルは競合状態の危険にさらされていますか? ファイル名はランダム化して、誰も自分のファイルを挿入して問題を起こさないようにする必要があります。可能であれば、mkstemp() へのインターフェースを使用してください。

于 2008-12-24T19:07:33.310 に答える