如何在Linux上获得规范化(规范)文件路径"即使文件系统上不存在文件路径"?(在C程序中))

Yog*_*esh 5 c unix linux file filepath

我已就此主题进行了大量研究,但未能获得任何实质性内容.通过normalize/canonicalize我的意思是从文件路径中删除所有"..",".",多个斜线等,并获得一个简单的绝对路径.例如

"/rootdir/dir1/dir2/dir3/../././././dir4//////////" "/ rootdir/dir1/dir2/dir4"

在Windows上我有GetFullPathName(),我可以得到规范的文件路径名,但对于Linux我找不到任何这样的API可以为我做同样的工作,realpath()就在那里,但即使是realpath()也需要文件路径存在于文件系统上以便能够输出规范化路径,例如,如果路径/ rootdir/dir1/dir2/dir4不在文件系统上 - realpath()将在上面指定的复杂文件路径输入上引发错误.有没有办法可以获得规范化的文件路径,即使它不存在于文件系统中

小智 4

realpath(3) 无法解析丢失的文件名。
但是GNU核心实用程序(https://www.gnu.org/software/coreutils/)有一个程序realpath(1),它类似于realpath(3)函数,但有选项:
-m, --canonicalize-missing no路径的组成部分需要存在
并且您的任务可以通过 coreutils 源文件 lib/canonicalize.c 中的 canonicalize_filename_mode() 函数来完成。