Windows下C++获得CMD的输出信息

在C++中,system函数可以运行命令行,但是只能得到该命令行的int型返回值,并不能获得显示结果。例如system(“ls”)只能得到0或非0,如果要获得ls的执行结果,则要通过管道来完成的。首先用_popen(Linux下函数名为popen)打开一个命令行的管道,然后通过fgets获得该管道传输的内容,也就是命令行运行的结果。

VS2013下代码如下:

#include "stdafx.h"
#include<windows.h>
#include<string>
#include<iostream>
using namespace std;

std::string getCMD(char * cmd){
	FILE *file;
	char ptr[1024] = { 0 };
	char tmp[1024] = { 0 };
	strcat_s(ptr, cmd);
	string result = "";
	if ((file = _popen(ptr, "r")) != NULL)
	{
		while (fgets(tmp, 1024, file) != NULL){
			result = result + tmp;
		}
		_pclose(file);
	}
	return result;
}

int _tmain(int argc, _TCHAR* argv[])
{
	cout << getCMD("ping www.maplefan.com");
	system("pause");
}

 

上列代码在执行诸如ping命令这种需要等待的命令行的时候,会知道ping指令完全结束才一次输出信息。

如果想要像ping命令一样即时输出的话,可以在while循环里想办法输出即可。

发表评论

电子邮件地址不会被公开。 必填项已用*标注