如何与Node.js进程中的C++程序输入流进行交互

How to interact with a C++ program input stream from a Node.js process?

本文关键字:程序 C++ 输入流 交互 Node js 进程      更新时间:2023-09-26

我是Node.js的新手,但我对C++和Javascript并不陌生。我打算用node制作一个C++工具,但我遇到了一个问题,当C++程序调用std::cin时,我不知道如何将数据从node进程发送到C++进程。

请参阅此代码(main.exe):

int main() {
  int a, b, c;
  cout << "Enter 3 numbers: ";
  cin >> a >> b >> c;
  cout << "Total: " << (a + b + c) << endl;
  return 0;
}

在我的javascript代码中,我使用child_process.spawn来调用main.exe,我知道我可以使用事件'data'来获得消息"Enter 3 numbers: ",但我如何让节点自动进入abc,并最终完成main.exe?

更新:

我的Javascript代码(我不知道哪个事件可以用来写数据,所以我使用'data'

var spawn = require('child_process').spawn;
var child = spawn('main.exe');
child.stdout.on('data', (data) => {
  console.log(data);
  child.stdout.end('12 34 56');
});
child.on('close', (code) => console.log('Exit code: ' + code));

两件事,

  • 您的子进程在cout << "Enter 3 numbers: ";之后不会刷新,因此data事件永远不会被触发。(编辑:再次阅读您的问题,数据事件似乎被触发了。Windows下的缓冲机制可能与我在Linux上习惯的不同。不过,我将把它留在这里以防万一:)
  • 您需要为子进程写入stdin,而不是stdout

请尝试使用以下javascript代码:

var spawn = require('child_process').spawn;
var child = spawn('main.exe');
child.stdin.end('12 34 56');
child.stdout.on('data', (data) => {
  console.log(data);
});
child.on('close', (code) => console.log('Exit code: ' + code));