我试图使用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 someregexltrace的S默认输出是stderr,因此必须将其重定向到stdout,以便对管道有用。
https://unix.stackexchange.com/questions/443408
复制相似问题