1

TL;DR 文字列を cmd.exe に送信し、grep/findstr または sort を実行してから、popen を使用して出力を出力するにはどうすればよいですか?

クライアントとサーバーのセットアップがあります。ユーザーは、'list X: | これは、「list X:」と「grep name」に分割されます。「list X:」はサーバーに送信され、サーバーはリスト関数を実行して、リストの結果を含む char[] を返します。次に、クライアントはこれを cmd.exe にフィードし、そのデータに対して「grep name」コマンドを実行して、ユーザーに出力する必要があります。cmd からクライアント プロセスにデータを返す必要はなく、出力するだけです。

現在、コードが書き込みを試みていないことはわかっていますが (ファイルを読み取りモードで開いています)、他にもいくつか試してみましたが、cmd.exe にデータを送信できないようです)。

コードは次のとおりです。

        ...
        int n = recv(clientSocket, reply, sizeof(reply), 0);

        std::string* cmdStr = new std::string(cmd);
        cmdStr->erase(std::remove(cmdStr->begin(), cmdStr->end(), '\n'), cmdStr->end());

        if(cmdStr->compare("") != 0)    //Something to pipe to command
        {
            char pipeBuffer[8192];
            FILE* pipe;

            char c [8192];
            strcat(c, "cmd.exe /C ");
            strcat(c, reply);
            strcat(c, " | ");
            strcat(c, cmdStr->c_str());

            if((pipe = _popen(c, "r")) == NULL)
            {
                printf("Unable to create pipe!\n");
            }

           while(!feof(pipe))
           {
              if(fgets(pipeBuffer, 8192, pipe) != NULL)
              {
                  printf(pipeBuffer);
              }
           }
        }
        ...
4

2 に答える 2

0

他の誰かが同様の問題に遭遇した場合に備えて、これで修正しました。

FILE* pipe;

if((pipe = _popen(cmdStr->c_str(), "w")) == NULL)
{
    printf("Unable to create pipe!\n");
}

fprintf(pipe, "%s", reply);

printf("\nPipe process returned %d\n", _pclose(pipe));
于 2013-09-14T07:11:03.667 に答える