1

所以我基本上在这里寻找最简单的方法,因此我想要的是一个游戏内 linux-shell(将使用 opengl 和 sfml 呈现),它将模拟/模拟一个 linux 盒子。它不需要那么花哨,我优先考虑的是基础知识(ls、grep、cat、echo..)、某种编辑器(vim/nano-like),以及游戏逻辑可以与 /开发,/等等

我曾考虑过对环境进行 chroot,但我看到的问题多于这样做的解决方案。还考虑过是否有某种流行的用 C++ 编写的 linux 模拟器可以与主机代码紧密集成,这是一个远景,我还没有找到任何东西。

非常感谢任何帮助我走上正确道路的帮助!

PS。最终产品将是跨平台的(至少对于 win/linux 而言)

4

2 回答 2

3

您可能对BusyBox感兴趣,它是 Linux 命令行的许多功能的小型且免费的实现。您应该能够将它嵌入到您的游戏中,而不会有太多麻烦。当然,您还必须分别建模文件系统和 tty 接口。

于 2012-09-23T14:16:59.240 回答
0

这就是我将如何做到的。

我会将目录结构实现为节点树(有点像链表,但是,每个父节点可以有任意数量的子节点)。然后,如果您想运行以下命令(我知道,这些不是 Linux 中的所有命令,但这仍然可以让您对我所说的内容有一个很好的了解),它们的行为应该是这样的:

  • ls- 简单查看当前节点并列出所有子节点

  • ls -R- 查看当前节点并递归列出所有子节点(参见维基百科的树遍历页面

  • cd /some/path/some/path-根据s 进行拆分/,然后尝试将当前工作目录(这可能应该实现为指向节点的指针)更改为用户指定的路径。如果路径是绝对的(即从/它在目录结构中的成员资格开始,应该很容易通过尝试从根节点定位它来验证。

这让我想到了另一点。由于您的结构是节点树,因此您应该有两种类型的节点:代表文件的节点和代表目录的节点。目录可能有孩子,文件可能没有。此外,文件节点可能有一组关联的数据(可能是一个字符串),这些数据可能是文件的内容(因为您希望能够编辑文件)。

  • rm somefile- 如果子节点存在于当前工作目录中,则简单地取消它。

  • mkdir somedir- 将一个新的目录节点附加到当前工作中,如果somedir不存在的话。

  • rmdir somedirsomedir-如果没有子节点,则从当前工作目录中删除一个名为的目录节点。

现在上面只真正讨论了目录结构,我可以继续列出命令以及它们将如何实现,但我认为你已经明白了这一点。因此,我将讨论您列出的其他命令(grep、、、、cat)。echovim/nano

  • 就实现 grep 而言,使用我上面的结构,制作一个非常原始的实现会相当容易。您只需遍历文件的每一行(在这种情况下,这将是与文件节点关联的数据)并在每一行上进行字符串比较,打印匹配项。如果您允许使用正则表达式,那么我无法帮助您,我建议您查看c++ 正则表达式库。但是,还有另一种选择。 grep是开源的,因此您可以使用它的源代码或简单地阅读它并了解它是如何实现的。Grep 的源代码

  • 使用上述树形结构“分类”一个或多个文件将很简单。您只需cout按顺序排列与文件节点关联的所有数据。而且,grep像猫一样是OSS(开源软件)。

  • echo实施起来应该很简单。只需打印回它的论点。至少是一种补救形式的回声(尽管我不确定回声会比这更复杂。

  • 至于实现 vim/nano 或类似的东西。我真的帮不了你。我再次倾向于将您引向他们的源代码(vimnano)。但是,我意识到这可能不是很有帮助,因为两者都是大型项目。

于 2012-09-23T14:33:08.470 回答