cp -R
POSIX を使用して、あるディレクトリを別のディレクトリに (のように) 再帰的にコピーしたいscandir()
。
問題は、より高いレベルへのリンクを含む /sys/bus/ のようなディレクトリをコピーすると (例: foo/foo1/foo2/foo/foo1/foo2/foo/... )、システムがループ状態になることです。ディレクトリを「真ん中」に永久にコピーします...
dirent で開いているファイルがリンクかどうかを確認するにはどうすればよいですか?
これを見てください:2つのファイル名が同じ物理ファイルを指しているかどうかを確認する方法
重複を取得しないように、アクセスした inode のリストを保存する必要があります。同じファイルへの 2 つのハード リンクがある場合、「1 つの」正規名はありません。1 つの可能性は、最初にすべてのファイルを保存してから、すべてのファイル名を再帰的に調べることです。パス構造は、inode およびファイルの内容とは別に保存できます。