C

如何在C程序中連續檢查ltrace命令輸出

  • May 13, 2018

我正在嘗試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;
}

請給我你的建議

ltrace輸出到stderr,而不是stdout。但popen()會讀取連接命令stdout的管道。所以這應該足以解決它:

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

更新:同樣,在 shell 中直接過濾相同的ltrace命令:

ltrace -p pid 2>&1 | grep someregex

ltrace的預設輸出是到stderr,所以它必須被重定向到stdout才能對管道有用。

引用自:https://unix.stackexchange.com/questions/443408