我正在尝试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
的默认输出是标准错误所以它必须被重定向到标准输出对管道有用。