假设我想获得符号链接的真实路径。我知道readlink
和stat
系统调用都可以取消引用链接并给我真正的路径。它们是否以相同的方式运行(仅关于解除引用,我知道stat
会做更多的事情)?我应该更喜欢一个吗?
答案 0 :(得分:15)
使用stat()
告诉您任何符号链的末尾的文件;它不会以任何方式让你走上正轨。使用lstat()
获取有关所涉及的符号链接的信息(如果有);当给定的名称不是符号链接时,它就像stat()
一样。使用readlink()
获取存储在符号链接中的路径名称,该路径名称作为其参数(注意 - 它不会终止字符串)。
如果您希望符号链接末尾的文件的完整路径名,您可以使用
realpath()
。这将为您提供绝对路径名,该路径名不会跨越任何符号链接以到达文件。
答案 1 :(得分:1)
是的,您应该使用readlink()
。但是,请注意,它需要您分配一个缓冲区来存储取消引用的路径。lstat()
可以帮助您,如果您想要分配一个所需的确切大小的缓冲区,如下面的示例所示readlink()
man page。