我试图使用C程序捕获ltrace
命令的输出。
我尝试过使用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;
}
请给我你的建议
发布于 2018-05-12 15:42:59
ltrace
输出到stderr,而不是stdout。但是popen()
将读取连接命令的stdout的管道。因此,这应该足以解决这个问题:
FILE *fp = popen("ltrace -p pid 2>&1", "r");
UPDATE:同样,要在shell中直接筛选相同的ltrace
命令:
ltrace -p pid 2>&1 | grep someregex
ltrace
的S默认输出是stderr,因此必须将其重定向到stdout,以便对管道有用。
https://unix.stackexchange.com/questions/443408
复制相似问题