2

a と b の 2 つのディレクトリ エントリがあります。以前は、a と b は異なる inode を指していました。その後、b が a と同じ inode を指すようにします。私はこれが安全であることを望んでいます - つまり、どこかで失敗した場合、b は元の i ノードまたは a i ノードを指します。特に、b が消えてしまいたくないのです。

mv は上書き時にアトミックです。

宛先が既に存在する場合、ln は機能しないように見えます。

だから私は言うことができるように見えます:

ln a tmp mv tmp b

障害が発生した場合、「tmp」ファイルが残ります。これは望ましくありませんが、災害ではありません。

これを行うより良い方法はありますか?

(私が実際にやろうとしているのは、同じコンテンツを持つファイルを、そのコンテンツを含む単一の i ノードに置き換え、すべてのディレクトリ エントリ間で共有することです)

4

2 に答える 2

1
 ln a tmp ; mv tmp b

質問で述べたように、実際にはアトミックに行う最速の方法です。

(Nitpickers コーナー: 両方のシステム コールを 1 つのプログラムに配置する方が高速です)

于 2010-06-16T21:05:19.403 に答える