gpt4 book ai didi

c++ - 如何为 Windows 实现终端仿真器?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:53:02 35 4
gpt4 key购买 nike

这里有一些 C 样板,用于在 linux(以及可能的其他 unix)上生成终端程序并与之通信

int master, slave;

struct winsize wsize = {24, 80, 0, 0}; // 24 rows and 80 columns

if (openpty(&master, &slave, NULL, NULL, &wsize) < 0)
die("Failed to open the pty master/slave");

if (!fork()) {
// child, set session id and copy the pty slave to std{in,out,err}
setsid();
dup2(slave, STDIN_FILENO);
dup2(slave, STDOUT_FILENO);
dup2(slave, STDERR_FILENO);
close(master);
close(slave);
// then use one of the exec* variants to start executing the terminal program
}

// parent, close the pty slave
close(slave);
// At this point, we can read/write data from/to the master fd, and to the child
// process it would be the same as a user was interacting with the program

我知道 Windows 没有 fork()openpty(),所以我的问题是:如何在 Windows 上实现类似的功能?

如果可能,我希望看到执行以下操作所需的最少工作 C/C++ 代码:

  • 使用 CreateProcess 生成 cmd.exe 的交互式 session
  • 获取一组句柄/文件描述符,这些句柄/文件描述符可用于以模拟交互式控制台 session 的方式从/向生成的进程读取/写入数据。

最佳答案

Windows 控制台的工作方式与 Linux 控制台有很大不同。 Windows 中没有 PTY 或虚拟控制台可供生成或连接。您基本上是在 Windows 控制台本身工作。

然后您将自己处理所有 I/O 以模拟终端,跟踪控制台作为您的窗口、x/y 位置坐标、颜色等。

如果您对基于文本的界面感兴趣,您可以查看 PDcurses for windows 之类的东西。

关于c++ - 如何为 Windows 实现终端仿真器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24956414/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com