mvかどうかを確認するにはどうすればよいですか 私のfs(ext4)はアトミックですか?
OSはRedHatEnterpriseLinuxServerリリース6.8です。
一般的に、これを確認するにはどうすればよいですか?周りを見回しましたが、OSが標準のPOSIXであるかどうかわかりませんでした。
承認された回答:
興味深いことに、答えは「状況によって異なります」のようです。
明確にするために、mv に指定されています
mvユーティリティは、rename()と同等のアクションを実行する必要があります 関数
名前変更機能の仕様には次のように記載されています:
この
rename()関数は、通常のファイルの場合、ISOC標準で定義されているものと同等です。
ここに含めると、その定義が拡張されてディレクトリに対するアクションが含まれ、
新しいパラメータが既存のファイルに名前を付けるときの動作が指定されます。
その
仕様では、関数のアクションがアトミックである必要があります。
ただし、rename()の最新のISOC仕様 状態:
7.21.4.2
rename機能あらすじ
#include <stdio.h> int rename(const char *old, const char *new);説明
renamefunctionは、名前がoldが指す文字列であるファイルを生成します 今後は、newが指す文字列で指定された
という名前で知られるようになります。 。oldという名前のファイル
その名前でアクセスできなくなりました。文字列で名前が付けられたファイルがnewで指している場合renameを呼び出す前に存在します 関数の場合、
動作は実装によって定義されます。返品
rename関数は、操作が成功した場合はゼロを返し、失敗した場合はゼロ以外を返します。その場合、ファイルが以前に存在していた場合は
、元の名前で認識されています。
驚いたことに、原子性の明示的な要件はないことに注意してください。最新の公開されているC標準のどこかで必要になる可能性がありますが、私はそれを見つけることができませんでした。誰かがそのような要件を見つけることができれば、編集とコメントは大歓迎です。
Linuxのマニュアルページによると:
newpathの場合 すでに存在しているため、アトミックに置き換えられるため、
別のプロセスがnewpathにアクセスしようとするポイントはありません。 それが欠落していることがわかります。ただし、おそらく両方のoldpathが表示される
ウィンドウが表示されます。 およびnewpath
名前が変更されているファイルを参照してください。
Linuxのマニュアルページには、置換が記載されています。 ファイルのはアトミックになります。
テスト および確認 その原子性は非常に難しいかもしれませんが、それがあなたがどこまで行く必要があるかということです。 「mvがアトミックかどうかを確認するにはどうすればよいですか」を使用する際の意味が明確ではありません。アトミックな要件/仕様/ドキュメントが必要ですか、それとも実際にテストする必要がありますか それ?
関連:ウィンドウのPIDをクリックして取得しますか?
また、上記の前提 2つのオペランドファイル名は同じファイルシステムにあります。 mvに標準的な制限が見つかりません それを実施するためのユーティリティ。