/ / Linux Pipe: Erfassen der Echtzeitausgabe von Ping über popen - c ++, c, linux

Linux pipe: Erfassung der Echtzeitausgabe von Ping über popen - c ++, c, linux

Linux / C / Pipes:

Wie kann ich die Ausgabe des Ping-Befehls mithilfe von Popen (oder ähnlichen Systemaufrufen) erfassen. Momentan wartet popen, bis der Ping beendet ist. Die Ausgabe wird dann gemeinsam ausgegeben.

Pseudocode:

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

Antworten:

7 für die Antwort № 1

Es wird nicht gewartet, bis Ping beendet ist. Ping wartet vielmehr bis stdout Puffer füllt sich vor dem Schreiben. Die einzigen Möglichkeiten, dies zu vermeiden, umfassen Pseudo-TTYs. Entweder sollten Sie aufgeben popen und schreiben Sie den Code, um den Ping-Child-Prozess selbst auszuführen, und verwenden Sie eine Pseudo-tty für die Kommunikation (dies ist mit dem nicht standardmäßigen, aber weithin verfügbaren Standard einfach möglich forkpty function) oder Sie könnten ein Wrapper-Programm schreiben, das Ping durch ein Pseudo-pty ausführt und die Ausgabe erfasst und schreibt ohne Pufferung zu stdout.