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 № 1Nã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
.