短縮版
ディレクトリの1つがシンボリックリンクであるパスから解決されたパスを取得するにはどうすればよいですか:
例:
path = /x/y/d/f1 とします。ここで、y は /a/b へのシンボリック リンクです。
したがって、解決されたファイル パスの結果は次のようになります: /x/a/b/d/f1
ロングバージョン
dir1 から dir2 にファイルをコピーする C++ 関数を書きたいと思います (もちろん、これは実際の問題ではなく、より大きく複雑な問題の軽減です)。
コピー プロセスの前に、dir1 からコピーされる dir2 のすべてのファイルを削除したいと思います。私が持っているとしましょう:
- Dir1 = /a/b/c/d
- Dir2 = /x/y/d/
dir1 にファイル 'f1' があり、dir2 にファイル 'f1' があると仮定すると、私のプロセスは次のようになります。
- /x/y/d/f1 を削除
- /a/b/c/d/f1 を /x/y/d/f1 にコピー
私の問題は次のとおりです。
dir 'y' が /a/b/c/ へのシンボリック リンクであるとします。/x/y/d/f1 を削除すると、実際には /a/b/c/d/f1 が削除されます。(私の例には穴があるかもしれませんが、アイデアが得られることを願っています)
これを回避したいのですが、つまり、/x/y/d/f1 を削除するときに、/x/y/d/f1 を削除することを知り、その削除をスキップできるようにしたいのです。
POSIX readlink() 関数を使用してみましたが、ファイル 'f1' 自体がシンボリック リンクの場合にのみ機能しますが、親ディレクトリの 1 つがシンボリック リンクの場合は機能しません。
何か案は?