【问题标题】:Why does popen not grab the output of qemu?为什么popen不抓取qemu的输出?
【发布时间】:2020-12-21 18:23:10
【问题描述】:

下面的代码适用于 /bin/ls 和其他程序,但不适用于 qemu。如何使用 popen 获取 qemu 的输出流? 我跑了qemu-x86_64 -d cpu /bin/ls 并期望得到与qemu 相同的输出,但在它之前有一个“read:”。当我运行它时,我只是控制台中的正常 qemu 输出。

int main()
{

        /* Call program */
        FILE* file = popen("/bin/ls", "r");
        if(file == NULL)
        {
            perror("popen");
            return 0;
        }

        /* output stream of program*/
        char *out = NULL;
        size_t outlen = 0;

        /*iterate through program output stream line by line */
        while (getline(&out, &outlen, file) >= 0) 
        {
            /* print output stream */
            printf("read: %s", out);
        }

        /* cleanup */
        pclose(file);
        free(out);
         
        return 0;
}

【问题讨论】:

  • 大概,qemu 不会写入标准输出。

标签: c output stdout popen qemu


【解决方案1】:

正如@rici 指出的那样,qemu 实际上并没有打印到stdout。 Qemu 打印到stderr 并将输出从stderr 重定向到stdout 以便popen 捕获它我只需要在执行的命令后面添加2>&1

所以不要运行:

FILE* file = popen("qemu-x86_64 -d cpu /bin/ls", "r");

我需要跑步:

FILE* file = popen("qemu-x86_64 -d cpu /bin/ls 2>&1", "r");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多