同時に作成されたファイルのコピー

同時に作成されたファイルのコピー

この関連質問正確な問題を解決できないため、同様の質問を書いています。

私のシナリオは次のとおりです。プログラム(ワインとして実行)が約10〜500KBのサイズのファイルを作成します。各書き込みイベントごとに約1KBの追加が発生します(行はファイルの末尾に追加され、他の書き込み方法はありません)。書き込み間隔はマイクロ秒から240分までです。 (通常、書き込み間隔は3〜10分程度ですが、上記の時間境界は理論的に可能な限界です。)
この間隔は変更できず、ユーザーの観点からはランダムです。書き込み間隔が変わるので可能ですABCD書き込みイベントは次のとおりです。 AB 60分、BC 5秒、CD 357.4秒など。

外部編集のために約25〜30分ごとにファイルをコピーしたいです(もちろん自動的に)。

最善の解決策は何ですか保証する競合状態が発生しませんか?タイミングアルゴリズムを作成したくありませんが、必要に応じて作成できます。また、外部編集でコピー間隔を1日まで拡張でき、それ以上は拡張できません。 Wineでは出力をリダイレクトできません。

$ grep sda4 /etc/mtab
/dev/sda4 /foo xfs rw,relatime,attr2,delaylog,noquota 0 0

修正する

私は作成プロセスに協力できません。問題のファイルは厳密な形式のプレーンテキストファイルです。

答え1

以下のいずれかを除いて、すべての場合に「部分書き込み」(アプリケーションの観点から)をコピーしないという保証はありません。

  • 他のプロセスと協力します(つまり、書き込みをフラッシュして停止/再開するように指示します)。
  • 一貫したスナップショット/バックアップ/ダンプを生成できる「実際の」トランザクション(データベース)システムを使用します。

問題のファイルが厳密な形式の場合、この問題が解決される可能性があります。非原子書き込み中にファイルをコピーすると、最後のレコードが一貫していないか不完全になり、処理アプリケーションがそれを検出したり、システムによって最後のレコードを無視したりできます。

(アプリケーションが常にwrite単一の呼び出しまたは同等の方法でレコードを書き込む場合でも、書き込み呼び出し中にアプリケーションが中断される可能性があり、書き込みの一部だけが実際に処理されます。)

関連情報