【问题标题】:C++ Execute Commandline and get ResultC++ 执行命令行并获取结果
【发布时间】:2015-12-15 18:00:48
【问题描述】:

我想使用命令行 (CMD.exe) 来执行一个函数(如 "DIR" ; CD 等)并读出结果。我用 POPEN 尝试过,但问题是,我只能执行 1 个订单。 类似的东西

cd .. 
dir

我会这样做。

这是我的“假代码”,我想怎么做

Get Order from USER
Execute in Commandline
Print out the Result
Jump to start

我就是这样做的。 Objekt "S" 是我的套接字类的一部分。

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");


}

希望你能理解我的问题,我的英文不太好:$

谢谢!

【问题讨论】:

  • 然后将所有内容放入 .cmd 或 .bat 文件中,然后执行。
  • 对我的程序不起作用。

标签: c++ cmd


【解决方案1】:

您必须了解,当您使用 popen 时,您正在创建一个新进程,然后是该进程的管道。当您运行命令行“cd ..”时,您只是在更改该进程的工作目录。您可以根据需要多次使用 popen,但请确保在完成后使用 pclose。

例如,这将是一个基本的外壳:

#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;
}

【讨论】:

猜你喜欢
  • 2016-03-21
  • 2011-11-03
  • 2014-07-09
  • 2010-09-17
  • 2013-03-27
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
相关资源
最近更新 更多