systeminfo如何打印行?

时间:2015-04-06 16:31:58

标签: c windows cmd printf

我使用下面的代码在Windows 7上获取systeminfo。

#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次,然后在命令行窗口中写入实际输出。

我想问一下第一行如何更新自己虽然代码说顺序打印所有字符?

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

1 个答案:

答案 0 :(得分:1)

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

由于popen仅重定向标准输出,因此您的代码无法查看状态行中的字符,而是通过标准错误进入控制台。

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