Cプログラムでltraceコマンドの出力を継続的に確認する方法

Cプログラムでltraceコマンドの出力を継続的に確認する方法

ltraceCプログラムを使用してコマンドの出力をキャプチャしようとしています。

を試してみましたが、うまくpopen()いきません。一度ではなく連続出力をキャプチャする必要があります。

以下は私のコードです。

#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;
}

アドバイスをしてください

ベストアンサー1

ltrace出力先標準エラー、いいえ標準出力。しかし、popen()接続コマンドを読み取るパイプ標準出力。したがって、この問題を解決するのに十分です。

FILE *fp = popen("ltrace -p pid 2>&1", "r");

ltrace更新:もう一度、シェルで同じコマンドを直接フィルタリングするには、次の手順を実行します。

ltrace -p pid 2>&1 | grep someregex

ltraceデフォルト出力は次のとおりです。標準エラーしたがって、次にリダイレクトする必要があります。標準出力パイプに便利です。

おすすめ記事