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

Online Compiler - Intercept a program when it waits for input and feed it input automatically

上下文

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

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

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

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

我想我会在服务器上使用 NodeJS。

问题

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

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

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

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

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

How do I know when an executable waits for input

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

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