我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。
这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。
这是个很基本的功能,因此功能在C运行库里就提供了。注意与执行程序并获得返回值的exec函数相区别,这个功能的目的在于获得程序的控制台输出。
两个函数:
- popen(windows下为_popen)打开管道并执行控制台程序,返沪FILE*用于后续操作。对于窗口程序会导致问题,并且在UWP中完全不支持
- pclose(windows下为_pclose)关闭管道,也就是FILE*
在这两个函数之间对FILE*读取数据即可。
popen的声明:
FILE *popen(
const char *command,
const char *mode
);
第一个参数就是要执行的命令行,第二个参数是打开的管道的模式,只有r、w、b、t四个可选项,分别是“读、写、二进制、文本”,按照书上的说法,一般大部分情况下都是单向交互的,要么是打开程序读取输出,要么是打开程序往里面吐数据,所以这个函数就设计成这样了。
UNIX/LINUX程序:
string & GetShellOutput(char const * cmd, string & output)
{
char buf[1024];
FILE * pf;
output = "";
if (NULL == (pf = popen(cmd, "r")))
{
cout << "popen失败 " << strerror(errno) << endl;
return output;
}
while (NULL != fgets(buf, 1024, pf))
{
output += buf;
}
//cout << output << endl;
pclose(pf);
return output;
}
windows版:
//只需在popen和pclose前面加上一个下划线
可以用任何命令行调用这个代码。
(这里是结束)