【发布时间】:2011-08-26 23:28:02
【问题描述】:
在 Linux 中,如果您知道某个文件的路径是符号链接,那么您如何以编程方式(在 C 或 C++ 中)确定它指向的文件的路径?
【问题讨论】:
标签: c++ c linux symlink symlink-traversal
在 Linux 中,如果您知道某个文件的路径是符号链接,那么您如何以编程方式(在 C 或 C++ 中)确定它指向的文件的路径?
【问题讨论】:
标签: c++ c linux symlink symlink-traversal
readlink 函数。做一个man 2 readlink。这个函数是 Posix API 的一部分,所以它几乎可以在任何 Unix 上运行。
如果路径以'/' 开头,那么它是一个绝对符号链接,并且您拥有它所引用文件的完整绝对路径(可能是另一个符号链接,您必须再次重复该过程)。
如果路径不以“/”开头,那么它是一个相对链接,并且相对于符号链接所在的目录进行解释。您可以适当地组合路径以找出真正的文件名。
当然,有时符号链接用于存储实际上不是路径的信息。有时程序会在其中存储 PID 或其他此类信息以用于锁定目的。创建符号链接的调用是可以在 NFS 挂载文件系统上执行的更可靠的原子操作之一。
此外,在我的 Fedora 系统上,如果您使用 man 7 symlink,您会得到关于符号链接、它们在各种情况下的行为以及操纵它们或受它们影响的函数的简要说明。
【讨论】:
在 POSIX 或 BSD 系统上使用 readlink()
【讨论】: