我正在用C/C++编写一个Linux工具,并将一个完整的路径作为输入输入到一个目录中,这始终是以“/”为基础的,但是路径的元素可能是非真实的,而不是真正的目录。例如:
/工具/工具/最新
其中“最新”是指向“1.0”的符号链接。
然后使用该路径筛选其他文件的列表。我的问题是其他文件可以使用以下两种形式:
/tools/sometool/latest/foo.txt文件
/tools/sometool/1.0/foo.txt文件
我需要将两者都视为与包含在/tools/sometool/latest中的标准相匹配因此,我需要一种方法来完全解析路径中的所有符号链接。
在Bash中,“readlink-f/tools/sometool/latest”返回“/tools/sometool/1.0”,这很好,但是当我在C中尝试“readlink()”时,它只给出了“1.0”。
我在C.搜索过,但是找不到任何现有的解决方案。
有没有一个我错过的简单解决方案,或者我需要在C中构建与bash命令等效的命令来实现这个功能?
谢谢!
P.S.这个工具不需要是可移植的,所以只有Linux的解决方案就可以了。
最佳答案
尝试realpath()
(请参见its man page)。这与readlink -f
基本相同。