在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循环里想办法输出即可。