尝试使用 c 获取 strace
命令的输出,我编写了以下代码片:
int main()
{
FILE* pout;
pout = popen("strace -fp 44030 2>&1 | grep write","r");
char buff[1000];
int d1,d2;
while(1){
if(fgets(buff,1000,pout)!=NULL)
{
printf("buff=%s\n",buff);
}
else
continue;
}
pclose(pout);
}
当我在 shell 中运行所述命令时,我看到一些输出(44030 进程是在另一个终端中运行的 top
命令)。但运行程序时我什么也没看到。
此外,当我用 "strace -fp 44030 2>&1"
替换 popen
中的命令时,我通过运行程序看到 strace 命令的输出。我用另一段代码检查了 grep 和 popen 中的问题,并用 echo 命令替换了 strace。
我的问题出在哪里?我在哪里可以查找我的错误?
编辑:
当我等待一段时间后,那里有很多输出......我认为这是由于 grep 命令中的某种缓冲而发生的。
最佳答案
您只需在 grep 中禁用缓冲,可以使用 unbuffer
来实现。参见这里:https://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe
关于c - 为什么popen打开的文件是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40152972/