gpt4 book ai didi

C 使用popen对数据执行命令

转载 作者:太空宇宙 更新时间:2023-11-04 04:48:13 26 4
gpt4 key购买 nike

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

最佳答案

我最终用这个修复了它,以防万一其他人遇到类似的问题:

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

关于C 使用popen对数据执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18798670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com