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() 函数来完成。