1

我可以从哪里开始为我的 C++ 程序创建控制台?

我需要一个最低限度的控制台来启动和管理控制台应用程序,我需要它的原因是因为我需要将所有内容打包到 1 个可执行文件中并创建和控制我的小环境。

使用“控制台”一词,我仅指运行我的程序的终端,仅此而已,我不希望我的控制台与底层系统交互,只关心我的控制台应用程序。

所以我的问题是:给定一个 C++ 应用程序或命令行解释器,创建一个能够与该应用程序接口并报告和管理通常输入(std::cout,特殊字符)的终端所需的专业知识是什么?比如铃声、用户输入的文本等等)?

4

1 回答 1

3

我认为对于“一个答案”来说,这是一个太大的问题。

问题包含三个组成部分:

  1. 从您的代码运行另一个应用程序。
  2. 捕获所述应用程序的输出。
  3. 在控制台类型窗口中显示输出。

我相信每种主要类型的平台至少有 1 和 2 明显不同,至少在 Windows、Symbian 和 Linux/Unix 类型的平台上是不同的。我相信,在很大程度上,Android 平台可以通过与 Linux 相同的方法来实现这一点。

第三部分,除了模拟 VT100 或 ANSI 终端的所有复杂性(这很重要,因为要解析和解释大量不同的转义码,但您可能只需实现六个左右开始)。

我希望,除了“特定于平台的代码”之外,这是一个需要几千行代码的项目,并且如果您知道从哪里开始(也就是说,您熟悉fork(), execl()Linux 中的 etc 或其他操作系统中的等价物) , 并且熟悉重定向 if stdin,stderrstdoutusingdup2()和类似的功能, 再次保留操作系统特定的名称, 你可以在几周内得到大致工作的东西. 如果你不知道这些东西, 你将不得不学习如何使用这些功能首先。

当然,做终端仿真,比如“在这里画一行文字”,“在X行插入一个空行”,“从这个位置清屏”或者“清空剩余行”等等,都需要相当数量涵盖所有不同变体和选项的工作。特别是如果您希望在可变大小的显示器上执行此操作,而不是像支持原始 VT100 终端那样的“固定 80 列和 25 行”。而且我假设您已经编写了代码来在 OpenGL 或 OpenVG 中绘制基本文本(OpenVG 是否原生支持文本,或者您是否必须将其作为“绘制位图” - 我不记得它是如何工作的 - 我是不是在 Symbian Graphics 中处理文本的人之一,所以我从来没有真正关心过它是如何工作的)。

于 2013-04-04T17:29:19.397 回答