如何确定符号链接指向的文件的路径?

时间:2011-05-17 06:00:48

标签: c++ c linux symlink symlink-traversal

在Linux中,如果您有一个知道符号链接的文件的路径,那么如何以编程方式确定(在C或C ++中)它指向的文件的路径?

2 个答案:

答案 0 :(得分:8)

readlink功能。做man 2 readlink。这个函数是Posix API的一部分,因此几乎可以在任何Unix上运行。

如果路径以'/'开头,那么它是一个绝对的符号链接,你有它所引用的文件的完整绝对路径(这可能是另一个符号链接,你必须重复再过程。)

如果路径不以“/”开头,则它是相对链接,并相对于符号链接所在的目录进行解释。由您自行组合路径以确定实际文件名

当然,有时候符号链接用于存储实际上不是路径的信息。有时程序会在其中存储PID或其他此类信息以用于锁定目的。创建符号链接的调用是可以在NFS安装的文件系统上执行的更可靠的原子操作之一。

另外,在我的Fedora系统上,如果你做man 7 symlink,你会长时间讨论符号链接,它们在各种情况下的行为以及操纵它们或受它们影响的函数的概述。

答案 1 :(得分:5)

在POSIX或BSD系统上使用readlink()