C ++执行命令行并获取结果

时间:2015-12-15 18:00:49

标签: c++ cmd

我想使用命令行(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");


}

希望你能理解我的问题,我的英语不是那么好:$

谢谢!

1 个答案:

答案 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;
}