/ / Linux pipe: Capturando a saída em tempo real do ping via popen - c ++, c, linux

Tubo Linux: Capturando a saída em tempo real do ping via popen - c ++, c, linux

Linux / C / pipes:

Como posso capturar a saída do comando ping usando o popen (ou chamadas de sistema semelhantes). Atualmente o popen esperará até o ping terminar. Então a saída será lançada em conjunto.

Pseudo-código:

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

Respostas:

7 para resposta № 1

Não está esperando até que o ping seja concluído. Em vez disso, o ping está aguardando até que o stdout buffer enche antes de escrever qualquer coisa. As únicas maneiras de evitar isso envolvem pseudo-ttys. Ou você deveria abandonar popen e escrever o código para executar o processo filho ping e usar uma pseudo-tty para se comunicar (isso é fácil com o não-padrão, mas amplamente disponível forkpty função) ou você pode escrever um programa wrapper que executa ping através de um pseudo-pty e pega a saída, e escreve-o sem buffer para stdout.