2012-09-23 38 views
1

所以我基本上在这里寻找最简单的方法,结果我想要的是一个游戏中的linux-shell(将使用opengl和sfml渲染),它将模拟/模拟一个linux盒子。 它不需要那么花哨,我优先考虑的是基础知识(ls,grep,cat,echo ..),某种编辑器(vim/nano-like),并且游戏逻辑可以与/ dev,/ etc等等在C++中模拟linux/bash shell?

我已经考虑了chrooting环境,但我看到的问题比解决方案更多。还想过是否有某种用C++编写的流行linux模拟器,它可以与主代码紧密集成,这是一个很长的时间,我还没有发现任何东西。

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

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

回答

3

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

+0

还没有想过busybox的!也许我可以用它的源代码来构建我自己的“集成的游戏操作系统”,并维护代码跨平台。谢谢! –

0

下面是我该怎么做。

我会实现目录结构作为节点的树(有点像链接列表,但是,每个父节点可以有任意数量的子节点)。然后,如果你想运行下面的命令(我知道,这些都不是在Linux中的所有命令,但是这应该还是给你我所说的是一个好主意),他们应该表现为这样:

  • ls - 简单看一下当前节点,并列出所有儿童

  • ls -R - 看当前节点,并列出所有孩子递归(见wikipedia's tree traversal page

  • cd /some/path - 基于拆分s,然后尝试将当前工作目录(这应该实现为指向节点的指针)更改为用户指定的路径。如果路径是绝对的(即/开始其在目录结构中的成员应该是容易核查只是通过尝试从根节点找到它。

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

  • rm somefile - 如果它在当前工作目录中简单地勾销一个子节点。

  • mkdir somedir - 将一个新的目录节点附加到当前正在工作的iff somedir尚不存在。

  • rmdir somedir - 删除从当前工作目录中名为somedir目录节点,如果它没有孩子。

现在上面只有真正谈论的目录结构,我可以继续列举命令以及他们将如何实施,但我想你明白了为止。所以,我会谈谈您列出的其他命令(grep,cat,echo,vim/nano)。

  • 就实施grep而言,以我的上述结构,做出一个非常原始的实现将相当容易。您只需循环遍历文件的每一行(在这种情况下,这将是与文件节点关联的数据)并在每一行上进行字符串比较,打印匹配。如果你准许正则表达式,那么我不能帮你,我建议看看c++ regular expressions library。不过,还有一个选择。grep是开源的,因此您可以使用它的源代码或者只是阅读它并理解它是如何实现的。 Grep's source code

  • 使用上面的树形结构“catting”一个或多个文件会很简单。所有与文件节点相关的数据都将按顺序排列。而且,就像grep猫一样是OSS(开源软件)。

  • echo应该是相当微不足道的实施。只需打印回它的论点。至少有回声的补救形式(虽然我真的不知道回声得到比这更复杂。

  • 至于实施VIM /纳米或类似的东西。我真的不能帮你。我再次倾斜引导你走向自己的源代码(vimnano)。不过,我知道这可能不是非常有帮助的,因为两者都是大项目。

+0

PS,我知道我有很多只是使用/阅读上面的源类型注释。我相信(和其他人一样)对编码良好的项目的来源(以及针对该问题的编码不佳的项目)是作为程序员学习和发展的最佳途径之一。 – mjgpy3

+0

我曾考虑过这个问题,但这需要大量的工作。我同意作为程序员晋升的最好方法是研究其他人的工作,但这是太多的学习/工作;游戏的这部分内容对我来说并不是一个足够大的资产,因此我花了很多时间去研究它。另外我的目标是创建一个真实的bash shell和一个linux系统的感觉,让用户可以根据他对bash/linux的真实知识赢得游戏,以及他对如何使用某些命令的偏好(认为真的很复杂例如,grep-arguments)。 –

+0

这是非常可以理解的。快乐的编码,朋友。 – mjgpy3