Como verificar continuamente a saída do comando ltrace no programa C [closed]

0

Estou tentando capturar a saída do comando ltrace usando o programa C.

Eu tentei usar popen() , mas isso não está funcionando, eu preciso capturar continuamente a saída não apenas uma vez.

Abaixo está o meu código:

#include <stdio.h>
#include <stdlib.h>

int main(int carg, char *args[]) {
    FILE *fp = popen("ltrace -p pid", "r");
    char buf[255];
    while (1) {
        if (fgets(buf, 255, fp) != NULL) {
            printf("Captured Text: %s", buf);
        }
    }
    return 0;
}

Por favor, me dê seu conselho

    
por Yougesh 12.05.2018 / 16:59

1 resposta

1

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.

    
por 12.05.2018 / 17:42

Tags