初级代码游戏的专栏介绍与文章目录-CSDN博客
我的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前面加上一个下划线
可以用任何命令行调用这个代码。
(这里是结束)