Jon*_*vis 5 c c++ linux symlink symlink-traversal
在Linux中,如果您有一个知道符号链接的文件的路径,那么如何以编程方式确定(在C或C++中)它指向的文件的路径?
该readlink功能.做一个man 2 readlink.这个函数是Posix API的一部分,因此几乎可以在任何Unix上运行.
如果路径以a开头'/',那么它是一个绝对符号链接,并且您拥有它所引用的文件的完整绝对路径(这可能是另一个符号链接,您将不得不再次重复该过程).
如果路径不以' /' 开头,那么它是一个相对链接,并相对于符号链接所在的目录进行解释.由您自行决定是否合适地计算出真实的文件名.
当然,有时候符号链接用于存储实际上不是路径的信息.有时程序会在其中存储PID或其他此类信息以用于锁定目的.创建符号链接的调用是可以在NFS安装的文件系统上执行的更可靠的原子操作之一.
另外,在我的Fedora系统上,如果你这么做,man 7 symlink你会长时间讨论符号链接,它们在各种情况下的行为以及操作它们或受它们影响的函数的概述.