TL;DR 如何将字符串发送到 cmd.exe,执行 grep/findstr 或排序,然后使用 popen 打印输出?
我有一个客户端和服务器设置。用户输入命令,例如'list X: | grep name',然后将其分解为 '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);
}
}
}
...