为什么popen不抓取qemu的输出?

Why does popen not grab the output of qemu?

下面的代码适用于 /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;
}

正如@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");