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

C++ 如何确定符号链接指向的文件路径?,c++,c,linux,symlink,symlink-traversal,C++,C,Linux,Symlink,Symlink Traversal,在Linux中,如果您知道一个文件的路径是一个符号链接,那么如何以编程方式(在C或C++中)确定它指向的文件的路径?readlink函数。执行man 2读链接。此函数是POSIXAPI的一部分,因此它应该可以在几乎任何Unix上工作 如果路径以'/'开头,则它是一个绝对符号链接,您拥有它所引用文件的完整绝对路径(可能是另一个符号链接,您必须再次重复该过程) 如果路径不是以“/”开头,则它是一个相对链接,并相对于符号链接所在的目录进行解释。由您来适当地组合路径,以确定真正的文件名 当然,有时符号链

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

readlink函数。执行
man 2读链接
。此函数是POSIXAPI的一部分,因此它应该可以在几乎任何Unix上工作

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

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

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


另外,在我的Fedora系统上,如果您使用
man 7 symlink
,您会得到一个关于符号链接、它们在各种情况下的行为以及操作它们或受它们影响的函数的详细讨论。

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