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 № 1Il 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
.