gpt4 book ai didi

C windows _popen on 命令请求输入 : avoid freeze

转载 作者:行者123 更新时间:2023-11-30 15:57:41 25 4
gpt4 key购买 nike

我有这个问题;我正在编写一个必须执行 cmd 命令的 C 编码服务器。 main() 必须创建一个新线程,并且该线程必须创建一个新进程,该进程必须启动此 cmd 命令并发回结果。

如果命令仅发回输出(即 dir、netstat、ls 等),则效果很好。但是,当我尝试使用具有 ro 等待输入作为“日期”(等待新日期)的命令时,新进程会卡住。这是不可能解决的,因为我可以在新进程的句柄上使用 WaitForSingleObject 并使用超时,因此如果进程一段时间内没有完成,我可以使用 TerminateProcess() 终止它。

但是使用进程cmd.exe将继续运行,因为它是由我的服务器进程启动并且从未关闭。

我不关心需要输入的命令,我只是想忽略它们,这样如果 _popen 等待某些东西,我只需关闭 cmd 并返回。

是否有某种方法可以避免 _popen 在需要输入的命令上卡住的情况?

这里是运行_popen的进程的代码

char readBuff[8096];
DWORD readed;
ReadFile(pipe,readBuff,8096,&readed,NULL);
FILE * out=_popen(commandToExec,"r"); //assume commandToExec contains "date"
char buffer[128];
char output[8096];
output[0]='\0';
while(fgets(buffer, 128, out)){
snprintf(output,8096,"%s%s\n",outputComando,buffer);
}
DWORD writed;
WriteFile(pipe,outputComando,8096,&scritti,NULL); //it writes the output to a pipe

这在仅输出命令上工作正常,但它永远不会到达需要输入的命令上的“while”(我调试了它)

最佳答案

根据 popen 上的 msdn 页面,您需要额外的工作来重定向 stdin 和 stout

http://msdn.microsoft.com/en-us/library/ms682499.aspx

关于C windows _popen on 命令请求输入 : avoid freeze,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10338777/

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