这是我的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;
}
这意味着当进程退出时,一切正常。但那不是我想要的。
有人能帮助我吗?感谢。
答案 0 :(得分:1)
听起来你的C ++程序存在缓冲问题;它可能不会自动刷新stdout
的每一行的缓冲区,因此所有输出都“聚集”直到它退出。我知道有一些ioctl
设置可以用来改变它,但我早就忘记了它们是什么。搜索“stdout buffering”可能会带来一些有用的东西。