Linux / C / tubi:
Come posso catturare l'output del comando ping usando popen (o chiamate di sistema simili). Attualmente popen attenderà fino al termine del ping. Quindi l'output verrà scaricato insieme.
Pseudo codice:
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);
}
}
risposte:
7 per risposta № 1Non sta aspettando fino al termine del ping. Piuttosto, il ping è in attesa fino al stdout
il buffer si riempie prima di scrivere qualsiasi cosa. Gli unici modi per evitarlo sono le pseudo-tty. O dovresti abbandonare popen
e scrivere il codice per eseguire manualmente il processo figlio ping e utilizzare uno pseudo-tty per comunicare (questo è facile con lo standard non standard ma ampiamente disponibile forkpty
funzione) oppure potresti scrivere un programma wrapper che esegue il ping tramite uno pseudo-pty e prende l'output e lo scrive senza buffering a stdout
.