Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js来自chid_process c应用程序的分组标准输出_C_Node.js - Fatal编程技术网

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

Node.js来自chid_process c应用程序的分组标准输出,c,node.js,C,Node.js,我正在通过node.js服务将远程客户端连接到c应用程序,当从node.js应用程序输出时,我很难将printf()语句从c应用程序中分离出来 当printf()语句快速连续出现时,node.js应用程序将它们一起打印。这会导致客户端解析该输出时出错 由于我是c新手,并且还在node.js的早期阶段,我的测试让我猜测这个问题与node.js如何处理来自子进程的stdout流有关 我还应该注意到,输出并不总是不正确的。代码中有几个地方的变量更大,并且与用户输入的速度相关(这是针对游戏的)。我在下面

我正在通过node.js服务将远程客户端连接到c应用程序,当从node.js应用程序输出时,我很难将
printf()
语句从c应用程序中分离出来

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

由于我是c新手,并且还在node.js的早期阶段,我的测试让我猜测这个问题与node.js如何处理来自
子进程的
stdout
流有关

我还应该注意到,输出并不总是不正确的。代码中有几个地方的变量更大,并且与用户输入的速度相关(这是针对游戏的)。我在下面分享的例子是,输出总是不正确的

我试过:

  • 直接运行c程序。(这给了我预期的[正确的]结果)
  • 使用
    setvbuf
    调整c中的缓冲区大小(node.js应用程序的意外结果)
  • 使用同步和异步版本的
    spawn
    exec
    从节点运行c应用程序(node.js应用程序的意外结果)
下面是c应用程序的一部分:

stdout: {"event":"light match"}{"event":"light success"}
void readPin(int-outputPin){
if(输出[lightPins[light]]==outputPin){
报告游戏状态(“轻匹配”);
轻松成功();
}
...
}
void lightSuccess(){
报告游戏状态(“轻松成功”);
...
}
无效报告状态(字符*事件){
printf(“{”
“\“事件\”:\%s\,”
“}\n”,
事件
);
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"}

您列出的输出不是您的
reportGameStatus()
函数打印出来的…@Shawn错误的输出是可变的,并不总是显示出来。在应用程序中有一些情况下,这种情况的发生不太一致,并且取决于用户输入的速度。然而,我在这里分享的案例始终是不正确的。我将用这些信息编辑帖子。您列出的输出不是您的
reportGameStatus()
函数打印出来的…@Shawn错误的输出是可变的,并不总是显示出来。在应用程序中有一些情况下,这种情况的发生不太一致,并且取决于用户输入的速度。然而,我在这里分享的案例始终是不正确的。我会用这些信息编辑这篇文章。