如何创建控制台终端?

时间:2013-04-04 16:41:58

标签: c++ user-interface console terminal vt100

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

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

使用术语“控制台”我只是指运行我的程序的终端,仅此而已,我不希望我的控制台与底层系统接口,只关心我的控制台应用程序。

所以我的问题是:给定一个C ++应用程序或一个命令行解释器,创建一个能够将自己与该应用程序接口并报告和管理通常输入的终端所需的专有技术是什么(std :: cout ,像铃铛这样的特殊字符,用户输入的文字等等?)

1 个答案:

答案 0 :(得分:2)

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

问题有三个组成部分:

  1. 从您的代码中运行另一个应用程序。
  2. 捕获所述应用程序的输出。
  3. 在控制台类型窗口中显示输出。
  4. 我相信至少1&对于每种主要类型的平台,2都是截然不同的,至少在Windows与Symbian与Linux / Unix类型平台上是不同的。我相信,在很大程度上,Android平台可以通过与Linux相同的方法实现这一目标。

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

    我希望,除了“平台特定代码”之外,这是一个需要几千行代码的项目,如果你知道从哪里开始(也就是说,你熟悉fork(), execl()等在Linux或其他操作系统中的等价物,熟悉stdinstderrstdout使用dup2()和类似功能的重定向,再次保留操作系统特定名称,可能会在几周内完成一些工作。如果你对这些事情一无所知,你将不得不首先学习如何使用这些功能。

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