安全的跨平台function,以获得规范化的路径

我想要一个将相对路径转换为绝对路径的标准函数,如果可能的话,我想尽可能使它成为跨平台(所以我想避免调用外部库函数)。 这样做是为了防止路径攻击。

我知道这样的函数不能检测符号链接,但我对我的应用程序没问题。

我可以推出自己的代码,但可能存在一些问题,例如平台如何处理“../”模式的编码或变体。

有没有已经实现的东西?

您可以调用没有单一的通用函数,因为C或C ++标准库中没有这样的函数。 在Windows上,您可以使用GetFullPathName 。 在Linux,Mac OS X和其他基于Unix的系统上,您可以使用realpath(3)函数,作为奖励还可以解决沿途的符号链接。

注意:任何解决方案都只能在单线程程序中可靠。 如果您正在使用多个线程,则另一个线程可以出去并意外地从您下方更改工作目录,从而更改路径名称解析。

我认为最接近平台独立性的是POSIX库 。 特别是你想看看unistd.h ,遗憾的是我不相信它有一个“规范化”的路径概念。 如果我没记错的话,标准本身甚至不太了解目录而不是相对的目录。

为了变得更好,我认为你需要推出自己的道路好东西。