2014-09-10 53 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);手动刷新输出。

相关问题