Linuxpipe道:通过popen捕获ping的实时输出

Linux的/ C /pipe道:

如何使用popen(或类似的系统调用)捕获ping命令的输出。 目前popen将等到ping完成。 然后输出将被倾倒在一起。

伪代码:

fp= popen("ping xxxx", "r"); while(!feof(pFp)) { if(fgets(fp ...) // <==currently the code blocks here until ping finishes in popen { printf(...real time ping output here); } } 

它不会等到ping完成。 相反,ping正在等待,直到写入任何东西之前stdout缓冲区填满。 避免这种情况的唯一方法是涉及伪ttys。 要么你应该放弃popen ,编写自己运行ping子进程的代码,并使用伪tty进行通信(这很容易使用非标准的,但广泛可用的forkpty函数),或者你可以编写一个包装程序, – 抓取输出,并将其写入stdout 而不缓冲