c++ - 在linux/unix下,如何使用c++发现一个目录是否是一个链接?

标签 c++ linux filesystems

我正在尝试弄清楚如何使用 C++ 确定目录是否为符号链接(symbolic link)

使用 lstat 和 S_ISLNK(fs.st_mode) 可以很容易地确定文件是否是符号链接(symbolic link),但这似乎只适用于文件。 S_ISDIR 总是说目录就是目录,即使它实际上是指向目录的符号链接(symbolic link)。

那么,如何对目录执行与文件相同的操作?

最佳答案

实际的区别更加微妙。如果您 lstat("/path/link/") 它将“查看”由于尾部斜杠的符号链接(symbolic 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)

关于c++ - 在linux/unix下,如何使用c++发现一个目录是否是一个链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5122424/

相关文章:

c++ - VS2019 C++ 未知覆盖说明符

c++ - 附加深度纹理 (C++) 时 OpenGL FBO 纹理困惑

c++ - 如何在gcc 8上使用std::filesystem?

c - 使用 libsoup 时出错

c++ - 迭代可执行文件本身时,std::filesystem::recursive_directory_iterator 崩溃

linux - dbus启动错误!通过 NFS 启动 ARM Linux 时

c++ - atoi(textline[c]) 遍历 getline?

linux - 如何在 Ubuntu 9.10 上检查 openCV

java - 如何使用动态IP连接基于mysql web的数据库服务器

linux - 在Linux终端中,如何删除目录中除一两个文件外的所有文件