如何创建控制台终端

How to create a console terminal?

本文关键字:控制台 终端 创建 何创建      更新时间:2023-10-16

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

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

我所说的"控制台"只是指一个终端来运行我的程序,仅此而已,也仅此而已,我不想让我的控制台与底层系统接口,只关心我的控制台应用程序。

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

我认为这是一个"一个答案"太大的问题。

这个问题有三个组成部分:

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

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

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

我希望,除了"特定平台的代码",这是一个需要几千行代码的项目,如果你知道从哪里开始(也就是说,你熟悉Linux中的fork(), execl()等或它们在另一个操作系统中的等同物,并且熟悉重定向,如果stdin, stderrstdout使用dup2()和类似的函数,再次保留操作系统的特定名称,你可以在几周内大致工作。如果您对这些东西一无所知,那么您必须首先学习如何使用这些功能。

当然,做终端模拟,比如"在这里画一行文本","在X行插入空行","从这个位置清除屏幕"或"清除剩余行",等等,将需要相当多的工作来覆盖所有不同的变体和选项。特别是如果您希望在可变尺寸的显示器上做到这一点,而不是像原始VT100终端支持的"固定80列和25行"。我假设你已经编写了在OpenGL或OpenVG中绘制基本文本的代码(OpenVG是否支持文本,或者你必须"绘制位图"-我记不清它是如何工作的-我不是在Symbian Graphics中从事文本工作的人之一,所以我从来没有真正关心它是如何工作的)。