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.2
rename
機能要約
#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
これを行うユーティリティの標準的な制限が見つかりません。