/ / Linux pipe: Zachytávanie real-time výstupu ping cez popen - c ++, c, linux

Linux pipe: Zachytávanie výstupu ping v reálnom čase prostredníctvom popen - c ++, c, linux

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ď č. 1

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