/ / Linux pipe: acquisizione dell'output in tempo reale del ping tramite popen - c ++, c, linux

Pipe Linux: Cattura di output in tempo reale di ping tramite popen-c ++, c, linux

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

Non 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.