Perlがアップロード中のファイルに対してmove()を呼び出そうとするとどうなりますか?

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

  •  03-07-2019
  •  | 
  •  

質問

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

move()は成功し、部分的なファイルを移動し、FTPに何をさせますか? または、移動に失敗して0を返しますか?

役に立ちましたか?

解決

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

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

他のヒント

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

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

わかりませんが、おそらく何も悪いことは起こりません。移動してもファイルのiノード番号は変更されないため、FTPサーバーは移動にまったく気付かず、新しい場所のファイルへの書き込みを継続します。簡単に言うと、 move()は成功し、新しい場所でアップロードが続行されます。

scroll top