systeminfo 如何打印行?

How does systeminfo print lines?

我正在使用以下代码获取 Windows 7 上的系统信息。

#include<stdio.h>

int main()
{

    FILE *p;
    p = popen("systeminfo", "r");

    if(!p) {
        fprintf(stderr, "Error opening pipe.\n");
        return 1;
    }

    while(!feof(p)) {
        printf("%c", fgetc(p));
    }

    if (pclose(p) == -1) {
        fprintf(stderr," Error!\n");
        return 1;
    }

    return 0;
}

当代码为运行时,命令行等待几秒钟以获取所需信息。第一行说:

loading processor information...

然后将自身更新为:

loading hotfix information...

这种情况发生了 5 或 6 次,然后实际输出写入命令行 window。

我想问一下,虽然代码说要按顺序打印所有字符,但第一行是如何自我更新的?

printf("%c", fgetc(p));

我做了一些实验,结果证明如果重定向标准输出,systeminfo 会将状态行发送到标准错误。 (如果标准输出和标准错误都被重定向,状态行被抑制。)

由于 popen 仅重定向标准输出,您的代码没有看到状态行中的字符,它们将通过标准错误转到控制台。

(请注意,子进程也可以完全忽略重定向并将其输出直接发送到控制台。)