Linux的/ C /管道:
如何使用popen(或类似的系统调用)捕获ping命令的输出.目前popen将等待ping完成.然后输出将被转储.
伪代码:
fp= popen("ping x.x.x.x", "r");
while(!feof(pFp))
{
if(fgets(fp ...) // <==currently the code blocks here until ping finishes in popen
{
printf(...real time ping output here);
}
}
Run Code Online (Sandbox Code Playgroud)
它不会等到ping完成.相反,ping正在等待stdout缓冲区填满之后才写入任何内容.避免这种情况的唯一方法涉及伪ttys.要么你应该放弃popen,并编写代码来自己使用ping子进程,并使用伪终端进行通信(这是很容易与非标准的,但广泛使用的forkpty功能),或者你可以写一个运行ping通伪PTY一个包装程序和抓住的输出,并且将它写入没有缓冲到stdout.
| 归档时间: |
|
| 查看次数: |
1944 次 |
| 最近记录: |