我正在使用下面的代码在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));
最佳答案
我做了一些实验,结果发现,如果重定向标准输出,systeminfo
会将状态行发送到标准错误。 (如果同时重定向了标准输出和标准错误,则状态行将被抑制。)
由于popen
仅重定向标准输出,因此您的代码在状态行中看不到字符,它们会通过标准错误进入控制台。
(请注意,子进程也可能完全忽略重定向并将其输出直接发送到控制台。)