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

How do you determine the path of the file that a symlink points to?

本文关键字:文件 路径 何确定 符号链接      更新时间:2023-10-16

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

readlink 函数。做一个man 2 readlink。这个函数是Posix API的一部分,所以它应该适用于几乎所有的Unix。

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

如果路径不以"/"开头,则它是一个相对链接,并相对于符号链接所在的目录进行解释。由您来适当地组合路径以找出真正的文件名。

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

此外,在我的Fedora系统上,如果你这样做man 7 symlink你会得到关于符号链接的长篇讨论,它们在各种情况下的行为以及操纵它们或受它们影响的函数的概要。

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