如何用C ++执行极长命令?

时间:2014-07-06 17:22:40

标签: c++ windows cmd cygwin

我正在尝试在我的C ++程序中执行相当长的外部命令(带有长参数的curl)。

在Linux上工作正常,但Windows(在Cygwin下)总是显示"系统无法执行指定的程序"如果" cmd"超过127个字符。

Linux接受相同代码几乎无限大小。 尝试改变缓冲区的大小,没有变化。

使用此代码:

#include <string>
#include <iostream>
#include <stdio.h>

std::string exec(char* cmd) {
    FILE* pipe = _popen(cmd, "r");
    if (!pipe) 
        return "ERROR";

    char buffer[128];
    std::string result = "";
    while(!feof(pipe)) {
        if(fgets(buffer, 128, pipe) != NULL)
            result += buffer;
    }
    _pclose(pipe);
    return result;
}

是Windows特定限制,还是以某种方式扩展cmd缓冲区?

添加了我想要发送的char *的创建方式:

   string message="This is message to send.";
   std::string send="";
   std::string curl_header="curl -s -F \"token=aE71iieVt8G1RWdJb59qmAa3hbxxxx\" -F \"user=uPKYQyNgGURbH1g56nBnjn9jNsxxxxx\" -F \"message=";
   send.append(curl_header);
   send.append(message);
   send.append("\" https://api.pushover.net/1/messages.json");
   cout << "\n";
   cout << "FULL STRING WITH PARAMS TO EXECUTE:";
   std::cout << send << '\n';
   char *cstr = new char[send.length() + 1];
   strcpy(cstr, send.c_str());
   cout << "FULL CHAR ARRAY WITH PARAMS TO EXECUTE:";
   std::cout << cstr << '\n';//this returns correct string, even longer than 127 chars
   cout << exec(cstr);// this returns error, same with system() if cstr is longer than 127 chars
    delete [] cstr;

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用系统?

#include <iostream>

using namespace std;

int main(int argc,char** args){

if(argc<2){
    system("run run run run run run run run run run runr urn runrunrunru unr unrunr urn run runr unr urn run runrun runr unr urnrun runr urnurnrunrunrunrunrunrurn urnurnunrunrunrunrunrunrn u unru ru runr ur urn ru run rururnunrunrunr");
}else{
    printf("argc: %d",argc);
}
system("pause");
}

这似乎对我很好。该程序名为run,因此它使用该巨大的参数运行自身,然后打印出它看到的参数数量。这是你想要做的吗?