0

我正在构建自己的脚本语言,只是为了好玩(是的,我知道这样做的困难),在 Linux 上的 C++ 中。这种脚本语言将有一个导入机制,用于在解释器传递阶段包含相关文件名。

所以/home/michael/foo/bar可能会加载../bar/baz哪个可能会加载../foo/baz等等。我得到的问题是我最终不得不加载这样的文件名:(/home/michael/foo/../bar/../foo/baz递归地添加到当前目录的相对文件名)。这在错误输出中看起来很傻,我想以后会引起其他问题,更不用说效率很低了。

我如何(除了编写我自己的文件名解析器)“优化”或“压缩”文件名以便我只需要加载/home/michael/foo/baz

我并不反对使用库,但如果可能的话,我更喜欢使用 POSIX/GNU C 库/扩展或 Boost,尽管从初步的角度来看,我在其中任何一个中都找不到任何我想要的东西,虽然也许我只是不知道要搜索什么。

4

2 回答 2

2

POSIX 定义了一个名为realpath的函数,它将为您解析路径名。它会整理.s、..s、多余的斜线,并且还会解析符号链接。

于 2013-04-21T10:06:23.880 回答
2

尝试真实路径

#include <stdlib.h>
#include <stdio.h>
int main()
{
  char resolved_path[100];
  realpath("/home/burgos/foo/../bar/../foo/baz", resolved_path);
  printf("\n%s\n",resolved_path);
  return 0;
}
于 2013-04-21T10:06:01.387 回答