/ / linux / unixでは、ディレクトリがc ++を使用してリンクであるかどうかを見つける方法は? -C ++、Linux、ファイルシステム

linux / unixでは、ディレクトリがc ++を使ってリンクされているかどうかを調べる方法は? - c ++、linux、ファイルシステム

私はディレクトリが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/. これは決してシンボリックリンクではありません。