c++ - Online Compiler - 在等待输入时拦截程序并自动输入

标签 c++ command-line execution

上下文

我为大学项目编写了一个玩具编译器。现在我正在为编译器制作一个网站,我想让访问者能够在它的网站上用我的语言编写代码,然后在浏览器的一种虚拟终端中运行它。有点像 Go languageHaskell language网站。

虚拟专用服务器 (VPS) 或某些云功能可以使用我的编译器编译用户编写的代码。然后服务器也可以运行它,但它必须监视程序以便:

  1. 如果程序向 STDOUT 写入任何内容,服务器会将数据发送到前端,前端将在虚拟终端上显示。一种方法可能是使用 > 重定向输出。

  2. 每次程序要求输入时,服务器都会通知前端。然后前端将在虚拟终端中键入的文本发回,服务器将其注入(inject)到 STDIN 中。

我想我会为服务器使用 NodeJS。

问题

我如何知道可执行文件何时等待输入以及当它等待输入时我如何提供它?是否有一些预构建的机制或者我是否必须编写监控程序?。 p>

以下是我想到的几种方法:

  1. 拥有一个运行生成的可执行文件的 Valgrind 风格的虚拟机。我绝对不会走这么远。

  2. 修改我的编译器,以便对于语言中的每个“输入”命令,它生成汇编代码以实际写入它需要输入的文件(由服务器轮询)并观察另一个文件的变化(服务器将写入传入输入的位置)。

我希望有更简单的方法。另外,如果我想做的事情有更具描述性的名称和文档,请告诉我。

最佳答案

How do I know when an executable waits for input

你不需要(需要)。只需在用户输入时读取虚拟终端,然后用您读取的内容填充标准输入。 何时以及如果可执行文件需要输入,它就会在那里。

这就是每个类 Unix 系统上任何真实或虚拟终端的工作方式。如果您要编写一个普通的终端仿真器,这就是您要做的。无需因为您通过 HTTP 连接到您的终端仿真器而采取任何不同的方式。

关于c++ - Online Compiler - 在等待输入时拦截程序并自动输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56908200/

相关文章:

python - 单元测试后的命令不执行

c++ - CERN 根 - 根据时间过滤子树事件时出错

c++ - 如何使用 Eclipse 处理 Boost.Test 输出

python - Cython 生成的 C++ 代码中可能存在错误

linux - 如何包含管道 |在我的 linux 中找到 -exec 命令?

java - Process Builder递增错误

unix - 如何为 Perl 脚本的每一行输出运行 curl 命令?

c++ - 即使启用了 C++11,静态成员初始化也不适用于 GCC

opencv:执行在图像像素访问的双指针算法处停止

execution - 机器码和目标码的区别