Linux / C / trubky:
Ako môžem zachytiť výstup príkazu ping pomocou popenu (alebo podobných systémových volaní). V súčasnosti bude popen čakať na dokončenie ping. Potom bude výstup vyhodený dohromady.
Pseudo kód:
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);
}
}
odpovede:
7 pre odpoveď č. 1Nie je to čakanie, kým ping nie je hotový stdout
vyrovnávacia pamäť zaplní pred zápisom čokoľvek. Jediný spôsob, ako sa tomu vyhnúť, je pseudo-ttys. Buď by ste sa mali vzdať popen
a napíšte kód na spustenie procesu ping dieťaťa a použite pseudo-tty na komunikáciu (to je jednoduché s neštandardným, ale široko dostupným). forkpty
funkciu) alebo môžete napísa \ tbaliaci program, ktorý beží ping cez pseudo-pty a chytí výstup a zapíše ho \ t bez bufferingu na stdout
.