chid_process c应用程序中的Node.js分组标准输出

时间:2019-03-28 05:02:04

标签: c node.js

我正在通过node.js服务将远程客户端连接到c应用程序,当从node.js应用程序输出时,无法将printf()语句与c应用程序分开。

printf()语句快速连续发生时,node.js应用程序将它们一起打印。这会导致客户端解析该输出时出错。

由于我是c语言的新手,并且还很早就在node.js中学习,因此我的测试使我猜测到该问题与node.js如何处理stdout中的child_process流有关

我还应该注意,输出并非始终是错误的。在代码中的一些地方,它更具可变性,并且与用户输入的速度相关(这是针对游戏的)。我在下面分享的示例是输出始终最不正确的情况。

我尝试过:

  • 直接运行c程序。 (这给了我预期的[正确]结果)
  • 使用setvbuf调整c中的缓冲区大小(来自node.js应用程序的意外结果)
  • 从节点运行具有spawnexec的同步和异步版本的c应用程序(来自node.js应用程序的意外结果)

这是c应用程序的一部分:

void readPin(int outputPin){

  if(output[lightPins[light]] == outputPin){
    reportGameStatus("light match");
    lightSuccess();
  }
  ...
}

void lightSuccess(){
  reportGameStatus("light success");
  ...

}

void reportGameStatus(char* event){
  printf("{"
        "\"event\":\"%s\","
      "}\n",
        event
      );

    fflush(stdout);
}

这是node.js部分:

var spawn = require("child_process").spawn;
var process = spawn("./cApplication");

process.stdout.on('data',function(msg){
    console.log('stdout: ' + msg);
        ...
});

这将导致来自node.js应用程序的以下输出:

stdout: {"event":"light match"}{"event":"light success"}

预期结果:

stdout: {"event":"light match"}
stdout: {"event":"light success"}

0 个答案:

没有答案