mv
簡単に実装rename()
可能な限り名前を変更しても機能しない場合は、コピーして削除する方法に戻ります。実際に(しかし理論的にはそうではない。)、どちらの場合も、ソースとターゲットがそれぞれ同じまたは異なるファイルシステムにある場合です。
私の質問:POSIX標準で定義され、GNU coreutilsの一部として実装されているように、後者のmv
場合(名前の変更、コピーに置き換えた後に削除することはできません)、ファイルシステムキャッシュがどのような意味でフラッシュされることは保証されますか?sync
)適切な時間にターゲットファイルシステムの接続を切断してもデータの損失が発生しないように、コピーと削除の間にありますか?
これまで私が見つけたもの:これPOSIX仕様mv
説明する
いつでも終了したら、source_fileまたは宛先パスを完了する必要があります。
これは「はい」を意味しますが、ファイルシステムの切断が単純な「終了」に分類されるのか、そのようなステートメントが通常「表面」ファイルシステムの状態にのみ適用されるのかなどは不明です。
一つあるハッカーニュースレビューソースを明らかにせずに「いいえ」と答えました。
たぶん質問は実際には不明であるかもしれません。POSIXsync()
保証もありません終わるリフレッシュはこれをトリガするだけなので、ファイルシステム全体で「完全に安全な」コピーと削除を達成する方法はありませんか?
実際にどのように実装されるのかを見てみましょう。GNU coreutilsのmv
ソースコードしかし、もはや時間を無駄にする前に、同じ問題を経験している他の人にも役立つように、ここにも尋ねなければならないと思いました。