私のfsにmv原子がありますか?

私のfsにmv原子がありますか?

mv私のfs(ext4)がアトミックであることをどのように確認できますか?

オペレーティングシステムはRed Hat Enterprise Linux Serverバージョン6.8です。

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

ベストアンサー1

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

確かに、mv指定済み到着

公益事業mv会社は、次の措置を講じる必要があります。rename() 機能

これ関数仕様の名前変更状態:

一般ファイルの場合、このrename()機能はISO C規格で定義されているものと同じです。ここにインクルードは、ディレクトリに対するアクションを含めるように定義を拡張し、新しいパラメータがすでに存在するファイルに名前を付けるときの動作を指定します。仕様では、関数操作はアトミックでなければなりません。

しかし、最新ISO C仕様状態の場合rename()

7.21.4.2rename機能

要約

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

説明する

このrename関数は、指す文字列という名前のファイルが、将来の指すold文字列が提供する名前で識別されるようにしますnew。指定されたファイルはoldこの名前でアクセスできなくなります。newこの関数を呼び出す前に指す文字列で指定されたファイルが存在する場合、rename動作は実装に応じて定義されます。

商品を返す

この関数は、操作が成功した場合は0を返しrename、失敗した場合は0以外の値を返します。この場合、ファイルが以前に存在していた場合は、元の名前で識別できます。

驚くべきことに、原子性に対する明示的な要件はない。最新の公開C規格の他の場所で必要になる可能性がありますが、まだ見つかりませんでした。誰もがそのようなニーズを見つけることができれば、編集とコメントを歓迎します。

また、見ることができますrename() は原子的ですか?

すべてLinuxのマニュアルページ:

すでに存在する場合は、newpathそのアイテムにアクセスしようとしている他のプロセスで見つからないアイテムが見つからないように自動的に置き換えられます newpath。ただし、名前が変更されたファイルを参照するウィンドウが表示されることoldpathがあります。newpath

Linuxのマニュアルページの主張代替ファイルの内容はアトミックです。

テストそして確認するただし、これを行う必要がある場合、原子性は非常に困難になる可能性があります。 「mvが原子であることを確認する方法」が何を意味するのかは明らかではありません。原子性の要件/仕様/文書化が必要ですか、それとも実際に必要ですか?テストそれ?

上記の内容も参考にしてください仮説両方のオペランドのファイル名は同じファイルシステムにあります。mvこれを行うユーティリティの標準的な制限が見つかりません。

おすすめ記事