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);
}
}
}
...