为什么node.js不能在child_process.stdout上发送数据事件?

这是我的Node.JS代码

var rec = spawn('rec.exe'); rec.stdout.setEncoding('ascii'); rec.stdout.on('data', function (data) { console.log(data); //do something } ); 

而我的C ++程序(由Cygwin编译)使用printf()写入stdout。

 if(bufsize!=0&&rec[0]=='0') { printf("%s\n",rec); //printf("Received,write into exchange file\n"); //fp=fopen("recvdata.txt","w"); //fprintf(fp,"%s\n",rec); //fclose(fp); } 

但数据事件永远不会发射。

我敢肯定,我的C ++代码有些问题,因为它可以和其他一些命令一样使用ping。

然后我注意到,在这种情况下,事件被发射

 if(fd==-1) { printf("Failed,again\n"); return 0; } 

这意味着当进程退出时,一切正常。 但那不是我想要的。

有人能帮我吗? 谢谢。

这听起来像你的C ++程序有一个缓冲的问题; 它可能不会自动刷新stdout的每一行的缓冲区,所以所有的输出“聚集”,直到它退出。 我知道有一些ioctl设置可以用来改变它,但是我早已忘记了它们是什么。 search“标准输出缓冲”可能会提供一些有用的东西。