如何在C程序中连续检查ltrace命令输出

如何在C程序中连续检查ltrace命令输出

我正在尝试ltrace使用 C 程序捕获命令的输出。

我尝试过使用,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更新:同样,要在 shell 中直接过滤相同的命令:

ltrace -p pid 2>&1 | grep someregex

ltrace的默认输出是标准错误所以它必须被重定向到标准输出对管道有用。

相关内容