我想要一个将相对路径转换为绝对路径的标准函数,如果可能的话,我想尽可能使它成为跨平台(所以我想避免调用外部库函数) 。这样做是为了防止路径攻击。
我知道这样的函数无法检测到符号链接,但我对我的应用程序没有问题。
我可以滚动自己的代码,但可能存在一些问题,例如:平台如何处理“../”模式的编码或变体。
是否已经实施了类似的东西?
答案 0 :(得分:9)
由于C或C ++标准库中没有这样的功能,因此没有一个通用函数可以调用。在Windows上,您可以使用GetFullPathName
。在Linux,Mac OS X和其他基于Unix的系统上,您可以使用realpath(3)
功能,作为奖励也可以解决沿途的符号链接。
注意:任何解决方案都只能在单线程程序中可靠。如果您正在使用多个线程,则另一个线程可能会出现并意外地从您下方更改工作目录,从而更改路径名解析。
答案 1 :(得分:1)
我认为你最接近平台独立性的是POSIX libraries。特别是你想看看unistd.h,遗憾的是我不相信它有一个'标准化'的路径概念。如果我没记错的话,标准本身甚至不太了解目录而不是相对的目录。
为了变得更好,我认为你需要推出自己的道路好东西。