为什么popen打开文件是空的?

时间:2016-10-20 11:19:22

标签: c linux


尝试使用c i输出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命令)。但是我在运行程序时什么也看不见 此外,当我用popen替换"strace -fp 44030 2>&1"中的命令时,我通过运行我的程序看到strace命令的输出。我已经检查了greppopen中的问题,另一段代码用echo命令替换了strace。
我的问题在哪里?我在哪里可以找到我的错误? 编辑:
因为我现在等了一段时间,那里有很多输出......我认为这是因为grep命令中的某种缓冲而发生的。

1 个答案:

答案 0 :(得分:2)

您只需要在grep中禁用缓冲,您可以使用unbuffer执行此操作。见这里:https://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe