12

誰かがサイズ 10Mb のファイルを Linux サーバー上のフォルダーに FTP 送信しています。ファイルが遷移している間、cron が起動し、ftp フォルダーを調べてそこにあるものを別のフォルダーに移動するように設計された Perl スクリプトを起動します。File::Copymove()の関数を使用しています。Perl プロセスは、実際にはそのタスクの一部としてファイルの名前を変更します。それは重要ですか、それとも FTP はファイル システムがファイルをどのように記述しているか気にしませんか?

move()成功して部分的なファイルを移動し、FTP を残して何をしますか? それとも、移動に失敗して 0 を返しますか?

4

3 に答える 3

10

いいえ、移動すると新しい位置でダウンロード プロセスが完了します。iノードをある位置から別の位置に移動しているだけです。ダウンロード プログラムからの開いているファイル記述子は、引き続きそれを指している必要があります。

他の数人が言及したことを繰り返したいだけです。これは、移動操作が同じファイルシステム上にある場合にのみ機能します。それが常に同じファイルシステムに属しているため、inode 以外のファイルシステムとして転送することはできません。最も可能性の高いシナリオは、その時点での部分的なデータが新しい場所にコピーされ、プログラムがまだファイルに添付されていない古い i ノードにダウンロードされているため、使用できないというものです。

于 2009-04-30T18:40:04.500 に答える
5

標準がないためmove、シナリオで何が起こっているのかを知るのは困難です。という意味renameであれば、おそらく問題はないでしょう。状況がうまくいかない主な原因は、あるファイル システムから別のファイル システムにファイルを移動する場合です (したがって、実際のファイル システムではなく、コピー アンド 削除を行う場合です)。 move)、ほとんどのシステムrenameでは、このような状況では失敗します。(したがって、セットアップがまったく機能する場合は問題ありません。)

たとえば、ファイルシステム間の移動を処理する関数を使用していないrename場合move、複数のファイルシステムが関係している場合、部分的なファイルが作成される可能性があります。(たとえば、現在はすべて 1 つのファイルシステムを使用しているが、後でアップロードするこれらのファイルが多くのスペースを占有し、それらの保存専用のドライブを追加する場合、これは非常に厄介な落とし穴になる可能性があります。そして今、ファイルシステム間の移動を行っています。)

于 2009-04-30T18:46:55.030 に答える
1

確かではありませんが、おそらく何も問題は発生しません。移動してもファイルの inode 番号は変更されないため、FTP サーバーは移動をまったく認識せず、新しい場所でファイルへの書き込みを続行します。簡単に言うと、move()は成功し、新しい場所でアップロードが続行されます。

于 2009-04-30T18:42:03.217 に答える