私はディレクトリがC ++を使用してシンボリックリンクであるかどうかを調べる方法を見つけようとしています
ファイルがシンボリックリンクであるかどうかを判断するのは簡単ですが、lstatとS_ISLNK(fs.st_mode)を使用しますが、これはファイルに対してのみ機能するようです。 S_ISDIRは、実際にはディレクトリを指すシンボリックリンクであっても、ディレクトリはディレクトリであると常に言います。
だから、どのようにディレクトリとファイルとして同じことをするのですか?
回答:
回答№1の場合は7実際の区別はより微妙です。もし、あんたが lstat("/path/link/")
末尾のスラッシュにより、シンボリックリンクを「見通す」ことになります。あなたのコードはそうすれば機能するはずです lstat("/path/link")
(末尾のスラッシュがないことに注意してください)。このpythonの例では、数字の意味がわからなくても結果の変化を見ることができます:
$ ln -s /etc /tmp/foo
>>> from posix import lstat
>>> lstat("/tmp/foo")
(41471, 24591, 64769L, 1, 1095, 501, 4, 1298667395, 1298667395, 1298667395)
>>> lstat("/tmp/foo/")
(16877, 131073, 64768L, 119, 0, 0, 12288, 1298663835, 1298667375, 1298667375)
回答№2の場合は0
特定のディレクトリがシンボリックリンクかどうかを判断する別の方法は、次の方法でリンクを読み取ることです readlink
:
char buffer[255];
int size = readlink("/my/path", buffer);
if (errno == EINVAL) {
/* here you know: "/my/path" isn"t a symlink */
}
そしてもちろん:あなたが書くなら /my/path/
(トレーニングスラッシュを使用)、実際には次のようになります。 /my/path/.
これは決してシンボリックリンクではありません。