GNU/Linux >> Linux の 問題 >  >> Linux

MvはFsでアトミックですか?

mvかどうかを確認するにはどうすればよいですか 私のfs(ext4)はアトミックですか?

OSはRedHatEnterpriseLinuxServerリリース6.8です。

一般的に、これを確認するにはどうすればよいですか?周りを見回しましたが、OSが標準のPOSIXであるかどうかわかりませんでした。

承認された回答:

興味深いことに、答えは「状況によって異なります」のようです。

明確にするために、mv に指定されています

mv ユーティリティは、rename()と同等のアクションを実行する必要があります 関数

名前変更機能の仕様には次のように記載されています:

このrename() 関数は、通常のファイルの場合、ISOC標準で定義されているものと同等です。
ここに含めると、その定義が拡張されてディレクトリに対するアクションが含まれ、
新しいパラメータが既存のファイルに名前を付けるときの動作が指定されます。
その
仕様では、関数のアクションがアトミックである必要があります。

ただし、rename()の最新のISOC仕様 状態:

7.21.4.2rename 機能

あらすじ

#include <stdio.h>
int rename(const char *old, const char *new);

説明

rename functionは、名前がoldが指す文字列であるファイルを生成します 今後は、newが指す文字列で指定された
という名前で知られるようになります。 。 oldという名前のファイル
その名前でアクセスできなくなりました。文字列で名前が付けられたファイルが
newで指している場合 renameを呼び出す前に存在します 関数の場合、
動作は実装によって定義されます。

返品

rename 関数は、操作が成功した場合はゼロを返し、失敗した場合はゼロ以外を返します。その場合、ファイルが以前に存在していた場合は
、元の名前で認識されています。

驚いたことに、原子性の明示的な要件はないことに注意してください。最新の公開されているC標準のどこかで必要になる可能性がありますが、私はそれを見つけることができませんでした。誰かがそのような要件を見つけることができれば、編集とコメントは大歓迎です。

Linuxのマニュアルページによると:

newpathの場合 すでに存在しているため、アトミックに置き換えられるため、
別のプロセスがnewpathにアクセスしようとするポイントはありません。 それが欠落していることがわかります。ただし、おそらく両方のoldpathが表示される
ウィンドウが表示されます。 およびnewpath
名前が変更されているファイルを参照してください。

Linuxのマニュアルページには、置換が記載されています。 ファイルのはアトミックになります。

テスト および確認 その原子性は非常に難しいかもしれませんが、それがあなたがどこまで行く必要があるかということです。 「mvがアトミックかどうかを確認するにはどうすればよいですか」を使用する際の意味が明確ではありません。アトミックな要件/仕様/ドキュメントが必要ですか、それとも実際にテストする必要がありますか それ?

関連:ウィンドウのPIDをクリックして取得しますか?

また、上記の前提 2つのオペランドファイル名は同じファイルシステムにあります。 mvに標準的な制限が見つかりません それを実施するためのユーティリティ。


Linux
  1. バッシュ‘?

  2. Bashのファイルでアトミック書き込み操作を実行しますか?

  3. ファイルのアクセス許可を変更する

  1. Linuxでファイルの名前を変更するにはどうすればよいですか?

  2. Linux - ファイル名のスペースの置き換え

  3. C で Linux 上のファイルを移動する

  1. Linuxターミナルでファイルをコピーする

  2. Linuxターミナルでファイルの名前を変更します

  3. ワイルドカードを使用した mv はまだアトミックです