我想使用命令行(CMD.exe)执行一个函数(如" DIR&#34 ;; CD等)并读出结果。我尝试使用POPEN,但问题是,我只能执行1个订单。 像
这样的东西cd ..
dir
不会起作用,我会这样做。
这是我的"假代码",我想怎么做
Get Order from USER
Execute in Commandline
Print out the Result
Jump to start
我是这样做的。
Objekt" S"是我的socket类的一部分。
while (1)
{
//GET THE ORDER
std::string r = s->ReceiveLine();
if (r.empty()) break;
cout<<r<<endl;
//EXECUTE THE ORDER
FILE *fp = popen(r.c_str(),"r");
char buf[2560];
//READ THE RESULT AND SEND TO USER
while (fgets(buf, 2560, fp))
{
s->SendBytes(buf);
}
s->SendLine("123++END");
}
希望你能理解我的问题,我的英语不是那么好:$
谢谢!
答案 0 :(得分:0)
您必须明白,当您使用popen时,您需要创建一个新流程,然后创建一个流程到该流程。当您运行命令行&#34; cd ..&#34;时,您只需要更改该进程的工作目录。您可以根据需要多次使用popen,但确保在完成后使用pclose。
例如,这将是一个基本的shell:
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
int main() {
for (;;) {
cout << "% ";
string line;
getline(cin, line);
if (line == "exit")
break;
auto fp = popen(line.c_str(), "r");
string out;
for (;;) {
char buf[512];
auto n = fread(buf, 1, sizeof(buf), fp);
if (!n)
break;
out.append(buf, n);
}
pclose(fp);
cout << out;
}
return 0;
}