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