/ / Linux pipe: capture de la sortie en temps réel de ping via popen - c ++, c, linux

Linux pipe: Capture de sortie en temps réel de ping via popen - c ++, c, linux

Linux / C / pipes:

Comment capturer la sortie de la commande ping à l'aide de popen (ou d'appels système similaires). Popen attendra que ping soit terminé. Ensuite, la sortie sera sauvegardée ensemble.

Pseudo code:

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

Réponses:

7 pour la réponse № 1

Il n’attend pas que ping soit terminé. Au contraire, ping attend que le stdout le tampon se remplit avant d'écrire quoi que ce soit. Les seuls moyens d'éviter cela impliquent des pseudo-ttys. Soit tu devrais abandonner popen et écrivez le code pour exécuter le processus enfant ping vous-même et utiliser un pseudo-tty pour communiquer (ceci est facile avec le logiciel standard mais largement disponible forkpty fonction) ou vous pouvez écrire un programme wrapper qui exécute une requête ping à travers un pseudo-pty et saisit la sortie, et l'écrit sans tampon à stdout.