2

片側にファイルパスがあり、それらを複製したい新しいパスがあります。

それらを単純にハードリンクできるかどうか、またはコピーする必要があるかどうかをテストするにはどうすればよいですか?

4

2 に答える 2

4

ステップ1:リンクを呼び出します。

errnoステップ2:に設定して-1が返される場合はEXDEV、コピーを作成します。

[アップデート]

一般に、この質問に答えるポータブルな(そして信頼できる)方法はありません。最も近い方法は、ソースと宛先のstatvfsを呼び出してから、 statvfs構造体f_fsidのフィールドを比較することです。

f_fsid残念ながら、POSIXはこの分野について特に何も保証していません。このテストは、NFSマウントされたファイルシステムについて質問している場合を除いて、Linuxで機能するはずです...

于 2012-02-03T05:59:27.230 に答える
1

Nemoの答えは確かに最も簡単な解決策です:link(2)syscallを試してください。

パスがシステムコールを試行せずにハードリンク可能かどうかだけを知りたい場合は、たとえばstatfs(2)link(2)を使用してファイルシステムを見つけ、それらが同じファイルシステム上にあることを確認し、ファイルシステムのタイプが十分であることを確認します。

于 2012-02-03T06:03:19.683 に答える