ltrace
envia para stderr , não stdout . Mas o popen()
irá ler o pipe que conecta o comando stdout . Então, isso deve ser suficiente para corrigir isso:
FILE *fp = popen("ltrace -p pid 2>&1", "r");
UPDATE: da mesma forma, para filtrar diretamente o mesmo comando ltrace
em um shell:
ltrace -p pid 2>&1 | grep someregex
A saída padrão do ltrace
é para stderr , então ele deve ser redirecionado para stdout para ser útil para um pipe.