2012-07-11 89 views
2

這裏是我的Node.js代碼爲什麼node.js不能在child_process.stdout上發送數據事件?

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

而我的C++程序(通過Cygwin的編譯)寫的東西用printf到標準輸出()。

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; 
} 

這意味着,當進程退出,一切工作正常。但那不是我想要的。

有人可以幫助我嗎?謝謝。

回答

1

這聽起來像是你的C++程序存在緩衝問題;它可能不會自動沖洗每條線上的緩衝區,所以所有的輸出「聚集起來」直到退出。我知道有一些ioctl設置可以用來改變它,但我早已忘記它們是什麼。搜索「標準輸出緩衝」可能會提供一些有用的東西。

+0

謝謝,fflush後面的printf作品。 – user840866 2012-07-11 08:33:26

相關問題