2014-09-10 63 views
0

我正在測試node.js和作爲子進程啓動的可執行文件之間的通信。可執行文件將從node.js中通過child_process.spawn()啓動,其輸出將由node.js監視。我正在Linux和Windows操作系統上測試這個功能。無法生成與node.js正確通信的可執行文件

我已經成功地產生了tail -f /var/log/syslog並且偵聽了它的輸出,但是我自己的可執行文件似乎無法正確寫入標準輸出(無論以何種形式存在,都被node.js捕獲)。

測試代碼:

#include <iostream> 
#include <stdio.h> 
#include <unistd.h> 

int main() 
{ 
    using namespace std; 

    long x = 1; 

    while (true) 
    { 

     fprintf(stdout, "xtime - %ld\n", x++); 
     usleep(1000000); 
    } 
} 

(注:有些include S可以是無用的,我沒有檢查過)

+0

你嘗試在你的'fprintf()'之後添加'fflush(stdout)'嗎? – mscdex 2014-09-10 14:00:38

+0

@mscdex完成了!我有一種嘮叨的感覺,就是那種感覺,但是確實這是一件更復雜的事情。如果你發佈了正確的答案,我會很樂意接受它。謝謝。 – Doc 2014-09-10 15:33:05

回答

1

stdout輸出不自動刷新(至少在* nix)時stdout不是tty(即使輸出中有換行符,否則當stdout是tty時換行符通常會被刷新)。

因此,您可以通過setbuf(stdout, NULL);完全禁用stdout緩衝,也可以通過fflush(stdout);手動刷新輸出。

相關問題